Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: silvau en 4 Noviembre 2010, 20:25 pm



Título: Trial en vb6 native code autoextraible
Publicado por: silvau en 4 Noviembre 2010, 20:25 pm
A todos, me presento con este programa.

He leído los tutes de Introducción de Ricardo  y no encuentro ( seguramente por falta de experiencia) la forma de entrarle a su análisis.

Se trata de un trial full durante 21 dias. De acuerdo a lo que he visto se desempaqueta en tiempo de ejecución, tiene un manejador de excepciones y es multithread. Por si fuera poco, está en PE code de VB6.

Dentro de los 21 dias aparece al principio una nag que me da la opción de activar la aplicación o usarla en modo evaluación por los dias restantes.

Una vez que pasa el periodo ( modificando la fecha del sistema) aparece la misma nag pero solo con la opción de activacion ( desaparece completamente el botón de evaluación.

Cuando entro al modo de activación aparecen dos números generados a partir de ids de la computadora ( disco duro, motherboard, etc). Y pide dos seriales para enviarlos al server que los verifica ( este envío creo se hace cifrado).

Mi teoría es:
Que el modo más "fácil" de "domar" este toro es hacer que la aplicación no tenga la restricción de los 21 días ( que se quede siempre en 21 o que a pesar de haber pasado el tiempo no desaparezca el botón de evaluación).

Una vez logrado esto podría atacarse la nag inicial que indica ambas opciones ( evaluación o activación) ocultándola o desaparecíendola y simulando el "click" sobre la evaluación y haciendo que pase directamente al "desempaquetado" de la aplicación y uso de la misma.

Ahora todas mis dudas.

Algún samaritano podría decirme si mis afirmaciones son correctas en cuanto al comportamiento del programa ( tipo de programa, lenguaje usado, etc).

Podrían decirme si es posible atacar el problema de esta manera o estoy enfocando mal el reto.

¿Es necesario desempaquetar el programa para eliminar su protección?. La preguta surge porque veo que desempaqueta hasta que pulso el botón del evaluación. Pero para eso del desempaquetado y la IAT como que estoy sin las herramientas... y dudo que vaya por ahí.

Por último, sería muy descabellado pensar en la activación?... A mi por ese lado sí me parece más complicado y sí necesitaría que me dieran luz sobre este enfoque. Usé el punto H que enseña Ricardo, pero me perdí en las comparaciones y el error de conexion al servidor...

Trabajo con olly y es lo que estoy tratando de aprender..

Por cierto, usando Trial Reseter vuelve a darme 21 dias y podría darme por servido dado que no me limita el programa en nada... pero la idea es aprender no?

¿El toro es muy bravo, me enfrento mejor a una vaquilla primero?

El enlace del instalador es este:

http://www.myupload.dk/showfile/65615451a9f.exe/



Gracias por su tiempo y ayuda.


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 8 Noviembre 2010, 22:23 pm
Alguna sugerencia despues de 60 lecturas?

Espero alguien pueda comentar.


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: MCKSys Argentina en 9 Noviembre 2010, 01:04 am
Tambien buscaste en la web de Ricardo como desempacar VB6 ???

Porque lo he desempacado en 2 minutos, usando el metodo mas antiguo que existe para VB 6.  :P

Si no investigas por ti mismo, nadie te hara las tareas.  :silbar:

Por lo pronto, mirando rapidamente el EXE, tiene un hack en la IAT. Aunque creo que es para poder llamar APIs del SO, sin tener que declararlas en el codigo VB.

Despues, el EXE esta en Codigo Nativo, no PCODE (No creas todo lo que dicen los detectores).

Pregunta: el programa se conecta a un servidor para funcionar??? No lo he probado, pero por las strings refs, asi parece...  :huh:

Por lo pronto, te recomiendo buscar el la web de Ricardo, como desempacar VB 6  :P

Saludos!

Modificado

El desempacado no correra facilmente, pero te permitira analizar el EXE... (VBDecompiler, IDA, etc)


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 9 Noviembre 2010, 16:23 pm
Gracias por tu comentario, me dedicaré entonces a revisar el desempacado.

Respecto del hack en la IAT no entiendo a lo que te refieres ( alguna protección del programa?)

El programa se conecta a un servidor para activarse, pero puede funcionar sin internet.

Estoy empezando en esto, pero parece que no me saqué buenas calificaciones en el curso de Ricardo, me toca recursar...jaja.



Título: Re: Trial en vb6 pe code autoextraible
Publicado por: 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!


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 10 Noviembre 2010, 21:05 pm
Una vez mas. gracias por tu respuesta..primero me encargaré de hacerme del exe desempacado y después me ire sobre la reparación de la IAT..

En cuanto tenga algún avance publicaré mis nuevas dudas ( que seguramente seran varias).


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: MCKSys Argentina en 10 Noviembre 2010, 22:12 pm
Para obtenert un semi-desempacado: pones un BP en ThunRTMain, y en el stack figura la direccion de retorno del call.

2 intrucciones mas arriba esta el OEP de VB: el PUSH y el CALL.

Balanceando el stack y poniendo EIP en el push, puedes dumpear sin problemas y arreglar la IAT con Imprec (no te olvides que la entrada mala es el hack).

Saludos!


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 19 Noviembre 2010, 19:34 pm
Honestamente estoy perdido. el BP en ThunRTMain salta hasta que doy click en evaluar, entonces supongo que la idea es obtener un codigo que ya no muestre el nag de comprar o evaluar sino directamente el loading.

Sin embargo, no logro llegar al OEP, no logro ver el push y call.

Por otra parte estoy investigando qué significa "balancear el Stack..." porque no he podido interpretar tus sugerencias..

El tema no lo he dejado, solo que parece que me faltan varias lecturas antes de dar con el clavo.

Gracias por tu ayuda.


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: MCKSys Argentina en 19 Noviembre 2010, 19:43 pm
Balancear el stack, significa tener en cuenta los PUSH/POP que se hicieron desde el lugar donde quieres llegar hasta el lugar donde estas.

De todas formas, no veo necesario balancearlo aqui, asi que puedes poner el EIP en el push y dumpear...

Por lo del conocimiento... bueno, lo maximo que puedo hacer es darte una mano, pero si no entiendes lo que te digo, creo que deberias leer algunos tutes antes...  :P

De todas formas, estamos aqui para aprender... no?  ;)

