comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

HOOK WriteProcessMemory

  • 0 Respuestas
  • 1955 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado linkgl

  • *
  • Underc0der
  • Mensajes: 45
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Agosto 14, 2011, 12:10:30 am »
Acá hice un ejemplo donde hookeo a la API WriteProcessMemory, y guardo los bytes que se querían escribir en la memoria en un archivo .txt jeje (la base para un runpekiller ¿?), estoy en la fase optimización (quitando variables que solo use una vez y algunas que usé para debuggear) pero quería compartirlo porque pues me tomó un rato x) ojalá les guste:

PD: No usa dll.
Código: ASM
  1. Format PE GUI 4.0
  2. entry start
  3. include 'win32ax.inc'
  4.  
  5. ;@HOOK WriteprocessMemory             |
  6. ;  @Coder: linkgl                     |
  7. ;    @Fecha: 10/08/11                 |
  8. ;      @Agradecimientos:              |
  9. ;         The swash, Drinky94         |
  10. ;         & Haker Zero/Yst            |
  11. ;        @Sitios web:                 |
  12. ;          Indetectables.net          |
  13. ;          foro.h-sec.org             |
  14. ;_____________________________________|
  15. proceso db 'c:\writeprocessmemory.exe',0
  16. linkpi PROCESS_INFORMATION <>
  17. linksi STARTUPINFO <>
  18. temp dd ?,0
  19. tempu dd ?,0
  20. tam dd ?,0
  21. handle dd ?,0
  22.  
  23.  
  24. start:
  25.   invoke CreateProcessA,0,addr proceso,0,0,0,CREATE_SUSPENDED,0,0,linksi,linkpi
  26.   invoke LoadLibrary,"kernel32.dll"
  27.   mov [temp],eax
  28.   invoke GetProcAddress,[temp],"VirtualProtect"
  29.   mov [mVP],eax
  30.   invoke GetProcAddress,[temp],"GetProcAddress"
  31.   mov [gpa],eax
  32.   invoke GetProcAddress,[temp],"LoadLibraryA"
  33.   mov [gmh],eax
  34.   invoke GetProcAddress,[temp],"CreateFileA"
  35.   mov [cfa],eax
  36.   invoke GetProcAddress,[temp],"WriteFile"
  37.   mov [wfa],eax
  38.   invoke GetProcAddress,[temp],"SetFilePointer"
  39.   mov [sfp],eax
  40.   invoke GetProcAddress,[temp],"CloseHandle"
  41.   mov [chl],eax
  42.  
  43.   invoke LoadLibrary,"user32.dll"
  44.   mov [tempu],eax
  45.   invoke GetProcAddress,[tempu],"MessageBoxA"
  46.   mov [msgbox],eax
  47.  
  48.  
  49.   mov ebx,final
  50.   sub ebx,inyectame
  51.   mov [tam],ebx
  52.   invoke VirtualAllocEx,[linkpi.hProcess],0,[tam],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
  53.   mov [handle],eax
  54.   invoke WriteProcessMemory,[linkpi.hProcess],[handle],addr inyectame,[tam],0
  55.   invoke CreateRemoteThread,[linkpi.hProcess],0,0,[handle],0,0,0
  56.  ; invoke Sleep,3000
  57.   invoke ResumeThread,[linkpi.hThread]
  58.  ret
  59.  
  60.  proc inyectame
  61.   ;EDX = DELTAOFFSET
  62.   ;ESI = EBX
  63.   ;EDI = CUALQUIEROTRACOSA
  64.    call offset
  65.    offset:
  66.    pop edx
  67.    sub edx,offset
  68.    mov edi,edx
  69.    mov esi,edx
  70.    mov esi,edx
  71.    mov edi,edx
  72.    push edx
  73.    ;getmodulehandle
  74.    add edx,kernel
  75.    push edx
  76.    call [edi+gmh] ;getmodulehandle
  77.    ;restaurar
  78.    pop edx
  79.    push edx
  80.    ;getprocaddress
  81.    add edx,wpm
  82.    push edx
  83.    push eax
  84.    call [edi+gpa] ;getprocaddress
  85.    mov ebx,eax
  86.    ;restaura
  87.    pop edx
  88.    push edx
  89.    ;virtualprotect
  90.    add edi,originalp
  91.    push edi
  92.    push 0x40
  93.    push 0x5
  94.    push ebx
  95.    call [edx+mVP]
  96.    ;restaura
  97.    pop edx
  98.    mov edi,edx
  99.    push edx
  100.    ;dir.virtual guardada
  101.    add edx,vwriteprocessmemory
  102.    mov dword [edx],ebx
  103.    ;restaura
  104.    pop edx
  105.    ;modifica bytes
  106.    mov byte [ebx],0xE9
  107.    inc ebx
  108.    mov ecx,hook
  109.    add ecx,edx
  110.    sub ecx,ebx
  111.    sub ecx,4
  112.    mov dword [ebx],ecx
  113.    ret
  114.  
  115. restaurar:
  116.   mov edi,edi ;esto esta en la api al principio
  117.   push ebp   ;esto tambien, fue lo que pisamos
  118.   mov ebp,esp  ;y esto tambien se piso
  119.   ;add edx,vwriteprocessmemory
  120.   mov eax,[edx+vwriteprocessmemory] ;nos desplazamos a la posicion en memoria de la api
  121.   add eax,5 ;y saltamos 5 bytes (los que habiamos escrito)
  122.   jmp eax
  123.  
  124. hook:
  125.   call ofdelta
  126.   ofdelta:
  127.   pop edx
  128.   sub edx,ofdelta
  129.   mov esi,edx
  130. ;->sacamoslos parametros y los pusheamos
  131.   pop eax ;retorno :P
  132.   pop ebx  ;parametros
  133.   mov [edx+p1],ebx
  134.   pop ebx
  135.   mov [edx+p2],ebx
  136.   pop ebx
  137.   mov [edx+p3],ebx
  138.   pop edi
  139.   mov [edx+p4],edi
  140.   push [edx+p4]
  141.   push [edx+p3]
  142.   push [edx+p2]
  143.   push [edx+p1]
  144.   push eax
  145.   ; push eax
  146.   ;Guardamos el delta para que no nos de errores al restaurar el api
  147.   push edx
  148.   ;createfilea
  149.   add edx,ruta
  150.   push 0
  151.   push 0
  152.   push 4
  153.   push 0
  154.   push 0
  155.   push 0x40000000
  156.   push edx
  157.   call [esi+cfa];createfilea
  158.   mov [esi+hndle],eax
  159.   ;restauramos
  160.   pop edx
  161.   mov esi,edx
  162.   push edx
  163.   ;setfilepointer
  164.   push 2
  165.   push 0
  166.   push 0
  167.   push [esi+hndle]
  168.   call [esi+sfp]  ;setfilepointer
  169.   ;restauramos
  170.   pop edx
  171.   mov esi,edx
  172.   push edx
  173.   ;writefile
  174.   add esi,leidos
  175.   push 0
  176.   push esi
  177.   push edi
  178.   push ebx
  179.   push [edx+hndle]
  180.   call [edx+wfa] ;writefile
  181.   ;limpiamos
  182.   pop edx
  183.   mov esi,edx
  184.   push edx
  185.  
  186.   push [esi+hndle]
  187.   call [esi+chl]
  188.  
  189.   ;restauramos el offset delta
  190.   pop edx
  191.   mov ecx,edx
  192.   add ecx,restaurar
  193.   ;msgbox->
  194.   jmp ecx
  195.  
  196.  
  197.  
  198.   vwriteprocessmemory dd ? ;Direccion WriteProcessMemory
  199.   msgbox dd ?  ;Dirección MessageBox
  200.   tit db "Inyectado",0
  201.   msg db "Ya me inyecte",0
  202.   mVP dd ? ;Direccion virtualprotect
  203.   originalp dd ?
  204.   kernel db "KERNEL32.DLL",0
  205.   wpm db "WriteProcessMemory",0
  206.   ruta db 'j:\salida.txt',0
  207.   gpa dd ? ;Dir getprocaddress
  208.   gmh dd ? ;Dir loadlibrary/getmodulehandle en su defecto
  209.   cfa dd ? ;Dir createfilea
  210.   wfa dd ? ;Dir writefilea
  211.   sfp dd ? ;Dir setfilepointer
  212.   hndle dd ?
  213.   chl dd ?
  214.   leidos dd ? ;puntero para writefile bytesleidos
  215.   p1 dd ?
  216.   p2 dd ?
  217.   p3 dd ?
  218.   p4 dd ?
  219.  
  220.   endp
  221.   final:
  222. data import
  223.   library kernel32,'kernel32.dll'
  224.   import kernel32,CreateProcessA,'CreateProcessA',\
  225.   GetModuleHandle,'GetModuleHandleA',\
  226.   GetProcAddress,'GetProcAddress',\
  227.   VirtualAllocEx,'VirtualAllocEx',\
  228.   WriteProcessMemory,'WriteProcessMemory',\
  229.   CreateRemoteThread,'CreateRemoteThread',\
  230.   LoadLibrary,'LoadLibraryA',\
  231.   ResumeThread,'ResumeThread',\
  232.   Sleep,'Sleep'
  233. end data
« Última modificación: Agosto 14, 2011, 12:34:06 am por linkgl »

 

¿Te gustó el post? COMPARTILO!



[MASM] Hook al teclado

Iniciado por binary_death

Respuestas: 0
Vistas: 2249
Último mensaje Septiembre 01, 2013, 01:59:57 pm
por binary_death