Test Foro de elhacker.net SMF 2.1

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: YST en 1 Agosto 2009, 05:27 AM

Título: [Taller] Api Hooking en modo usuario
Publicado por: YST en 1 Agosto 2009, 05:27 AM
Taller de Api hooking


Este texto se puede publicar libremente siempre que se mantenga el autor.
Autores:YST & Hacker_Zero



Conocimientos previos:
  • ASM (http://es.wikipedia.org/wiki/Lenguaje_ensamblador)        
  • Manejo minimo de las apis de windows
  • Formato PE [Metodo IAT patch]



Contenido
Título: Re: [Taller]Api Hook
Publicado por: [Zero] en 1 Agosto 2009, 13:31 PM
Bravo amigo  ;-). Muy bueno, si señor.

Lo del push ret que te dije no es buena idea, porque muchas apis si pisas 5 bytes (con un jmp) no cortas instrucciones en cambio con el push ret ya pisas un byte de más (en la mayoría de apis). Con el jmp ya queda clavado  y luego si quieres crear el buffer para llamar a la api original no tienes que copiar tantos bytes.

Saludos  ;-)
Título: Re: [Taller]Api Hook
Publicado por: Karcrack en 1 Agosto 2009, 14:52 PM
Muy bueno, te pongo chincheta ;D Espero verlo acabado pronto ;)

Como dice Hacker_Zero ves con cuidado de no pillar instrucciones a medias...sino habrá un error muy feo :-\
Título: Re: [Taller]Api Hook
Publicado por: h0oke en 1 Agosto 2009, 14:54 PM
Muy buen, hasta que ganó chincheta.

Seguiré el tallercito YST  ;)

Éxitos!!!
Título: Re: [Taller]Api Hook
Publicado por: YST en 1 Agosto 2009, 20:13 PM
Cita de: Karcrack en  1 Agosto 2009, 14:52 PM
Muy bueno, te pongo chincheta ;D Espero verlo acabado pronto ;)

Como dice Hacker_Zero ves con cuidado de no pillar instrucciones a medias...sino habrá un error muy feo :-\

Muchas gracias karccrack , en la noche lo continuo :P
Título: Re: [Taller]Api Hook
Publicado por: cassiani en 1 Agosto 2009, 20:42 PM
Hasta que te animaste  :silbar:
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: LixKeÜ en 7 Agosto 2009, 14:54 PM
 muy bueno me gustaría aplicar esto ala api del winsock  :rolleyes: ever si me sale algo :D
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: [Zero] en 7 Agosto 2009, 15:28 PM
Cita de: LixKeÜ en  7 Agosto 2009, 14:54 PM
muy bueno me gustaría aplicar esto ala api del winsock  :rolleyes: ever si me sale algo :D

Googleando puedes encontrar código del MsnNightmare de Mazard que hace hook a send y recv en C  ;D.

Saludos  ;)
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: Jaixon Jax en 7 Agosto 2009, 16:13 PM
 ;D
[
Citarhook a send y recv en C

  Jeje estuve tanto tiempo buscando estas funciones pero tengo entendido que estas funciones no son apis sino mudulos de la libreria winsock ? y si son api me entero ? si pudieras Hacker Zero extenderias mas tu explicacion sino  :rolleyes: me podrias pasar el link del manual de mazard jeje.  :laugh:
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: Karcrack en 7 Agosto 2009, 20:16 PM
Si que son APIs... APIs de la libreria de Winsock(ws2_32.dll/wsock32.dll)...

Aqui tienes el enlace al codigo:
http://mzrdzoneforo.tomahost.org/index.php?topic=30.0
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: spartanla90 en 12 Agosto 2009, 02:42 AM
wow a ver si se podre hacer algo aunk sea un poco parecido :xD
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: Erik# en 24 Agosto 2009, 20:31 PM
Grande YST :)
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: YST en 28 Agosto 2009, 20:35 PM
Otro ejemplo de api Hook que muestra en un MessageBox los archivos mediante los vea el explorer.exe
Código (asm) [Seleccionar]

