Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: gastonp en 6 Julio 2010, 16:29 pm



Título: Metodo para encontrar nag en Delphi
Publicado por: gastonp en 6 Julio 2010, 16:29 pm
Hola, queria saber que metodo utilizan ustedes para encontrar la CALL desde la que se llama a una nag en Delphi (no de un programa en particular, sino en general). He leido varios tutos de la pagina de Ricardo Narvaja, y he estado practicando crackeando algunos programitas en Delphi pero siempre tengo este problema.
El metodo de poner un bp en GetCapture no siempre me funciona, al igual que el de ejecutar el programa con CTRL+F8 y supuestamente el Olly se detiene en la CALL de la nag.
Si busco en DeDe o IDR la direccion del metodo Show de la nag y pongo un bp ahi, recorro todo el procedimiento con F8 hasta el RET y la nag tampoco aparece.
¿Hay alguna forma de detectar exactamente cual es la CALL que hace aparecer la nag?


Título: Re: Metodo para encontrar nag en Delphi
Publicado por: Mintaka en 6 Julio 2010, 19:03 pm
Puedes probar con BP en DestroyWindow y vas ejecutando ret's hasta llegar al programa.No suele estar muy lejos esa call de la dirección donde te encontrarás.
Suerte,

Mintaka


Título: Re: Metodo para encontrar nag en Delphi
Publicado por: LSL en 7 Julio 2010, 00:56 am
Tambien con un BP ShowWindow, y mirando la pila para ver donde retorna despues de los call's de la aplicación que te han llevado hasta ahí, puedes ver si tienes antes algun salto que evite dichos call.

para mejor entendimiento leete este manual de KmL ReVeRsEr ® Teoria sobre como eliminar un NAG con nada mas mirar la pila (http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/1001-1100/1012-Teoria%20sobre%20como%20eliminar%20un%20NAG%20con%20nada%20mas%20mirrar%20%20la%20pila.rar)


Título: Re: Metodo para encontrar nag en Delphi
Publicado por: tena en 7 Julio 2010, 03:05 am
En el caso del total comander, lo que hice fue cargar el map que me dio
el IDR, ver cuando muestra los formularios.

Llegue a este punto..

Código:
004E7F38  |> \E8 07220000   CALL <TOTALCMD.Nagdlg.sub_004EA144>
004E7F3D  |.  84C0          TEST AL,AL
004E7F3F  |.  74 26         JE SHORT TOTALCMD.004E7F67                          ;  SIN NAG AL =1
004E7F41  |.  A1 7C756C00   MOV EAX,DWORD PTR DS:[6C757C]
004E7F46  |.  8B40 28       MOV EAX,DWORD PTR DS:[EAX+28]
004E7F49  |.  B2 01         MOV DL,1
004E7F4B  |.  E8 88A5F5FF   CALL <TOTALCMD.StdCtrls.TControl.SetEnabled>
004E7F50  |.  C605 C81A6C00>MOV BYTE PTR DS:[6C1AC8],1
004E7F57  |.  C605 CC1A6C00>MOV BYTE PTR DS:[6C1ACC],1
004E7F5E  |.  8BC3          MOV EAX,EBX
004E7F60  |.  E8 6F03F3FF   CALL <TOTALCMD.Forms.TForm.Close>
004E7F65  |.  EB 3E         JMP SHORT TOTALCMD.004E7FA5

Si el salto no se produce, lo cierra el Formulario con Close.

Para que eso suceda Al debe valer cero, y si entramos al call...

Código:
004EA144 >/$  A0 ECC66C00   MOV AL,BYTE PTR DS:[6CC6EC]                         ;  Nagdlg.sub_004EA144
004EA149  \.  C3            RETN

Vemos que Al toma el valor de la varibale [6CC6EC], me fijo las referecias a esa variable y tengo una aqui...

Código:
004E9E47   .  881D ECC66C00 MOV BYTE PTR DS:[6CC6EC],BL
Pode nopear el salto y listo, ya no tenes la nag, pero si queres buscar el registro, entonces le seguimos buscando cuando esa variable toma el valor CERO, porque al tomar ese valor te muestra la nag.

Entonces te vas al principio de la rutina.

Código:
004E95CC >    55            PUSH EBP
004E95CD   .  8BEC          MOV EBP,ESP

y pones como condicion que pare en BL==0 y Ctrl+F8
y te para justo aqui...

Código:
004E997D   .  E8 CA90F1FF   CALL <TOTALCMD.system.@AStrCmp>
004E9982      0F84 AE000000 JE TOTALCMD.004E9A36
004E9988   .  33DB          XOR EBX,EBX                                         ;  me pone a cero ebx

Ahi sale de la call, que compara algo, y al salir y no ser igual, te pone BL a CERO.
Si invertis ese salto, ya arranca registrado, y luego se sigue como indica Tinco en su tute. Maso menos asi, pero bueno si solo queres eliminar la nag solo nopeas el salto y listo..

Luego estan las formas ahi expuestas por los amigos Mintaka y LSL

slds


Título: Re: Metodo para encontrar nag en Delphi
Publicado por: tena en 7 Julio 2010, 03:19 am
Tambien podes Pausar al Olly en el momento que te aparece la Nag, luego Alt+F9, te vas a la nag y aceptas, y el olly debe saltar justo debajo de la call que te muestra la nag.


Título: Re: Metodo para encontrar nag en Delphi
Publicado por: gastonp en 7 Julio 2010, 05:20 am
Gracias a todos, voy a poner en practica sus metodos.
Gracias tena por tu solucion para registrar el total commander, muy bueno!! ;-)
Un saludo