{*******************************************************} { } { ThdMgRcver } { } { Copyright (C) 2022 kku } { } {*******************************************************} unit ThdMgRcver; interface uses Tocsg.Thread, System.Classes, System.SysUtils, Winapi.Windows, Winapi.Messages, CrmSocketBase, IdContext, ManagerService; const WM_RCV_PACKET_8261 = WM_USER + 3958; type TThdMgRcver = class(TCrmServerBase) private MgSvc_: TManagerService; protected procedure _ProcessRcv(AContext: TIdContext; sRcv: String); override; public Constructor Create(aMgSvc: TManagerService); end; implementation uses Tocsg.Exception, IdStack, Tocsg.Trace, Tocsg.Strings, Define, Tocsg.Convert, Tocsg.Process, Condition, Tocsg.Safe, GlobalDefine; // »ç¿ë Æ÷Æ® : 8261,8262,8263 // 8261 : »óŰª Àü¼Û - mg -> vw (svr) // TYPE_STATUSUPDATE, TYPE_VPNREGNEXG, TYPE_DISCONNECTRESULT, // TYPE_CLIPBOARDUSAGE, TYPE_DOMAINMONITOR, TYPE_PATCH, TYPE_ROUTERCHANGE (»ç¿ë¾ÈÇÔ) // 8262 : ¸®½Ã¹ö - vw -> mg (svr), ÇÁ·Î¼¼½º Â÷´Ü ¿äû µî // 8263 : ¸®½Ã¹ö¸®½ºÆ®? - vw -> mg (svr), ÇÁ·Î¼¼½º°¡ »ì¾Æ ÀÖ´ÂÁö üũ { TThdMgRcver } Constructor TThdMgRcver.Create(aMgSvc: TManagerService); begin Inherited Create(8261); MgSvc_ := aMgSvc; end; procedure TThdMgRcver._ProcessRcv(AContext: TIdContext; sRcv: String); procedure process_TYPE_STATUS; var sRes: String; begin sRes := ''; with MgSvc_.VulService do begin sRes := BooleanToStr(MgSvc_.VulService.IsVpnOn, 't', 'f'); // BooleanToStr(MgSvc_.IsServiceAvailable and (IsSafeMode or MgSvc_.IsTemporaryConn), 't', 'f'); sRes := sRes + 'f'; // BooleanToStr(IsForceDisconnect, 't', 'f'); // HE¿¡¼­ ó¸® 22_0622 13:41:22 kku sRes := sRes + 'f'; // BooleanToStr(IsScreenLogo, 't', 'f'); // HE¿¡¼­ ó¸® 22_0531 09:50:32 kku sRes := sRes + 'f'; // BooleanToStr(IsPrintBlock, 't', 'f'); sRes := sRes + 'f'; // BooleanToStr(IsDefaultPortBlock, 't', 'f'); // HE¿¡¼­ ó¸® 22_0516 17:13:54 kku sRes := sRes + 'f'; // BooleanToStr(IsWatermark, 't', 'f'); // HE¿¡¼­ ó¸® sRes := sRes + 'f'; // BooleanToStr(IsFileMonitor, 't', 'f'); // HE¿¡¼­ ó¸® sRes := sRes + 'f'; // BooleanToStr(IsFilePrevent, 't', 'f'); // HE¿¡¼­ ó¸® sRes := sRes + 'f'; // BooleanToStr(IsFileMasking, 't', 'f'); // HE¿¡¼­ ó¸® sRes := sRes + BooleanToStr(MgSvc_.ModePolicy.RouteEnable, 't', 'f'); sRes := sRes + 'f'; // BooleanToStr(MgSvc_.PrefModel.UsbEnable, 't', 'f'); // HE¿¡¼­ ó¸® sRes := sRes + 'f'; // BooleanToStr(IsIdleMode, 't', 'f'); // ½ºÅ©¸° ¼¼À̹ö // HE¿¡¼­ ó¸® // if IsIdleMode then // begin // SetIdleMode(false); // MgSvc_.HandleConfig.SetIdleTime('0'); // end; sRes := sRes + 'f'; // ? isIdlePortBlock sRes := sRes + BooleanToStr(MgSvc_.IsUninstall, 't', 'f'); sRes := sRes + BooleanToStr(IsZoomControl and (GetProcessPidsByName('zCefAgent.exe') > 0), 't', 'f'); sRes := sRes + 'f'; // BooleanToStr(MgSvc_.PrefModel.IsExtraPortEnable, 't', 'f'); // HE¿¡¼­ ó¸® 22_0516 17:13:54 kku sRes := sRes + 'f'; // sRes + BooleanToStr(MgSvc_.PrefModel.IsClipboardEnable, 't', 'f'); AContext.Connection.Socket.Write(sRes); // TYPE_DISCONNECT 󸮸¦ ±×³É ¿©±â¼­ ÇØÁØ´Ù 22_0523 13:51:59 kku // HE¿¡¼­ Á÷Á¢ ó¸®ÇÏ°Ô µÊ 22_0622 13:42:50 kku // if IsForceDisconnect then // SetDisconnect(false, false); end; end; procedure process_TYPE_ROUTECHANGE; var Router: TRouter; DataList: TStringList; bIsDefRouter: Boolean; i: Integer; sRes: String; begin with MgSvc_ do begin // Àӽà Á¢¼Ó ½Ã ¿¡µµ Â÷´ÜÇϱâ À§ÇØ ¾Æ·¡Ã³·³ º¯°æ 22_0523 16:24:01 kku if ModePolicy.RouteEnable and (MgSvc_.VulService <> nil) and // MgSvc_.VulService.IsVpnOn and (MgSvc_.RouterDefList.Count > 0 ) then begin Guard(DataList, TStringList.Create); Guard(Router, TRouter.Create); Router.Update(sRcv); if Router.DestIp <> '' then begin bIsDefRouter := false; if GetVpnIpList(DataList) > 0 then begin for i := 0 to DataList.Count - 1 do if Router.DestIp.Contains(DataList[i]) then begin bIsDefRouter := true; break; end; end; if not bIsDefRouter and (GetExceptionalRouterList(DataList) > 0) then begin for i := 0 to DataList.Count - 1 do if Router.DestIp.Contains(DataList[i]) then begin bIsDefRouter := true; break; end; end; if not bIsDefRouter then begin for i := 0 to MgSvc_.RouterDefList.Count - 1 do if MgSvc_.RouterDefList[i].DestIp = Router.DestIp then begin bIsDefRouter := true; break; end; end; if not bIsDefRouter then begin sRes := 'rtoc;add;' + Router.DestIp + ';'; AContext.Connection.Socket.Write(sRes); MgSvc_.PopupMessage(TYPE_MSG_PREVENT_ROUTERCHANGE, Format('- Dest : %s'#13#10'- IP Info : %s (%s)', [Router.DestIp, Router.NextHop, Router.SubnetMask])); gMgSvc.SendEventLog(URI_USER_ACTION, LOGCODE_PREVENT_ROUTE, Format('Routing table Prevented : %s, %s (%s)', [Router.DestIp, Router.NextHop, Router.SubnetMask])); end; end; end; end; // TTgTrace.T('TYPE_ROUTECHANGE'); end; procedure process_TYPE_ROUTEDEFAULT; var Router: TRouter; i: Integer; begin Router := TRouter.Create; Router.Update(sRcv); if Router.DestIp <> '' then begin // DestIp °¡ Áߺ¹µÇ´Â °æ¿ìµµ Àִ°ŠȮÀÎ 22_0425 08:35:23 kku // for i := 0 to MgSvc_.RouterDefList.Count - 1 do // if MgSvc_.RouterDefList[i].DestIp = Router.DestIp then // begin // ASSERT(false); // exit; // end; MgSvc_.RouterDefList.Add(Router); end else Router.Free; end; procedure process_TYPE_NETWORKMONITOR; var PrevList, ConnList, RecvList, RemoveList: TStringList; i, n: Integer; begin if sRcv = '' then exit; if CUSTOMER_TYPE = CUSTOMER_KR then exit; if sRcv.Contains(',') then begin Guard(PrevList, TStringList.Create); PrevList.AddStrings(MgSvc_.ActiveConnectList); Guard(ConnList, TStringList.Create); SplitString(sRcv, ',', ConnList); Guard(RecvList, TStringList.Create); Guard(RemoveList, TStringList.Create); for i := 0 to ConnList.Count - 1 do begin if MgSvc_.ActiveConnectList.IndexOf(ConnList[i]) = -1 then MgSvc_.ActiveConnectList.Add(ConnList[i]); RecvList.Add(ConnList[i]); end; for i := 0 to MgSvc_.ActiveConnectList.Count - 1 do if RecvList.IndexOf(MgSvc_.ActiveConnectList[i]) = -1 then RemoveList.Add(MgSvc_.ActiveConnectList[i]); for i := 0 to RemoveList.Count - 1 do begin n := MgSvc_.ActiveConnectList.IndexOf(RemoveList[i]); if n <> -1 then MgSvc_.ActiveConnectList.Delete(n); end; end else if MgSvc_.ActiveConnectList.IndexOf(sRcv) = -1 then MgSvc_.ActiveConnectList.Add(sRcv); if IsNetworkMonitor and (MgSvc_.ActiveConnectList.Count > 0) then begin if PrevList.Count > 0 then begin for i := 0 to MgSvc_.ActiveConnectList.Count - 1 do begin if PrevList.IndexOf(MgSvc_.ActiveConnectList[i]) = -1 then gMgSvc.SendEventLog(URI_USER_ACTION, LOGCODE_MONITOR_CONNECTION, 'Access : ' + MgSvc_.ActiveConnectList[i]); end; end else begin for i := 0 to MgSvc_.ActiveConnectList.Count - 1 do begin gMgSvc.SendEventLog(URI_USER_ACTION, LOGCODE_MONITOR_CONNECTION, 'Access : ' + MgSvc_.ActiveConnectList[i]); end; end; end; end; procedure process_TYPE_DOMAINMONITOR; begin if sRcv = '' then exit; if not IsNetworkMonitor then exit; gMgSvc.SendEventLog(URI_USER_ACTION, LOGCODE_MONITOR_DOMAIN, 'Domain : ' + sRcv); end; procedure process_TYPE_CLIPBOARD; begin if sRcv = '' then exit; MgSvc_.PopupMessage(TYPE_MSG_PREVENT_CLIPBOARD); gMgSvc.SendEventLog(URI_USER_ACTION, LOGCODE_PREVENT_CLIPBOARD, 'Clipboard Blocked'); end; // procedure process_TYPE_USBDISCONNECTED; // var // DataList: TStringList; // sInfo: String; // begin // if sRcv = '' then // exit; // // Guard(DataList, TStringList.Create); // SplitString(sRcv, '_tocLine_', DataList); // if DataList.Count > 1 then // sInfo := Format('Serial :'#13#10'%s', [DataList[1]]) // else sInfo := ''; // // MgSvc_.PopupMessage(TYPE_MSG_PREVENT_USBDISCONN, sInfo); // gMgSvc.SendEventLog(URI_USER_ACTION, LOGCODE_PREVENT_USB, // Format('USB Blocked : %s, %s', [DataList[0], DataList[1]])); // end; // procedure process_TYPE_VPNREGNEXG; // begin // MgSvc_.SetNexgVpnRegistered(sRcv = 't'); // end; procedure process_TYPE_ADDRESSCHANGE; begin // ºñȰ¼ºÈ­ µÇ¾î ÀÖÀ½ 22_0425 10:26:22 kku //try {Thread.sleep(1000);} catch (Exception e2) {} //ServiceManager.getNicService().updateAddress(); TTgTrace.T('TYPE_ADDRESSCHANGE'); end; procedure process_TYPE_FILECHANGE; // var // StrList: TStringList; begin // TTgTrace.T('TYPE_FILECHANGE, Rcv=%s', [sRcv]); if not sRcv.Contains('_tocLine_') then exit; // Guard(StrList, TStringList.Create); // SplitString(sRcv, '_tocLine_', StrList); // if StrList.Count <= 2 then // exit; // MgSvc_.PushProcFile(sRcv); // TTgTrace.T('TYPE_FILECHANGE, src="%s", dst="%s"', [StrList[1], StrList[2]]); end; var nType: Integer; begin // if hRcvHwnd_ <> 0 then // SendMessage(hRcvHwnd_, WM_RCV_PACKET_8261, 0, NativeInt(Trim(sRcv))); // TTgTrace.T(sRcv); nType := StrToIntDef(GetCapsuleStr(KEY_TYPE, KEY_DATA, sRcv), -1); if nType <> -1 then Delete(sRcv, 1, 25) else exit; case nType of //TYPE_PROCESSLIST : ; TYPE_CONFIG : ; // MgSvc_.HandleConfig.Update(sRcv); // TTgTrace.T('TYPE_CONFIG'); TYPE_SECURITY : ; // ÀÚü ó¸® 22_0513 11:17:50 kku, MgSvc_.HandleSecurity.Update(sRcv); // TTgTrace.T('TYPE_SECURITY'); TYPE_PATCH : MgSvc_.SetPatchUpdate(sRcv); // TTgTrace.T('TYPE_PATCH - %s', [sRcv]); TYPE_STATUS : process_TYPE_STATUS; //TTgTrace.T('TYPE_STATUS'); TYPE_DISCONNECT : ; // MgSvc_.VulService.SetDisconnect(false); // TTgTrace.T('TYPE_DISCONNECT'); //TYPE_USERINFO : ; TYPE_FILECHANGE : ; // process_TYPE_FILECHANGE; // TTgTrace.T('TYPE_FILECHANGE'); //TYPE_KILLPROCESS : ; TYPE_ROUTECHANGE : process_TYPE_ROUTECHANGE; // TTgTrace.T('TYPE_ROUTECHANGE'); TYPE_ROUTEDEFAULT : process_TYPE_ROUTEDEFAULT; // TTgTrace.T('TYPE_ROUTEDEFAULT'); TYPE_USBDISCONNECTED : ; // process_TYPE_USBDISCONNECTED; // TTgTrace.T('TYPE_USBDISCONNECTED'); TYPE_VPNREGNEXG : ; // process_TYPE_VPNREGNEXG; // TTgTrace.T('TYPE_VPNREGNEXG'); TYPE_ADDRESSCHANGE : process_TYPE_ADDRESSCHANGE; // TTgTrace.T('TYPE_ADDRESSCHANGE'); TYPE_IPMACADDRESS : ; // MgSvc_.NicService.Add(sRcv); // TTgTrace.T('TYPE_IPMACADDRESS'); TYPE_CLIPBOARD : process_TYPE_CLIPBOARD; // TTgTrace.T('TYPE_CLIPBOARD'); TYPE_NETWORKMONITOR : process_TYPE_NETWORKMONITOR; // TTgTrace.T('TYPE_NETWORKMONITOR'); TYPE_DOMAINMONITOR : ; // process_TYPE_DOMAINMONITOR; // TTgTrace.T('TYPE_DOMAINMONITOR'); // else TTgTrace.T('TYPE_UNKNOWN : Type=%d, %s', [nType, sRcv]); end; end; end.