Saludos!


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 2 Diciembre 2010, 19:29 pm
Sigo estudiando el tema... solo que me he encontrado con que la llamada a ThunRTMain (para llegar al OEP) la encuentro por el método de las excepciones pero ya no estoy seguro que sea el correcto...

Para verificar lo intenté encontrar con un bp on memory access en MSVBVM60 en la parte code ( ENGINE)... pero en la pila solo encuentro direcciones hacia la misma dll u otras... no llego al user code traceando... o quizá no tengo suficiente paciencia.

Lo que he visto es que por las excepciones el desempacador no usa la misma direccion ( para generar las últimas excepciones) y eso me hace pensar q el punto q encontré no es el correcto... ¿ como puedo probar q es el correcto...?

Adjunto la imagen del OEP q obtuve... haber si alguien puede confirmarlo o corregirme.(http://img.vz4.net/files/small/s2ik5_oep.jpg)http://img.vz4.net/?s2ik5_oep.jpg (http://img.vz4.net/?s2ik5_oep.jpg)


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: MCKSys Argentina en 2 Diciembre 2010, 19:39 pm
Ese es el OEP...


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 2 Diciembre 2010, 19:42 pm
Gracias por tu pronta respuesta..


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

Cuando tenga avances posteo.. ;-)


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 3 Diciembre 2010, 22:57 pm
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...

