Habi Hablóg
Declaro:
XML válidoXHTML válido800x600 +
RSS válidoCSS válidoNavegador digno
  Blog   Archivo   Contacto   Administración  

Acerca de

Matemático, informático, aficionado a la electrónica, friki... y otras cosas que no vienen a cuento ni pasan los filtros de palabras.

¿Queríais un blog? Ahí va.

Red antisocial

¡Me van a volver loca! 2.0
La Fragata Portuguesa

Z
¡Me van a volver loca!

Últimos posts

El expediente X que nadie pidió
eNigma
La cuadratura del píxel
Portando desde Spectrum
Inexorable

Últimos comentarios

Habi
NoSupoResolverLaFuncion
Edu
Habi
EnriqueGG

Calendario

No hay fechas.

Categorías

Chorradas
Paranoias
Posts lúcidos
Tecnoesoterismo
Yuyus

Cenas de Abj

Abj debe 7 cenas.

Frase célebre

Zarith (a Habi): pues no te tengo en spam. Qué raro, deberías estar ahí

Crackeo laboral

Habi - 08/07/2008 16:00:07 - Tecnoesoterismo

En un departamento de Isolux, de cuyo nombre no quiero acordarme, no ha mucho tiempo que contrataron a un Gañán de los de nula informática, gañanucia superlativa y creimiento ingenieril.

El caso es que ese ser se trajo de su antigua empresa un programa para calcular cutremente el hormigonado de una presa. Un programa para DOS del año de la Polka, hecho en Clipper (una especie de extensión sobre el lenguaje de dBase III+, compilado sobre una máquina virtual). Un programa que, según pregonaba a los cuatro vientos henchido de orgullo, había hecho él.

Y aquí comienza mi historia; me dice el GF que tienen un problema, que no pueden sacar listados (lógicamente, ya que bajo Windows hay que capturar la impresión), y que se vendrán a ver si puedo hacer yo algo. Nosotros estábamos haciendo las documentaciones técnicas de una presa y su variante para ellos. Anteriormente ya les habíamos tenido que dar las áreas de las secciones cubicadas, tema que merecería un post aparte.

En cualquier caso, llegaron por la tarde el supuesto autor del programa y su jefe. Normalmente soy una persona poco empática, y nada más ver a alguien no siento nada (aparte de la repulsión que me causan los humanos, claro), pero este caso fue distinto, supe que su formación informática era nula. Y sus palabras y sus hechos me lo confirmaron.

El programa no sacaba los datos por pantalla ni nada porque estaba PROTEGIDO, algo que este proyecto de lechón ignoraba. Durante esa tarde me dediqué a lo que más me gusta: dejarle mal delante de todos y especialmente de su jefe. Al final admitió que el programa "lo hicimos los que estábamos allí"; el muy chorizo había borrado el archivo de la base de datos con los nombres de los creadores (y por eso da un casque el programa si le das a los créditos, no llegaban sus conocimientos a editar una sencilla BBDD en formato .dbf).

Conclusión: teniendo en cuenta que lo de la impresora era trivial, y que el supuesto fallo ocurría por el propio programa, siendo él el "programador" bien podría coger el código fuente y corregirlo, así que a mí que me dejen en paz. Ni que decir tiene que al final tuvieron que pasar del programa no sólo porque no daba los listados sino porque calculaba mal (la protección borra ciertas tablas).

Pero me quedé una copia, y ese fin de semana me dio por ahí y me lo llevé a casa. Teniendo en cuenta que estaba hecho en Clipper y tenía información de depuración, le di una pasadita por Valkirie, agrupé módulos y... código descompilado al 99%. Un poco de corrección, retirado de las dos protecciones que tenía, borrado de código muerto (hice un analizador), corrección de casques, del consumo de CPU vía OsLib, eliminado tema de impresión, añadido enlace a Windows, compilación con CA-Clipper 5.3b y tengo la aplicación funcionando bajo Windows perfectamente.

