elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  [MASM][UserMode]Hook OpenProcess
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [MASM][UserMode]Hook OpenProcess  (Leído 4,397 veces)
The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
[MASM][UserMode]Hook OpenProcess
« en: 11 Julio 2011, 23:55 pm »

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4.  
  5. include C:\masm32\include\windows.inc
  6. include C:\masm32\include\kernel32.inc
  7. includelib C:\masm32\lib\kernel32.lib
  8.  
  9. .data
  10. ProcessId        dd 0
  11. ProcessProtect   dd 0
  12. hProcess         dd 0
  13. APIAddress       dd 0
  14. SnapshotHandle   dd 0
  15. DistanceFunc     dd 0
  16. fAddress         dd 0
  17. Bytesw           dd 0
  18. _JMP             db 5 dup(?)
  19. Diference        dd 0
  20. Buff             db 0
  21. _PROCESSENTRY32  PROCESSENTRY32 <?>
  22. Process          db "taskmgr.exe",0   ;Process to Hook
  23. API              db "OpenProcess",0
  24. lLibrary         db "kernel32.dll",0
  25. Protect          db "notepad.exe",0   ;Process to Protect
  26.  
  27. .code
  28. start:
  29. mov dword ptr[_PROCESSENTRY32.dwSize], 0128h
  30.  
  31. _Begin:
  32. invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
  33. mov dword ptr[SnapshotHandle],eax
  34.  
  35. _Cmp:
  36.    invoke Process32Next,dword ptr[SnapshotHandle], addr _PROCESSENTRY32
  37.    mov edi, eax
  38.    invoke lstrcmp,addr Process, addr _PROCESSENTRY32.szExeFile
  39.    or eax, eax
  40.    jz _GetPID2
  41.    invoke lstrcmp,addr Protect, addr _PROCESSENTRY32.szExeFile
  42.    or eax, eax
  43.    jz _GetPID
  44.  
  45. _Continue:    
  46.    or edi, edi
  47.    jz _Exit
  48.    jnz _Cmp
  49.  
  50. _Proc:    
  51.    invoke GetModuleHandle, addr lLibrary
  52.    invoke GetProcAddress, eax, addr API
  53.    mov dword ptr[APIAddress], eax
  54.  
  55.    mov eax, offset _EndHook
  56.    mov ebx, offset _Hook
  57.    sub eax, ebx
  58.    mov dword ptr[DistanceFunc], eax
  59.  
  60.    invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,dword ptr [ProcessId]
  61.    mov dword ptr [hProcess], eax
  62.    invoke ReadProcessMemory,dword ptr[hProcess], dword ptr [APIAddress], addr Buff, 1, addr Bytesw
  63.    cmp byte ptr [Buff], 0E9h
  64.    jz _Exit
  65.    invoke VirtualAllocEx,dword ptr [hProcess],NULL,dword ptr[DistanceFunc],MEM_RESERVE or             MEM_COMMIT,PAGE_EXECUTE_READWRITE
  66.    mov dword ptr [fAddress], eax
  67.    mov ecx, offset _Hook
  68.    invoke VirtualProtect,ecx,10,PAGE_EXECUTE_READWRITE,addr Bytesw
  69.    mov ebx, dword ptr[APIAddress]
  70.    add ebx, 5
  71.    mov dword ptr[_Hook + 1], ebx
  72.    mov ebx, dword ptr[ProcessProtect]
  73.    mov dword ptr[_Hook + 6], ebx
  74.    mov ecx, offset _Hook
  75.    invoke WriteProcessMemory,dword ptr[hProcess], dword ptr [fAddress], ecx, dword ptr [DistanceFunc], addr Bytesw
  76.    invoke VirtualProtectEx,dword ptr[hProcess],dword ptr [APIAddress], 5, PAGE_EXECUTE_READWRITE, addr Bytesw
  77.    mov byte ptr [_JMP], 0E9h
  78.    mov edx, dword ptr [fAddress]
  79.    add dword ptr [APIAddress],5
  80.    sub edx, dword ptr [APIAddress]
  81.    mov dword ptr [_JMP +1], edx
  82.    sub dword ptr [APIAddress], 5
  83.    invoke WriteProcessMemory,dword ptr [hProcess], dword ptr[APIAddress], addr _JMP, 5, addr Bytesw
  84.    invoke CloseHandle, dword ptr [hProcess]
  85.  
  86. _Exit:
  87.    invoke ExitProcess,0
  88.  
  89. _Hook:
  90.    mov eax, 00000000h ; API Address
  91.    mov ecx, 00000000h ; PID
  92.  
  93.    push ebp           ; Stack frame
  94.    mov ebp, esp
  95.  
  96.    pushad
  97.    cmp ecx, dword ptr [ebp + 10h]
  98.    jz _Hooked                     ; If is equal jump to Hooked
  99.    popad                          ; Restaure registers
  100.    jmp eax                        ; Jump to API + 5
  101.  
  102. _Hooked:
  103.    popad
  104.    mov esp, ebp
  105.    pop ebp
  106.    mov eax, 0
  107.    retn 0Ch
  108. _EndHook:    
  109.  
  110. _GetPID:
  111.    mov eax, dword ptr [_PROCESSENTRY32.th32ProcessID]
  112.    mov dword ptr[ProcessProtect],eax
  113.    jmp _Found
  114.  
  115. _GetPID2:
  116.    mov eax, dword ptr [_PROCESSENTRY32.th32ProcessID]
  117.    mov dword ptr[ProcessId],eax
  118.    jmp _Cmp2
  119.  
  120. _Found:
  121.    cmp [ProcessId],0
  122.    jz _Cmp
  123.    jmp _Cmp2
  124.  
  125. _Cmp2:
  126.    cmp dword ptr[ProcessProtect],0
  127.    jnz _Proc
  128.    jmp _Cmp
  129.  
  130. end start

