Donde empiezo para liberar un programa de la mochila Aladdin Hardlock

Iniciado por edwingt, 16 Julio 2009, 19:05 PM

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

edwingt

Hola a todos, primero quiero felicitar a todos los involucrados en este foro, realmente se mira la cantidad de esfuerzo y trabajo que hay aqui para poner todos estos recurso a nuestra disposición.

Tengo un programa que compre que utiliza una mochila Aladdin Hardlock, pero no quiero tener que poner la mochila cada vez que lo utilizo. Asi que voy iniciar el proceso para liberar el programa de la mochila.

No se x donde empezar con esto, y este es el lugar donde estoy parado:

1. Se un poco de assembler pero hay algunas cosas que tengo que recordar.
2. No tengo nada de xperiencia en ingenieria inversa.
3. Estuve siguiendo unos tutoriales de mochilas hasp, pero me quedo en el aire con conceptos como encontrar el OEP (no se como encontrarlo), y arreglar la IAT que no se que es.

Por donde empiezo?, espero su ayuda y gracias.

karmany

Bueno si tienes la mochila, puedes intentar desempacarlo.

Si no sabes ingeniería inversa te explico de forma muy generalizada:
-OEP: Original Punto de Entrada. Cuando ejecutas un programa que no haya sido empacado, protegido, comprimido etc... sino solamente compilado y escrito en un determinado lenguaje de programación, la primera instrucción que se ejecuta es el OEP. CUando un programa está comprimido, cifrado etc... como es tu caso, su primera instrucción es el EP (no OEP) primero tiene que descomprimirse y cuando se haya descomprimido... ejecutará el OEP.

-Reparar la IAT significa reconstruir la tabla de importaciones(Import Address Table), esto es, saber TODAS las funciones que son utilizadas por tu programa e "introducirlas" en tu ejecutable para que cuando llame a una función (ej. MessageBox) sepa en qué dirección está.

La idea es que introduzcas la mochila en tu ordenador, abras el programa con un debugger (OllyDbg...), lo ejecutes, encuentres el OEP y pares el debugger en ese momento. Después te quedará reconstruir la IAT.

Te dejo un tute mío, a ver si te sirve de orientación:
Hasp HL por karmany

edwingt

Gracias Karmani.
Entonces lo primero que tengo que hacer es encontrar el OEP. Segun el RDG Packer Detector el programa fue compilado en Borland Delphi 6 o 7, estuve buscando en el foro y google cómo encontrar el OEP pero no encuentro nada.
Si alguien sabe donde puedo encontrar esta información o darme un punto de inicio, lo agradecería un montón. De momento seguiré buscando e iré publicando aquí cualquier avance que pueda ser de utilidad para otros posteriormente.

edwingt

Para darle seguimiento a lo que he estado haciendo en estos dias con este hasp.

Utilice el link que dejo karmani OEP Finder
http://www.tuts4you.com/download.php?view.396
para que me indicara el OEP

Uso el OEP Finder para encontrar un OEP, Luego intento utilizar una herRamienta llamada Import Rec para encontrar la IAT, sin embargo cuando ingreso la primera direccion que me muestra el OEP Finder, el Import Rec me dice que no puede encontrar la IAT con ese OEP.

Si utilizo el siguiente OEP que me da el OEP Finder resulta que el Import Recencuentra la IAT, pero me muestra 9 entradas invalidas y nada valido.

Por otro lado tambien intenté dejar la dirección que me muestra Import Rec al abrirlo. Lo que sucede cuando hago esto es que, si encuentra una IAT, y al ver entradas me muestra llamadas a varias librerias pero no me muestra ninguna entrada válida.

En resumen lo que me pasa es lo siguiente:

1. Usando el OEP de OEP Finder -> Import Rec no encuentra la IAT
2. Usando el segundo y demas OEP del OEP Finder -> Import Rec encuentra IAT, pero solo entradas invalidas.
3. Usando el OEP que muestra Import rec al inicio -> Encuentra la IAT, pero solo salen entradas válidas.

Si alguien tiene alguna sugerencia lo agradeceria en cantidad.

karmany

Una tontería pero en el OEP en el programa Import RE tienes que poner la RVA (Relative Virtual Address) no la VA. Supongo que lo has hecho así, pero por si acaso.
Si no sabes cambiar la VA a RVA te dejo mi programa que lo hace automáticamente:
http://foro.elhacker.net/ingenieria_inversa/file_location_calculator_v032_por_karmany-t262979.0.html

Otra cosa... para que OEP finder encuentre el OEP correcto tienes que insertar el hasp, si no fallará.

Si sabes llegar al OEP correcto y reparas la IAT (lee mi tute que te dejé, te ayudará) ya casi lo tienes...

ImportRE suele fallar bastante, pero eso no es problema. Lo normal que solemos hacer es llegar al OEP y buscar en OllyDbg una API y dumpear ese valor en la ventana de dump de OllyDbg. Ahí pones la vista de Address(long->address) y verificas las API y ves el comienzo de la IAT y el final... y así ayudas a Import RE y puedes ver si está todo correcto... no sé si me vas a entender...
ImportRE es muy buen programa...

edwingt

Creo que estoy perdido de nuevo, el programa con la mochila no se comporta como en las guias que tengo, al menos eso es lo que me parece, talvez la mochila es muy nueva y se comporta diferente.

Lo que veo raro es lo siguiente:

Encontrar OEP, ok creo:
1. He encontrado el OEP, con la técnica de break on access de Olly en la sección code, y lo he confirmado con el OEP Finder y la dumpeo.

Encontrar la IAT
Lo intento de 2 maneras.

2A. Econtrar la IAT con olly
Luego de esto intento encontrar el inicio de la IAT con Olly, poniendo un break en el siguiente call (CALL PCX1000.00408088) despues del OEP, ese call me lleva a la direccion (00408088  /$  50  PUSH EAX;  PCX1000.008B0EB8) le doy "follow in dump"-> selection y en la ventana de dump doy long->Address y me aparece (00408088  E8006A50) addres, value, pero comment vacío. Hasta aqui no se cómo saber en que sección estoy.
Aunque no se en que sección estoy le doy Ctrl+R para buscar las referencias y me aparece esto:
References in PCX1000:CODE to 00408088..00408088, item 0
Address=008B1C27
Disassembly=CALL PCX1000.00408088

Solo una llamada, que fue con la que iniciamos. De aqui no se que hacer para encontrar la IAT.

2B. Encontrar la IAT con Imp Rec
Abro mi programa
Ahora abro ImpRec, y busco el proceso, me sale automaticamente mi OEP (con el RVA). -> IAT Auto Search->Get Imports -> Show Invalid
y no aparece ninguna entrada inválida, solo aparecen 573 entradas que son válidas.

Estaré haciendo  algo mal? estoy atorado, cualquier guia a partir de este punto será muy util.
Gracias por la colaboración

edwingt

He estado revisando algunas cosas en el programa que quiero liberar de la mochila.
Tengo la hipotesis de que a pesar de que el programa usa la mochila, este no está cifrado. Es esto posible?

El RDG packer detector me saca esto.



Que piensan?

karmany

1º) La IAT con OllyDBG no lo estás haciendo bien o no entiendo cómo lo estás haciendo porque:
00408088  push eax;  PCX1000.008B0EB8
no es un salto a ninguna función, salta al mismo exe, entonces no puede ser...

2º) Con IRec: "no aparece ninguna entrada inválida, solo aparecen 573 entradas que son válidas"...
-De eso se trata... ¿por qué no pruebas cuando tengas todas válidas a pulsar en "Fix Dump" y seleccionas tu dumpeado?

edwingt

1º) La IAT con OllyDBG no lo estás haciendo bien o no entiendo cómo lo estás haciendo porque:
00408088  push eax;  PCX1000.008B0EB8
no es un salto a ninguna función, salta al mismo exe, entonces no puede ser...

Entonces la conclución de esto es que si el call me lleva al mismo exe PCX1000.XXX no estoy en una libreria referenciada.

2º) Con IRec: "no aparece ninguna entrada inválida, solo aparecen 573 entradas que son válidas"...
-De eso se trata... ¿por qué no pruebas cuando tengas todas válidas a pulsar en "Fix Dump" y seleccionas tu dumpeado?

Esto intente hacerlo pero al darle fix dump y ejecutar el archivo, no se ejecuta. Solo sale un mensaje de error.

edwingt

Bueno,
Probe de nuevo el proceso de hacer el fix dump en el imprec. Y efectivamente si me genera bien el exe (talvez cuando lo hice anteriormente me equivoque en algo). Lo que me pasa ahora es que si ejecuto ese exe y quito la llave siempre aparece que hace falta la mochila.

Seguire probando y reportando mis avencas.
Gracias Karmany, que ha sido el unico en ayudarme en este tema.