Programa dificil, Paso 1.

Iniciado por Redesoft, 25 Octubre 2006, 12:22 PM

0 Miembros y 2 Visitantes están viendo este tema.

Redesoft

Cita de: Mintaka en 11 Julio 2008, 00:41 AM
Joe, veo menos que un gato de yeso.La release que estuve trasteando fue la R4 de la v3.3 y el ejecutable tcad.A lo que vamos:
Llegue al OEP siguiendo el metodo usado por SHOULCK en este tute:

http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/101-200/164-Desempacando%20SVKP%20por%20SHOULCK.rar

Con la ayuda del Olly parcheado para encontrar OEP (gracias a Ricardo Narvaja), una vez pasado el bucle que dice el tute y parado en el RETN solo debes poner un BPMA en la sección CODE.Tarda un buen rato pero al final se clava en el OEP.
A partir de aqui ya sabes, volcar a disco, corregir IAT......bla,bla,bla.
Lo volvere a instalar, pero ya tienes algo para entretenerte.

Mintaka

Pues como bien dices el ejecutable principal es tcad.exe. Muchas gracias por el links este que has puesto, el sabado por la noche en mi rato libre probare a ver que sale (seguro que me atasco en cualquier chorrada, como siempre)

Ya os contare si lo hago correr desempacado. Gracias ;)

Redesoft

Bueno señores, después de varias pruebas y tal he seguidos el manual.

Como dices Mintaka hay un bucle, pongo un bpma en .code y trasca salta a 51A9519 si pongo el bpma en el segundo .code y en otro sitio aun mucho mas raro que no es ni de coña el OEP si lo pongo en el primer .code (hay dos secciones code).

Claro está que como ese no es el oep pues no se ha desempacado y aunque haga un dump al analizarlo me sigue diciendo que está empacado.

A parte algo curioso, al abrir el tcad.exe con el olly me sale como que el  tcad está ejecutado, me sale una ventana de msdos... no tengo muy claro el porque...

Voy a seguir probando a ver si llego al OEP y ya os digo algo.

Un saludo

Mintaka

Hola a todos:
Redesoft, siempre debes usar como sección .code auténtica la que sigue al Header y no otras.O sea esta:

Address=00401000
  Owner=tcad     00400000
Contains=code
  Access=R
Initial access=RWE

Ves armándote de MUCHA paciencia y ten la seguridad de que si entiendes lo que te quiere decir Shoulck en su tute, llegarás no solo al OEP sinó también a conseguir un desempacado funcional.
En su momento, yo no lo conseguí, pero solo me quedaron tres API's por resolver antes de validar el ejecutable con el ImpRec.He vuelto a retomarlo por ayudarte a conseguirlo y porque así refresco conceptos de packers-protectors.
Para mí, fue de lo más fácil encontrar el OEP.El dumpeado que te hace a partir de ahí, no es funcional para nada.Se ha de trabajar duro con el ImpRec para conseguir una IAT correcta (el tute te da varias ideas).Te diré más, si haces currar al ImpRec, con Trace Leve1 (Disasm), te quedarán SOLO siete entradas no válidas.No hace falta retocar el exe en Olly para conseguir las entradas buenas, como dice el tute.
Para tu información te diré que esta compilado en Visual C++6.0 (como la mayoría de los CAD's, digamos "decentes", que he visto).
Lo de la ventana de MSDOS es así (nada que objetar a eso).Es un visto y no visto corriéndolo desde windows.Pero Olly es un monitor de ejecución y por eso la vemos hasta que desaparece con o sin informe de errores, jeje.
Seguiré tus avances y en lo que pueda te orientaré.

Mintaka
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

Redesoft

#13
Siguiendo el tutorial.

Inicio el programa, cuando llego a la tercera excepcion en fffffff... pongo un bpma en la sección .code, ejecuto, se para en un bucle, quito el bpma, pongo un bp fuera del bucle, ejecuto el programa, se para fuera del bucle, quito el bp y vuelvo a poner el bpma en el .code, ejecuto y se queda aqui:

5139bf1...66:.....mov word.....

Se supone que eso debería ser el OEP segun el tutorial y ya sería volcarlo de memoria a disco, reparar la iat (cosa que me da miedo despues de lo que me acabas de decir XD ).

Claro está que ese punto el 5139bfa no tiene pinta de OEP, es mas, si haces el dump aun no siendo funcional el exe al analizarlo debería decir que no está empacado, pero sigue diciendo que nada, que está empacado así que eso significa que aún no he llegado al OEP, por eso dudaba entre si era el primer .code o el segundo.

Voy a intentar tracearlo un poco y ver si llego al OEP. Tampoco tengo prisa, si veo que me viene un poco grande lo de desempacar esto pues me metere a algun proyecto mas pequeño y aparco este durante un tiempecillo.

Bueno, voy a seguir machacando este pequeñin a ver si saco algo en claro. Muchas gracias otra vez por guiarme ;)

Mintaka

Cita de: Redesoft en 12 Julio 2008, 17:13 PM
Siguiendo el tutorial.

....... ejecuto y se queda aqui:

5139bf1...66:.....mov word.....