Pero esta no es la primera vez que abro algo relacionado con el curro. El mejor ejemplo de esto es el Cardim.

El Cardim es un programa que, hasta hace poco, no tenía versión para Windows (ahora existe una .NET) no sólo por el tema de portarlo, sino para que no se lo abriesen. Hay cientos de herramientas para desensamblar y depurar código "plano" de 32 bits bajo Windows, pero para un ejecutable de 16 bits en modo protegido la cosa está difícil, y requiere de alguien que se conozca y bien estas cosas.

Me llevó un par de tardes enteras retirarle la protección con pastilla a una versión que me bajé del Emule que alguien había puesto para ver si alguien era capaz de abrirlo, el IDA y al Turbo Debugger para modo protegido (nada de Soft-Ice) se portaron como campeones. En breve, un conocido nos trajo la versión 2000 con soporte para DXF y estuvo lista en un par de horas. Detalle curioso: está hecho en Borland Pascal (no hace falta decir más).

La diferencia con el anterior es que en esta ocasión fue el jefe el que me lo propuso; teníamos que hacer un trabajo de señalización, era imposible de hacer por los delineantes, el programa costaba entre kilo y medio y tres kilos (y recordemos: es una patata en DOS que sólo hace carteles), y estaban en juego los beneficios de diciembre.

Así que pudimos repartir beneficios y además me llevé un plus por reventarlo. ¿Cuál es la moraleja?


Keeper - 15/07/2008 12:39:48

Tengo CARDIM 1.0 (hasp hl / mochila de red) y no he podido emular la mochila. 
Si te animas...



Habi - 15/07/2008 13:14:08

El 1.0 para Windows, ¿no? Mirando por encima la demo de IPSVial realmente no es un ejecutable nativo sino uno .NET. Se le puede echar un ojo con el IDA, pues entiende el ensamblador del MSIL; el código sin embargo tiene los nombres ofuscados. 
 
No obstante se puede quitar fácilmente el texto de fondo "Cardim Demo", ya que no está firmado. También tiene las rutinas de protección para HASP, pero el código de muchas opciones está ausente y apuntando a la rutina que dice que es una versión demo. 
 
Quizás algún día le eche un ojo en serio por curiosidad, pero de momento no tengo idea. Desde un punto de vista personal, para mí es un programa inútil, sólo sirve para hacer señalización vertical de carreteras, algo que yo no hago ni nunca he hecho. Desde el punto de vista de la empresa, ya tienen el 2000 DXF que abrí, que no lo hemos vuelto a usar desde entonces más que otra vez. Si cambiase la norma significativamente o algo y me lo pidiesen, entonces quizás. 
 
Por si te sirve de algo, el que abrí primero fue una 6.0 bajada del Emule, luego una 2000 DXF que nos pasó un conocido. El programa en sí mismo no tenía encriptación alguna en código, y usaba sólo la llave como comprobante hash en ciertas operaciones. Sin embargo, el código estaba centralizado. Un par de rutinas llamadas al inicio (local + red) y otra desde cada módulo. Se parchean in situ (no en las llamadas) y arreglado.



keeper - 16/07/2008 10:24:43

Como muy bien dices, el programa lo usamos muy poco. El problema que se me presenta es que cada vez que lo necesito me tengo que desplazar a Madrid, donde tenemos la licencia y pasarme un par de días para realizar el trabajo. He intentado emular la mochila y no he tenido suerte. Si quieres te paso CarDim 1.0 para Windows (77Mb con drives para hasp, red, manual... full vamos) a cambio me gustaría que me pasaras el 2000 dxf ya que si no voy a tener que buscar alojamiento para la semana que viene.



keeper - 16/07/2008 12:16:32

Mis nociones son muy limitadas (cuando digo muy, quiero decir que son nulas) pero creo que no es un .NET es un PE Executable 
 