; FinFuncion-FuncionInyectada = tamaño de la funcion
include 'win32ax.inc' ;Incluimos la libreria

.data ; Declaramos la sección de codigo
proc start ; Entry Point
   locals
   PID dd ?
     lProc dd ?
       DirFun                  dd ? ;Espacio donde escribiremos    nuestro codigo
   endl
    invoke FindWindowEx,0,0,"Progman",NULL
    invoke GetWindowThreadProcessId,eax,addr PID
   invoke OpenProcess,PROCESS_CREATE_THREAD+PROCESS_VM_OPERATION+PROCESS_VM_WRITE,FALSE,[PID]
    mov [lProc],eax
stdcall ReservarEspacio,FinFuncion-FuncionInyectada,[lProc]
 mov [DirFun],eax
     invoke WriteProcessMemory,[lProc],[DirFun],FuncionInyectada,FinFuncion-FuncionInyectada,0
     invoke GetModuleHandle,'kernel32.dll'
     invoke CreateRemoteThread,[lProc],0,0,[DirFun],eax,0,0
ret
endp


proc ReservarEspacio,pTamaño,pPid
   invoke VirtualAllocEx,[pPid],0,[pTamaño],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
   ret
endp

proc FuncionInyectada,pMZ
locals
pGetProcAddress dd ?
lDelta dd ?
lGetMDA DD ?
lWSOCK32 dd ?
lRMM dd ?
lDD dd ?
LVRPX dd ?
lBytes dd ?
lSend dd ?
endl
    call delta
    delta:
    pop edx
    sub edx,delta
    mov [lDelta],edx
    mov eax,[lDelta]
    add eax,GetAddressFunction
    mov [pGetProcAddress],eax
       stdcall [pGetProcAddress],[pMZ],"GetModuleHandleA",[lDelta]
    mov [lGetMDA],eax
    stdcall [lGetMDA],"kernel32.dll"
    mov [lWSOCK32],eax
      stdcall [pGetProcAddress],[pMZ],"GetProcAddress",[lDelta]
    stdcall eax,[lWSOCK32],"FindNextFileW"
    mov [lSend],eax
  mov ebx,cRtlMoveMemory
  add ebx,[lDelta]
  mov [lRMM],ebx
  mov edi,BytesOriginales
  add edi,[lDelta]


     stdcall [pGetProcAddress],[pMZ],"VirtualProtectEx",[lDelta]
     mov [LVRPX],eax
  mov edi,BytesOriginales
  add edi,[lDelta]
        lea edx,[lDD]
        mov [lBytes],edi
stdcall [LVRPX],-1,[lBytes],40,PAGE_EXECUTE_READWRITE,edx

    stdcall [lRMM],[lBytes],[lSend],40
             lea edx,[lDD]
stdcall [LVRPX],-1,[lSend],20,PAGE_EXECUTE_READWRITE,edx
mov eax,[lSend]
mov byte[eax],0x68
inc eax
mov dword[eax],MiSend
mov edx,[lDelta]
add dword[eax] ,edx
add eax,4
mov byte[eax],0xC3
mov eax,DireecionAPI
add eax,[lDelta]
mov edi,[lSend]
mov [eax],edi
      stdcall [pGetProcAddress],[pMZ],"GetModuleHandleA",[lDelta]
    mov [lGetMDA],eax
    stdcall [lGetMDA],"user32.dll"
         stdcall [pGetProcAddress],eax,"MessageBoxW",[lDelta]
mov edi, eax
mov eax,DireccionMes
add eax,[lDelta]
mov [eax],edi
    stdcall [pGetProcAddress],[pMZ],"Sleep",[lDelta]
 stdcall eax,-1
    endp
    proc GetAddressFunction,pMZ,pApi,lDelta
    locals
    lDelta2 dd ?
    endl