Información:
Este es el pequeño ejemplo de enganchar(Hookear) a la función Kernel32.OpenProcess la cual permite abrir un proceso por muchos motivos (Cerrarlo, obtener información, modificar, etc).

¿Que hace exactamente?
Sencillamente enganchamos esa función y así podemos verificar si quieren abrir el proceso que nosotros designemos a proteger.

Ustedes pueden hacerle su respectiva adaptación a condiciones etc, pero me enfoque en un ejemplo y en aprender.

Mis mayores agradecimientos a Lelouch (Como me soportaste xD) y a [Zero].
Dedicado a todos mis mentores :P (Sobra mencionarlos)
Saludos.

En línea

jackgris

Desconectado Desconectado

Mensajes: 149



Ver Perfil
Re: [MASM][UserMode]Hook OpenProcess
« Respuesta #1 en: 12 Julio 2011, 04:59 am »

Muchas gracias esta bueno para aprender, mientras vez codigo  ;-)
En línea

Binary_Death

Desconectado Desconectado

Mensajes: 214



Ver Perfil
Re: [MASM][UserMode]Hook OpenProcess
« Respuesta #2 en: 12 Julio 2011, 05:44 am »

Muy bueno The Swash!
Ten por seguro que me lo voy a mirar bien y me será muy útil  :P

Un saludo!
En línea

SkaPuti

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [MASM][UserMode]Hook OpenProcess
« Respuesta #3 en: 15 Julio 2011, 05:11 am »

Mi amore se parece mi ejemplo de tu code

http://foro.elhacker.net/analisis_y_diseno_de_malware/src_rootkit_findnextfilea_iat_patching-t265665.0.html;msg1299734 :D
En línea

afdlkglfgfdgfhgf

Desconectado Desconectado

Mensajes: 92


Ver Perfil
Re: [MASM][UserMode]Hook OpenProcess
« Respuesta #4 en: 15 Julio 2011, 23:46 pm »

The_wash esta re-inventando la rueda, hace rato que viene rehaciendo los tutoriales y codigos que ya estan hechos.  :silbar:
En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: [MASM][UserMode]Hook OpenProcess
« Respuesta #5 en: 16 Julio 2011, 00:34 am »