De todos modos te envío esto a ver que opinas. 
Estoy entre manuales a ver si aprendo algo... 
 
[...] 
Loading file 'C:\Archivos de programa\CarDim Windows 1.0\CarDim.exe' into database... 
Detected file format: Portable executable for 80386 (PE) 
0. Creating a new segment (00401000-00414000) ... ... OK 
1. Creating a new segment (00414000-00418000) ... ... OK 
2. Creating a new segment (00418000-0041C878) ... ... OK 
3. Creating a new segment (0042E000-0059F000) ... ... OK 
Reading imports directory... 
File C:\WINDOWS\system32\oleaut32.dll is used for module OLEAUT32... 
Applying fixups... 
4. Creating a new segment (0059E8D4-0059F000) ... ... OK 
5. Creating a new segment (0042EF40-0059E8D4) ... ... OK 
Assuming __cdecl calling convention by default 
Plan FLIRT signature: SEH for vc7/8 
[...] 
.protect:0042E2CC: Can't find references (hint: redo analisys) 
[...]



Habi - 17/07/2008 15:41:06

Lo primero que tengo que decir: nada de warez, lo siento. Nada de binarios ajenos crackeados en este espacio o por correo. 
 
Sin embargo, no tengo inconveniente alguno en publicar instrucciones o, más generalmente, ayudar con estos temas a alguien que ha decido aprender por sí mismo en vez de pedir. 
 
Como cultura general: los ejecutables .NET están insertos dentro del formato PE, se diferencian por una referencia en la tabla de importaciones. Una vez identificados como tales, la máquina virtual los abre, lee los metadatos de las cabeceras, etc., y luego ejecuta. 
 
No obstante y en este caso, como bien dices, es un ejecutable nativo, no hay más que ver las direcciones de los segmentos. Y un tanto sospechoso, crea después de los fixups los segmentos 4 y 5, que por direcciones están contenidos dentro del 3. Además de que el segmento de código inicial se llama .protect en vez de .text como es tradicional. También mosquea el uso de la automatización OLE. 
 
