Metodo para encontrar nag en Delphi

Iniciado por gastonp, 6 Julio 2010, 16:29 PM

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

gastonp

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?

Mintaka

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
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

LSL

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
Saludos.

LSL.

tena

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..

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...

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...

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.

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...

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

tena

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.

gastonp

Gracias a todos, voy a poner en practica sus metodos.
Gracias tena por tu solucion para registrar el total commander, muy bueno!! ;-)
Un saludo