;EDI = MZ
;Expot data = EBX
;Esi = Cantidad de funciones
;edx = AddressOfNames
;ECX = Propositos generales
mov edi, [pMZ]
mov ebx,[edi+0x3c]
mov ebx,[ebx+edi+0x78]
add ebx,edi
mov esi,[0x18+ebx]
mov edx, [0x20+ebx]
add edx,edi
.bucle:
dec esi
cmp esi,0
je .error
mov eax,esi
rol eax,2   ;Multiplicamos esi por 4
mov eax,[edx + eax]
add eax,edi
push eax
mov eax,[lDelta]
mov [lDelta2],eax
add [lDelta2],comparar
pop eax
stdcall [lDelta2],[pApi],eax
xor eax,0
jnz  .bucle
mov eax,[0x24+ebx]
add eax,edi
movzx ecx, word[eax + 2*esi]
mov eax, [ebx + 0x1c]
add eax,edi
mov eax, [eax + 4 * ecx]
add eax, edi
.salir:
ret
.error:
xor eax,eax
jmp .salir
endp
proc comparar ,SRC,DST
push edi ecx esi
mov ecx,-1
mov edi,[SRC]
mov al,0
repnz scasb
mov eax,ecx
not eax
mov ecx,eax
mov esi,[SRC]
mov edi,[DST]
repz cmpsb
mov eax,1
jnz Next
dec eax
Next:
pop esi ecx edi
ret
endp
;Descripcion: Esta función funciona igual que la winapi RtlMoveMemory
; by YST
proc cRtlMoveMemory,cBuffer,Cpuntero,cCantidad
push esi edi
xchg edi,[cBuffer]
xchg esi,[Cpuntero]
.bucleb:
dec [cCantidad]
movsb
cmp  [cCantidad],0
jge .bucleb
pop edi esi
ret
endp

proc MiSend,p1,p2
locals
lDelta dd ?
lRMM dd ?
lResultado dd ?
lDireccion dd ?
lMensaje dd ?
lBytes dd ?
endl
  call .delta
    .delta:
    pop edx
    sub edx,.delta
    mov [lDelta],edx
mov eax,[lDelta]
add eax,DireccionMes
mov eax,dword[eax]
mov [lMensaje],eax
mov eax, DireecionAPI
add eax,[lDelta]
mov eax,dword[eax]
mov [lDireccion],eax
mov eax,cRtlMoveMemory
add eax,[lDelta]
mov [lRMM],eax
mov eax,BytesOriginales
add eax,[lDelta]
mov [lBytes],eax
stdcall [lRMM],[lDireccion],[lBytes],40

stdcall [lDireccion],[p1],[p2]

mov [lResultado],eax

mov eax,[lDelta]
add eax,MiSend
mov ebx,[lDireccion]
mov byte[ebx],0x68
inc ebx
mov dword[ebx],eax
add ebx,4
mov byte[ebx],0xC3
mov eax,[p2]
add eax,44
stdcall [lMensaje],0,eax,0,0

mov eax,[lResultado]
ret
endp
DireccionMes dd ?
DireecionAPI dd ?
BytesOriginales:
db 50 dup (0)

    FinFuncion:
.end start ; Declaramos el Import data y el Entry Point    
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: 33boy33 en 19 Julio 2015, 03:52 AM
Una cosilla esto no es Assembler de pura cepa tipo ollydbg asi que no estoy seguro que es exactamente y tampoco como compilarlo o como va el asunto para poder ejecutarlo.
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: YST_RET en 21 Julio 2015, 02:30 AM
Si , es asm puro el ensamblador es FASM buscalo en google . Saludos
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: zerointhewill en 19 Enero 2016, 20:42 PM
cuando seguira el tema ?  :D :D
Título: Re: [Taller] Api Hooking en modo usuario
Publicado por: Eleкtro en 19 Enero 2016, 22:54 PM
Cita de: zerointhewill en 19 Enero 2016, 20:42 PMcuando seguira el tema ?  :D :D

Probablemente... nunca.

Lee la fecha del post, y la fecha de la última actividad del usuario antes de responder a un hilo.

Está prohibido revivir temas antiguos.

Tema Cerrado.