La pregunta entonces es: si la versión demo de la web (http://ipsvial.es/Descargas/CarDim_Windows_1_0_Demo_Setup.zip) es un ejecutable .NET hecho en C# que incluye incluso las rutinas de protección HASP (y las librerías), ¿es posible que la versión completa esté hecha en VC? 
 
Me temo que estás ante un wrapper, por temas de protección; el verdadero ejecutable está en otro archivo en el mejor (e improbable) de los casos, o bien contenido dentro de ese ejecutable que tienes, como recurso o datos, y seguramente encriptado con alguna secuencia dependiente de la pastilla. Examina los segmentos de datos, y sobre todo observa la protección. 
 
Si está bien hecha, no sacará el ejecutable en un archivo temporal (pero compruébalo de todas formas en el administrador de tareas) aparte y lo lanzará, sino que lo montará directamente en memoria. Como tienes la pastilla, sigue el proceso con cuidado hasta que se lance el verdadero programa y vuelca, o bien intenta el plugin "Universal PE unpacker" que viene con el IDA, o utiliza un unpacker genérico y haz un volcado de memoria a ejecutable, y empieza a trabajar sobre eso.



keeper_vm - 17/07/2008 16:50:49

Estoy impresionado... 
Antes de continuar... ¡Muchas gracias! 
En Segundo lugar, pedirte perdón por utilizar ciertos téminos en tu blog e incitar a... 
La verdad es que soy un aficionado, me encanta la informática, pero soy autodidacta y me falta mucha "escuela". Ya tengo reservado el billete y la estancia para Madrid. Como te dije en comentarios anteriores, en un par de días tendré las señales terminadas, ¡eso espero! 
De todos modos, me he descargado algún que otro manual referente a: IDA, ollyDebugger, PE editor, DeDe, SmartCheck, PEiD y W32dasw. Pero ninguno atiende a este tipo de protección y a sus métodos, es más, no he visto nada de relativa importancia. 
Tus consejos, que he esperado como agua en Mayo me parecen sorprendentes, "cuanto sabes tio". No te sigo en un principio, pero investigo tus recomendaciones y me voy metiendo poco a poco en el tema. 
Efectivamente es un wrapper, es un sistema de red, con una única pastilla para trabajar con varios terminales (todos los que tengas en red, previa instalación de su respectivo drives) pero de uno en uno. Dos ordenadores simultaneamente no pueden utilizar el programa. 
Me queda grande todo esto Habi, si conoces algún manual...  
Un saludo y gracias.



Habi - 20/07/2008 18:37:17

No pasa nada, Keeper; entiendo tu situación (por motivos obvios). Y también la de IPSVial al proteger el programa (porque me dedico al desarrollo de software profesionalmente). 
 
No tengo demasiados problemas éticos en abrir un programa como reto (abrir y tirar), o para mi uso personal, o incluso para alguien cercano que se que no lo va a distribuir por ahí (como fue en este caso). Pero lo contrario no, porque no quiero causarle daños a la compañía que lo hace, la cual da trabajo a varios programadores, como yo. Lo que hagan otros, eso ya es cosa suya. 
 
Me temo que no hay manuales sobre pastillas, o que abarquen todas las protecciones. Porque hay demasiadas, y cada día se cambian precisamente debido a que hay gente que se las salta. 
 
Encontrarás páginas de gente que te dice como ha abierto cierto programa X con la pastilla Y que tenía un software de protección versión Z. Y ya. Es como toda la información en este campo: demasiado genérica o demasiado concreta. La única forma de aprender es practicando. 
 
Las protecciones con pastilla son de las más difíciles en general (hay de todo, puede que el programador de la aplicación haya sido torpe a la hora de integrarla). Quizás deberías empezar por algo más sencillito; mira este link: http://www.habisoft.com/irmia/comentarios.asp?id=67 
 
Por último decir que estando el sistema de licencias en red puedes usar un sniffer para ver los paquetes que entran y salen, inferir el funcionamiento, y emularla en el servidor. No hay una integración fuerte con el hardware en la máquina cliente, podrías atacar por ahí también. 
 
¡Suerte!



Jose - 30/07/2008 20:58:10

Hola, no voy a mentir encontre este blog por casualidad je pero mola, sobre todo despues de leer que conseguiste el cardim por internet, cosa de crack total. 
Si sabes de donde poder bajarlo y como quitarle las protecciones y eso aunque me han dicho que es casi imposible que hay q ser un genio. 
Bueno cualquier informacion que me pases se te agredece, porque toy loco buscandolo. 
Y sino te molestas en contestar a un cualquiera que entra en el blog pues nada solo felicitarte por el. Un saludo



Habi - 31/07/2008 22:45:52

¿De dónde bajarlo? De donde se baja todo, del emule. Alguien debía estar desesperado, pues lo puso junto con los drivers e incluso fotos de la pastilla, para ver si alguien podía abrirlo. 
 
¿Cómo abrirlo? Es fácil, de verdad... si conoces cómo funciona el DOS, el modo protegido de 16 bits y un entorno DPMI. Vieja escuela, los buenos tiempos. 
 
Yo utilicé IDA para código muerto y Turbo Debugger para código vivo. No te recomiendo Soft-Ice o WinDbg porque saltarás a código de 32b a la mínima; mejor ese debugger en su máquina virtual. 
 
Realmente no hace falta ser un genio, no hay protecciones de verdad. Ni encriptados del código con secuencias de la pastilla ni nada. Según vi, en la versión de Windows tampoco se han molestado, y por lo que dijo Keeper tendrá un wrapper. 
 
Si sabes a lo que me refiero, deberías mirar en los segmentos de código 1 (programa principal, en torno a 02f5), 7 (módulo impresora, 205b), 19 (todas las rutinas de HASP, varios sitios) y 25 (una rutina de librería que comprueba una cadena proveniente de la pastilla, 1d18). Si no sabes a lo que me refiero, siento decirte que no te voy a dar el programa abierto. Mira los comentarios anteriores.



keeper - 02/08/2008 12:06:01

Hola Habi! 
La verdad es que entro en tu blog constantemente, contestas con gran rapidez y se aprende. Dando vueltas al asunto CARDIN se me ocurrió una solución mucho más elegante, Trabajar con un túnel entre el servidor que tiene la mochila y nuestros pcś. Así que se lo comentamos a los informáticos de la empresa y mediante OpenVPN (servidor con linux y clientes con windows) utilizamos la pastilla en la ciudad que se necesite. Ahora viene el problema, me enviaron unos certificados y unas keyś junto con su ovpn para conectarme. Pues bien, sólamente me funciona en el equipo de mi jefe y en el mio no soy capaz de establecer conexión, bueno miento, aparentemente se conecta pero no encuentra la mochila (asi que no establece conexión). Si me puedes ayudar con esto... me hace gracia, si lo piensas bien, las horas que estoy perdiendo con esto... casi hubiera sido mejor pagar los 3000 euros por una segunda licencia. Preguntaré el lunes al departemento de informática pero si en uno funciona me dirán que no saben... joder yo debería estar descansando y no con esto pero para mi se ha vuelto un reto personal. 
Un saludo,



Habi - 06/08/2008 2:07:33

Me parece el camino correcto, ya que al fin y al cabo lo tenéis original. Una VPN y arreglado. 
 
Una vez conectado ¿puedes ver los recursos de la red como si estuvieses en ella? Si no es así, me parece que tienes un conflicto en el TCP/IP. Seguramente tengas otro adaptador de red, puede pasar que el IP caiga en el mismo rango, que enrute los IPs de esa red por la puerta de enlace de la otra o cualquier otra cosa. 
 
Si puedes ver los recursos de la red remota pero no se conecta a la pastilla prueba a desactivar cualquier otro adaptador antes de ejecutarlo, por si intenta mandar los datos específicamente por ahí; al fin y al cabo estarás al menos en dos redes distintas simultáneamente, normal que no sepa en qué rango de IPs enviar los paquetes. 
 
Más fácil, en cualquier caso, que abrir el programa.



keeper - 03/04/2009 1:00:28

Hola Habi! 
Hace un tiempo atrás, te envié unos comentarios sobre este tema, y como no, muy amablemente me respondiste. Estos comentarios fueron muy fructíferos. Hasta tal punto que me ha enganchado esto de la ingeniería inversa. Y si te digo la verdad... no es con afán de lucro, ni mucho menos, si conoces la web de Ricardo navaja (cracklatinos) me descargo programas elaborados por ellos e intento crackearlos, parchearlos, sacar claves y demás. Es entretenido. Me gustaría enviarte algo que tengo a medias y no soy capaz de conseguir dar con lo que falla o falta. No se si es mucho pedir... pero como tu si fuiste capaz en su día…  
Mi dirección… creo que te queda registrada al enviarte este comentario. Si no accedes a proporcionarme una cuenta a la que enviarte un pequeño archivo para que le eches un vistazo, lo entiendo. 
Un saludo, 



Habi - 06/04/2009 17:01:15

Contestado. :)



Angel - 14/07/2010 15:02:03

hay alguna manera de que pudieras pasarme la version del 2000 del Cardim ya levantada, trabaje tiempo en estas cuestiones y siempre me huviera gustado ver como funcionaba el dichozo programa este, un saludo



Habi - 15/07/2010 12:15:49

Si lee los comentarios anteriores podrá inferir trivialmente que la respuesta es no. 
 
Atentamente, Habi (irresponsable del Blog).




Post cerrado