The_wash esta re-inventando la rueda, hace rato que viene rehaciendo los tutoriales y codigos que ya estan hechos.  :silbar:

Es la única forma de aprender, no me gusta nada la gente que piensa de esa forma. Yo recibí ese tipo de críticas en algunos foros y me ponen enfermo, si no experimentas las cosas no aprendes, es el proceso lo más importante, no el resultado.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
afdlkglfgfdgfhgf

Desconectado Desconectado

Mensajes: 92


Ver Perfil
Re: [MASM][UserMode]Hook OpenProcess
« Respuesta #6 en: 16 Julio 2011, 06:17 am »

lo defiendes por que tu tambien calcas los codigos  ;-)  , pero yo digo lo que pienso y punto, para mi es mas de lo mismo...
En línea

Space.Medafighter.X

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: [MASM][UserMode]Hook OpenProcess
« Respuesta #7 en: 16 Julio 2011, 06:37 am »

Es natural que esta clase de códigos se parezcan ya que siempre se usan los mismos métodos basados en la misma teoría. Ahora parece que porque un novato publica su ejemplo de hooking, code caving u otro estúpido nombre que quieran usar es un calca-códigos. Además ni que fueran tan excelentes los ejemplos, se pueden mejorar mucho, simplificar la teoría con un ejemplo práctico, etc. API Hooking en usermode no tiene nada de innovador ni uber para tanta discusión, pienso que cualquier código que use OpenProcess, VirtualProtectEx, VirtualAllocEx, WriteProcessMemory para este tipo de cosas se parecería. Otra cosa que hay que destacar es lo inútiles que son las críticas de los usuarios del foro con su infinita sabiduría.

Código:
mov eax, offset _EndHook
mov ebx, offset _Hook
sub eax, ebx

Esa clase de cosas no requieren hacer uso de instrucciones porque siempre el tamaño entre esos offsets sera un valor fijo ya que no se iran corriendo una vez que se haya ensamblado el código, por lo que se puede usar el tamaño de la función directamente en WriteProcessMemory.

Código:
mov ecx, offset _Hook
invoke WriteProcessMemory,dword ptr[hProcess], dword ptr [fAddress], ecx, dword ptr [DistanceFunc], addr Bytesw

Eso tiene poco sentido y supongo que no hace falta mayor explicacion, sobretodo porque el valor de ecx será diferente despues de la llamada a WriteProcessMemory y porque no se vuelve a usar. Me da pereza seguir revisando el código, nos vemos.
En línea

SkaPuti

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [MASM][UserMode]Hook OpenProcess
« Respuesta #8 en: 16 Julio 2011, 09:39 am »

Que no se mal interprete el no le copio ningun codigo a nadie ... solo publico una version propia de la teoria.


The_wash esta re-inventando la rueda, hace rato que viene rehaciendo los tutoriales y codigos que ya estan hechos.  :silbar:

Madura y aporta algo que con  ese tipo de criticas que de constructivas no tienen nada lo unico que aportas es mal clima al foro ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Obtener ID para OpenProcess « 1 2 »
Programación Visual Basic
Gorky 10 3,970 Último mensaje 26 Mayo 2006, 07:43 am
por Eternal Idol
Duda OpenProcess
Programación Visual Basic
Lewert 2 1,175 Último mensaje 24 Septiembre 2008, 20:18 pm
por cobein
FASM o MASM? « 1 2 »
ASM
Riki_89D 12 7,815 Último mensaje 16 Abril 2010, 18:50 pm
por Иōҳ
[DUDA] abrir un proceso de usuario (OpenProcess) VB 6.0
Programación Visual Basic
AlxSpy 4 2,372 Último mensaje 17 Junio 2011, 18:15 pm
por AlxSpy
SeDebugPrivilege y OpenProcess
Programación C/C++
kub0x 4 1,683 Último mensaje 17 Septiembre 2014, 01:40 am
por kub0x
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines