Trabajando con IDA en una aplicación *enorme*

Iniciado por anormal, 26 Febrero 2011, 21:50 PM

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

anormal

buenas,

estoy trabajando en algo que me he encontrado que me ha dejado sorprendido, porque básicamente es algo que no he visto hasta ahora (y llevo ya unos años en esto del reversing)...

Firstbeat Athlete es programa que sirve para analizar el resultado de una grabación de un sesión de cardio con un pulsómetro. Básicamente es el más completo, complejo y útil que hay, dentro tiene el resultado del trabajo de algunas tesis, estudios científicos, etc... Encima es un programa apenas conocido...

Resumiendo:
- Es una aplicación hecha en Borland C++
- Usa Firebird 1.5 para guardar datos, incluso la activation key se guarda en una tabla (recomiendo usar firebird maestro por ejemplo para trabajar con el fichero de datos que está dentro de la carpeta data)
- El proceso de activación es por internet, si detecta conectividad, el mismo conecta y envia la key que le pone el usuario a un server que es el que valida (se ve el string de conectividad fácilmente), sino te permite activarlo manualmente pero por email
- No sé si una vez activado sigue siendo necesario validar online
- hay una dll , securitydll.dll que contiene funciones criptograficas, quizás esté ahí la validación de la key?

Hasta ahí lo que he averiguado hasta ahora. Lo raro es que por ahora lo estoy intentando con IDA (mi herramienta favorita).

Ida 5.2 se cuelga y sale cuando lleva un rato
Ida 5.5 y 6.0 (relax, uso 6.0 la demo :D) se lo tragan y cargan los FLIRT del BDS2008, pero ambos llevan casi 24 horas procesando y analizando y continuan!!

Cierto que el fichero es de 25mb, pero aquí viene lo raro: la aplicación lleva dentro funciones, varias, con miles y miles de líneas de código cada una, miles de variables internas, en una de ellas IDA advierte con un error que hay más de 5000 líneas de declaración previa a UNA SOLA FUNCIÓN. Monstruoso.

Ideas:
- codigo ofuscado?
- sé, porque he leído mucho sobre esta aplicación que usa redes neuronales, posiblemente se genera el código de estas con un generador de código y estas funciones mostruosas sean el resultado de eso? ningún programador cuerdo haría ese código así de enorme...
- es código generado de alguna otra manera?

en estos momentos, IDA sigue analizando la aplicación y creo que después le haré un reanalyze a ver si limpia algo más, porque le está costando un trabajo  enorme al IDa... tengo el pc colapsado (un ida en cada núcleo ambos al 100%)

a ver si termina y lo cargo en Olly a ver qué hace..

Pongo esto por dos motivos:
- si alguien quiere echar una mano y ofrecer algún consejo
- por curiosidad, esas funciones y esas miles de variables es algo que por ahora no he visto nunca y la verdad no las entiendo...

apuromafo CLS

creo que puede ser que esas funciones miles hacia un mismo lado puede apuntar que puede usar vm o variables de dll externas como getcurrentprocess o similar
ejemplo call to check the key..o call para verificar que handle esta viendo, o generar el recurso, exportar algo , etc

el tema de peso puede ser complejo, pero aveces depende de cuanto espacio ocupa la aplicacion (en el peso del disco es una pero en memoria ram cuanto sera? puede que eso es lo que esta complicando a IDA, normalmente no recuerdo si se podia detener el analisis de una zona..y colocar uno los rangos..(si no es ida es windbg.)
pero  yo sugiero que si analizas vayas bloque a bloque y guardando la base de datos en caso x,
ollydbg 2.0.2 ocupa ese para comenzar, luego apuntas lo importante y lo vas analizando con mas tiempo en 1.1. con full plugins..

creo que por usar firebird igual debe cargar bastante, no creo que sea dificil (ya he depurado programas sobre 200 mb, pero el tema es el tiempo que te daras a analizar

sugiero para mas analisis, siempre darse un tiempo y preguntar de los bloques que se tengan dudas..ademas ya tienes un thread , podrias aprovechar este mismo..

saludos y animo, se que lo lograras algun dia, saludos Apuromafo

anormal

buenas!

terminó de analizar, jeje

el programa no está protegido con nada especial, no usa ningún packer, ni VM ni nada, es simplemente un enorme montón de código compilado con bc c++

las megafunciones esas, lo raro es que esas variables están en pila! si ya sé que es una locura, por eso me llamó la atención...

voy a generar un listado de funciones ordenadas por tamaño, por curiosidad...

Olly 2.0 tarda como 6-8 horas en analizar el fichero en el arranque inicial. Voy a ver qué puedo averiguar con un depurado normal del programa.




anormal

#3
Me he perdido un poco con esto programa... Demasiado código...

He encontrado un par de funciones que son llamadas aquí y allí para comprobar la validez del serial (que se almacena en una tabla en la bb.dd.) (mirar funciones en 00F71BEC, 00F73D44 y en 00F76954) pero no estoy seguro que parcheando esas funciones, el programa se quede full 100%

Si alguien quiere echar un vistazo y ve algo interesante... avisen! gracias!

Edito: Pedí ayuda en el foro de SnD y sacaron el parche, voy a poner la info aquí después que verifique todo, saludos!