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.

silvau

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.

silvau

Alguna sugerencia despues de 60 lecturas?

Espero alguien pueda comentar.

MCKSys Argentina

#2
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)
MCKSys Argentina

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


silvau

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.


MCKSys Argentina

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!
MCKSys Argentina

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


silvau

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

MCKSys Argentina

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!
MCKSys Argentina

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


silvau

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.

MCKSys Argentina

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!
MCKSys Argentina

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


silvau

#9
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/?s2ik5_oep.jpg