Trial en vb6 native code autoextraible

Iniciado por silvau, 4 Noviembre 2010, 20:25 PM

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

MCKSys Argentina

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


silvau

Gracias por tu pronta respuesta..


Entonces ahora me toca dumpear y ver lo de la IAT...

Cuando tenga avances posteo.. ;-)

silvau

Mmmmm.... ya me volví a empantanar...

Resulta... que obtengo el archivo "dumpeado" con Ollydump, y petools

hasta ahi todo parece bien..

Toca entonces checar la IAT...

pero...



las únicas calls que identifico son llamadas a MSVBVM60... estoy bien o me regreso?...

Bueno... suponiendo que es solo esa... pues a buscar el tamaño de la IAT cierto?


Entonces voy a la direccion que dice va a ThunRTMain  40143C.

Ahi encuentro... esto..




Todas las referencias son a MSVBVM60... llendo hacia arriba... !!!Llego a 401000
con ese patrón!!!!

Entonces supongo que empieza en 401000


Pero hacia abajo no veo el limite... la secuencia de ceros no es clara...




Yo supongo que termina en 40154C... porque ahí termina el "patrón"... y suponiendo que no llama a otra dll... pues parece correcto... además... los datos debajo no llevan a direccion válida...
entonces...
usando estos datos... no obtengo con el importrec un exe valido... uso el petool para "reparar" la sección PE y sigo sin obtener nada...


He escuchado que se puede obtener un archivo "casi" desempacado... a qué se refieren?

Gracias por su ayuda.

Adjunto imagen haber si alguien me puede dar alguna pista..





silvau

#13
Cita de: MCKSys Argentina en 10 Noviembre 2010, 04:30 AM
El hack que tiene la IAT, es en la funcion de VB que se usa para llamar funciones API de windows, o funciones externas (en DLL's).

La function es DllFunctionCall. En este EXE, esa funcion fue reemplazada por una del packer. En realidad, de esta forma esta funcionando mas lento, pero bueno... al menos intenta proteger el EXE...  :)

Si dumpeas el EXE, no te funcionara por este hack. Lo que hay que hacer, es agregar las secciones que contienen el codigo ejecutable y los datos de esa DLL "virtual" y reparar las referencias del EXE dumpeado.

Con un script lo puedes hacer en 2 patadas...  ;)

Saludos!

Había olvidado estas instrucciones... No entiendo mucho cómo agregar las secciones. creo que reparar la dll virtual es reparando la referencia perdida de la IAT , para que apunte a dll function call (y cómo supiste que era esa???...por experiencia?)... y quizá con esto pueda obtener un exe que pueda correr al menos en olly...espero encontrar la info...

Actualizaré los resultados.

MCKSys Argentina

Si reemplazas la funcion por la original, se reparan algunas entradas, pero no todas... por eso lo de agregar las secciones y asi no jode esa parte  :P
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


silvau

Jaj... pues me parece que ya di más de dos patadas y no más no puedo obtener el exe.... algo me falta... creo es lo de las secciones.....

Adjunto imagen de cómo hago el dump..

y como "arreglo" la iat del dumped.




Por qué elegir DllFunctionCall... no sé... pero es con la que lo estoy haciendo con la idea de arreglar la iat.

Adjunto imagen de importrep...



Sugerencias son bienvenidas.


MCKSys Argentina

Si sigues la función (la de la tabla de saltos de la IAT) cuando estas en el OEP, podras ver que es lo que hace el packer.

Normalmente esa funcion es DLLFunctionCall, pero el EXE la esta usando para otras cosas...  ;)

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


silvau

Pues estuve traceando y veo que va a diferentes dlls  ( por lo que supongo que en efecto hace la Tarea de llamarlas...). Veo que pasa por una "Fake.dll" pero no entiendo el código... hace algún tipo de comparación pero no ubico para qué.

Decidí usar DllFunctionCall para reparar la entrada erronea... y agregar  una sección que es la parte a donde salta el programa en esa entrada erronea. En mi caso está en 01540000. Así que use pipe para obtener la sección. Después con peditor la agregue al exe dumpeado con la iat "arreglada". Resulta que no más no corría...

Después me di cuenta que el dumped contiene una sección sin descripción... decidí quitarla ( pensando que podría ser basura del packer, pero sin tener fundamento teórico real que lo sustente). La sección  la quité antes de agregarle la de la entrada redireccionada. luego agregué la sección 01540000 y arreglé el virtual offset. Luego lo pasé por pe rebuilder de lordpe. y obtuve...

Un exe que al fin puedo cargar en Olly... que tiene OEP en donde lo especifiqué y que no me dice que esté comprimido......


Peeeeeeero.... el maldito me sale con  un error...

Es así:



Preguntas:

¿Hice mal en quitar la sección que según yo es huerfana ?( como puedo saberlo..?)

Me falta agregar otras secciones para correr el programa?....

O de plano corregir no más así con dllfunctioncall no va a llevarme a encontrar un exe funcional?



Por cierto.. En importrep hice un  "Trace Level 1" en la entrada erronea... pero me arreglaba la entrada y me marcaba otras 3 entradas malas.....

Usar el Traceador de Imporrep me va a funcionar o es algo más de análisis a mano?




silvau

Parece que el archivo pierde la información de la versión y por alguna razón la utiliza el programa para arrancar. En las propiedades del archivo original aparece una ficha "version" que no aparece en el dumpeado.....Quizá si logro copiar esos datos del original al nuevo podría echarlo a andar no?...

Hay alguna herramienta q lo haga?

Por otro lado. Podría capturar el momento en que revisa esos datos y "emular" que son los correctos... pero no sé qué función usar para capturar el error....

Sugerencias son bienvenidas.

MCKSys Argentina

Podrias probar poniendo un BP en CreateFile...
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."