Se supone que eso debería ser el OEP segun el tutorial y ya sería volcarlo de memoria a disco, reparar la iat (cosa que me da miedo despues de lo que me acabas de decir XD ).



Vas bien pero olvidas un detalle MUY importante.
Fíjate que te dice Olly cuando para en ese punto (en la parte inferior izquierda):
Memory breakpoint when writing to....
y eso quiere decir que está escribiendo código en esa sección.
Debes seguir ejecutando Olly hasta que el mensaje sea este:
Memory breakpoint when executing....
Entonces estarás sobre el OEP.
Parará muchísimas veces por escritura, antes de llegar al OEP.Lo curioso del caso (ahora que ya sé cual es el OEP) es que está escrito en la ventana de la pila 18 posiciones más abajo de donde estás parado. :o
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

Redesoft

Si, ya he llegado al OEP pero sigue sin gustarme el asunto. Llego al OEP y lo vuelco todo a disco con el lordpe. Se vuelca y cambio el punto de entrada según el OEP que he pillado en el olly.

Hasta aqui bien pero lo que no me gusta es que el exe sigue ocupando muy poco, 500 kb mas solo respecto al original y luego que el que ya está desempacado, aun no teniendo la iat arreglada si lo analizo con el peid me sigue diciendo que está empacado. Quizas me lo diga porque la sección .svkp la sigue teniendo y es el metodo de analizar este empacador.

Voy a ver si hago unas pruebas con el exe a ver que pasa.

Gracias por todo, la verdad es que eso de tener que esperar a que llegase a ejecutar y no a escribir no lo sabia para nada.

Mintaka

Hola a toda la peña.
Redesoft, SVKP es el acrónimo de SloVaK Protector y como su nombre indica no es un compresor; es un protector:

The protected application is not compressed, but it is encoded by the Rijndael algorithm (also known as AES).

Lo que hace es cifrar el código original y crear direccionamientos propios a las API's del kernel.Por lo tanto no esperes una compresión del exe, como lo haría UPX.
El desempacado que yo tengo (sin corregir la IAT) y con sección .svkp, PEiD v0.94 me lo reconoce como Microsoft Visual C++ 6.0.Yo lo volqué a disco con el plugin OllyDump y aumenta lo que dices, pero una vez corregida la IAT, engorda.
Mi desempacado empieza así:
PUSH EBP
MOV EBP,ESP
PUSH -1
PUSH XXXXXXXX
PUSH YYYYYYYY                                 ;  SE handler installation
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,10
PUSH EBX
PUSH ESI
PUSH EDI
MOV DWORD PTR SS:[EBP-18],ESP

Suerte  ;)

Mintaka
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

Redesoft

Efectivamente es como dices. El problema que me encontraba y que corregi ayer fue que usaba el lordpe para volcarlo a disco. No se cual es la razón pero se ve que no lo volcaba todo desempacado por eso al mirarlo con peid me seguia diciendo que estaba empacado.

Hice la prueba volcandolo con el metodo 2 de ollydump y ya me dice que es visual c++

Lo siguiente que toca es corregir la IAT, lo que no tengo muy claro es si siempre que se llama a una api se hace con jmp dword.... o si también se puede llamar con call. Ayer me tire media hora dandole al f7 y traceando y no llegue a nigún jmp dword y me fuy a dormir ya por aburrimiento.

En fin, a ver si tengo una noche libre y me pongo a verlo mas detendiamente todo.

Un saludo.

Mintaka

Cita de: Redesoft en 14 Julio 2008, 13:14 PM

Lo siguiente que toca es corregir la IAT, lo que no tengo muy claro es si siempre que se llama a una api se hace con jmp dword.... o si también se puede llamar con call. Ayer me tire media hora dandole al f7 y traceando y no llegue a nigún jmp dword y me fuy a dormir ya por aburrimiento.

En fin, a ver si tengo una noche libre y me pongo a verlo mas detendiamente todo.

Un saludo.

Bien bien, te felicito.Ya nos queda menos.
En mi pobre opinión como aprendiz, más bien perro viejo, (jejeje, ya veo a más de cuatro riéndose), es que estamos ante un protector, dentro de la escala de los difíciles, de los más fáciles.Y por este motivo, este hilo podría hacerse bastante largo.
Todas esas zonas de llamadas que intentas trazar con F7 te pueden llevar a la tumba.Está todo ofuscado a propósito, para derrotarnos por aburrimiento.Si te has leído al completo el tutorial que te aconsejé, entenderás como lo hace para conseguir entrar en la API correspondiente del kernel "sin ser visto", por el cracker de turno.
Yo también estoy en ello, porque ahí lo abandoné.No fuí capaz de conseguir un desempacado funcional en su día.Ahora en el poco tiempo libre de que dispongo voy a seguir indagando.Por las anotaciones que tengo, me quedan dos API's dudosas que resolver y posteriormente hacer que las call's se dirijan a las API's en cuestión.
Que la fuerza nos acompañe amigo.

Mintaka
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

tena

CitarEn mi pobre opinión como aprendiz, más bien perro viejo, (jejeje, ya veo a más de cuatro riéndose)
Mintaka

Naaaa porque crees eso ?  ;D

Saludos Amigo