(http://img.vz4.net/files/small/yt2tq_iat.jpg) (http://img.vz4.net/?yt2tq_iat.jpg)

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

(http://img.vz4.net/files/small/v2q5h_it.jpg) (http://img.vz4.net/?v2q5h_it.jpg)


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


(http://img.vz4.net/files/small/8v96i_restoiat.jpg) (http://img.vz4.net/?8v96i_restoiat.jpg)

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






Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 3 Diciembre 2010, 23:07 pm
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.


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: MCKSys Argentina en 4 Diciembre 2010, 00:56 am
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


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 4 Diciembre 2010, 01:00 am
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.

(http://img.vz4.net/files/small/fj6_dumped.jpg) (http://img.vz4.net/?fj6_dumped.jpg)


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...
(http://img.vz4.net/files/small/cekdt_iatrec.jpg) (http://img.vz4.net/?cekdt_iatrec.jpg)


Sugerencias son bienvenidas.



Título: Re: Trial en vb6 pe code autoextraible
Publicado por: MCKSys Argentina en 5 Diciembre 2010, 03:16 am
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!


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 7 Diciembre 2010, 01:22 am
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í:

(http://img.vz4.net/files/small/qt6cp_ecse_con_error.jpg) (http://img.vz4.net/?qt6cp_ecse_con_error.jpg)

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?





Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 7 Diciembre 2010, 22:47 pm
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.


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: MCKSys Argentina en 7 Diciembre 2010, 22:56 pm
Podrias probar poniendo un BP en CreateFile...


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 11 Diciembre 2010, 00:49 am
Esto me está volviendo loco... ahora mi aplicación ( la original) no quiere correr... marca un error de pila... Ya desintalé, reinstalé.. borré llaves de trial y nada... A menos q haya perdido una dll necesaria para q corra pero no sé como revisarlo.. Ya revisé  Con olly y ahí es donde marca una comparacíon de una dirección fuera del rango. obvio no la maneja el sistema y me bota.


El problema es que no sé si se debe a alguna modificación que me hizo el "semi-desempacado".. o tenga que ver con otra situación ajena al programa..


Sin embargo, el semi desempacado me sigue marcando el mismo error de version y no cae BP en CreateFileA.

Por otro lado, estuve investigando si es posible "adjuntar" información de la version a un exe...

Hay un programa q lo hace.. pero debe ser sobre un  exe totalmente desempacado.. Así que la aplicación es inservible en este momento...

En cuanto tenga adelantos actualizaré.






Título: Re: Trial en vb6 native code autoextraible
Publicado por: silvau en 18 Diciembre 2010, 00:07 am
Hecho... recuperé la aplicación... puedo seguir con mis pruebas.. estoy revisando el log de olly y comparandolo con el funcional veo q el mensaje de error n la version aparece cuando quiere leer layout.dll. El archivo (semi desempacado ya) lo cargué tambien en smartcheck y me dice q está en p-code, supongo q por eso no puedo agregar la informacion de version con Resource Tunner..

Voy a empezar a revisar si puedo capturar el momento en q se quiere cargar layout.dll...

En cuanto a poner un Bp en CreateFile... voy a hacerlo en el original haber si cae. Por cierto lo estoy poniendo como: Bp CreateFileA. es correcto?

Avances los pubicaré.


Título: Re: Trial en vb6 pe code autoextraible
Publicado por: silvau en 18 Diciembre 2010, 00:40 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!

Cuando te refieres a " las secciones " ¿cómo supiste q eran varias?. En mi caso solo identifiqué una la q se encuentra en 01540000 en mi caso ya que es ahí donde salta el original cuando usa la entrada erronea.. pero ¿ hay alguna forma de saber si me hacen falta otras secciones o no? ¿Hay alguna forma de saber cuales son?. En el tuto de ricardo, menciona q las q sn del tipo priv son las q genera el packer... pero se supone q no son todas....

Alguna ayuda en ese campo te lo agradeceré MCKSys Argentina  ( A parte de toda la q me has dado.. ya q has sido el único hasta ahora q se ha dado el tiempo de comentar...Gracias.)


Título: Re: Trial en vb6 native code autoextraible
Publicado por: silvau en 24 Diciembre 2010, 01:37 am
 :-( :-( :-(Alguna caridad con el tema.... Así como regalo de navidad :laugh: :laugh:

Felices fiestas.