elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
24 Mayo 2012, 01:34  


Tema destacado: [Overclocking] Récords de overclock del foro

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  [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 1,614 veces)
The Swash

Conectado Conectado

Mensajes: 83


Programmer


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

Código
.386
.model flat, stdcall
option casemap:none
 
include C:\masm32\include\windows.inc
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\kernel32.lib
 
.data
ProcessId        dd 0
ProcessProtect   dd 0
hProcess         dd 0
APIAddress       dd 0
SnapshotHandle   dd 0
DistanceFunc     dd 0
fAddress         dd 0
Bytesw           dd 0
_JMP             db 5 dup(?)
Diference        dd 0
Buff             db 0
_PROCESSENTRY32  PROCESSENTRY32 <?>
Process          db "taskmgr.exe",0   ;Process to Hook
API              db "OpenProcess",0
lLibrary         db "kernel32.dll",0
Protect          db "notepad.exe",0   ;Process to Protect
 
.code
start:
mov dword ptr[_PROCESSENTRY32.dwSize], 0128h
 
_Begin:
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
mov dword ptr[SnapshotHandle],eax
 
_Cmp:
   invoke Process32Next,dword ptr[SnapshotHandle], addr _PROCESSENTRY32
   mov edi, eax
   invoke lstrcmp,addr Process, addr _PROCESSENTRY32.szExeFile
   or eax, eax
   jz _GetPID2
   invoke lstrcmp,addr Protect, addr _PROCESSENTRY32.szExeFile
   or eax, eax
   jz _GetPID
 
_Continue:    
   or edi, edi
   jz _Exit
   jnz _Cmp
 
_Proc:    
   invoke GetModuleHandle, addr lLibrary
   invoke GetProcAddress, eax, addr API
   mov dword ptr[APIAddress], eax
 
   mov eax, offset _EndHook
   mov ebx, offset _Hook
   sub eax, ebx
   mov dword ptr[DistanceFunc], eax
 
   invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,dword ptr [ProcessId]
   mov dword ptr [hProcess], eax
   invoke ReadProcessMemory,dword ptr[hProcess], dword ptr [APIAddress], addr Buff, 1, addr Bytesw
   cmp byte ptr [Buff], 0E9h
   jz _Exit
   invoke VirtualAllocEx,dword ptr [hProcess],NULL,dword ptr[DistanceFunc],MEM_RESERVE or             MEM_COMMIT,PAGE_EXECUTE_READWRITE
   mov dword ptr [fAddress], eax
   mov ecx, offset _Hook
   invoke VirtualProtect,ecx,10,PAGE_EXECUTE_READWRITE,addr Bytesw
   mov ebx, dword ptr[APIAddress]
   add ebx, 5
   mov dword ptr[_Hook + 1], ebx
   mov ebx, dword ptr[ProcessProtect]
   mov dword ptr[_Hook + 6], ebx
   mov ecx, offset _Hook
   invoke WriteProcessMemory,dword ptr[hProcess], dword ptr [fAddress], ecx, dword ptr [DistanceFunc], addr Bytesw
   invoke VirtualProtectEx,dword ptr[hProcess],dword ptr [APIAddress], 5, PAGE_EXECUTE_READWRITE, addr Bytesw
   mov byte ptr [_JMP], 0E9h
   mov edx, dword ptr [fAddress]
   add dword ptr [APIAddress],5
   sub edx, dword ptr [APIAddress]
   mov dword ptr [_JMP +1], edx
   sub dword ptr [APIAddress], 5
   invoke WriteProcessMemory,dword ptr [hProcess], dword ptr[APIAddress], addr _JMP, 5, addr Bytesw
   invoke CloseHandle, dword ptr [hProcess]
 
_Exit:
   invoke ExitProcess,0
 
_Hook:
   mov eax, 00000000h ; API Address
   mov ecx, 00000000h ; PID
 
   push ebp           ; Stack frame
   mov ebp, esp
 
   pushad
   cmp ecx, dword ptr [ebp + 10h]
   jz _Hooked                     ; If is equal jump to Hooked
   popad                          ; Restaure registers
   jmp eax                        ; Jump to API + 5
 
_Hooked:
   popad
   mov esp, ebp
   pop ebp
   mov eax, 0
   retn 0Ch
_EndHook:    
 
_GetPID:
   mov eax, dword ptr [_PROCESSENTRY32.th32ProcessID]
   mov dword ptr[ProcessProtect],eax
   jmp _Found
 
_GetPID2:
   mov eax, dword ptr [_PROCESSENTRY32.th32ProcessID]
   mov dword ptr[ProcessId],eax
   jmp _Cmp2
 
_Found:
   cmp [ProcessId],0
   jz _Cmp
   jmp _Cmp2
 
_Cmp2:
   cmp dword ptr[ProcessProtect],0
   jnz _Proc
   jmp _Cmp
 
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: 134



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

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

Desconectado Desconectado

Mensajes: 66


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

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 »

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: 63


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

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]
Moderador
***
Desconectado Desconectado

Mensajes: 1.059


CALL DWORD PTR DS:[0]


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

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: 63


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

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 »

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 »

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
Programación Visual Basic
Gorky 10 1,645 Último mensaje 26 Mayo 2006, 07:43
por Eternal Idol
Hook a la api OpenProcess
Programación C/C++
Lambda 2 825 Último mensaje 7 Agosto 2007, 22:17
por Lambda
OpenProcess a avp.exe
Programación C/C++
bigsnake 7 896 Último mensaje 18 Agosto 2007, 00:58
por Lambda
Duda OpenProcess
Programación Visual Basic
Lewert 2 471 Último mensaje 24 Septiembre 2008, 20:18
por cobein
OpenProcess me está devolviendo NULL :S
Programación C/C++
Zequez 8 1,081 Último mensaje 18 Febrero 2010, 08:10
por Eternal Idol
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines