| ESTUDIO COLECTIVO DE DESPROTECCIONES Última Actualizacion: 25/10/2001 |
Programa | Como crackear por Estado+Porcino Capítulo 6 Desvirgando expedientes X. Contaplus Elite | W95 / W98 / NT
Descripción | Aplicacion de contabilidad
Tipo | comercial
Tipo de Tutorial | [X]Original, []Adaptación, []Aplicación, []Traducción
Url | www.gruposp.com
Protección | diskette llave
Dificultad | 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas | W32dasm, UltraEdit
Objetivo | Simular estar registrados.
Cracker | Estado+Porcino
Grupo | Whiskey Kon Tekila
Fecha | Junio 1999
INTRODUCCION
Victima: CONTAPLUS ÉLITE PYME Site: www.gruposp.com HERRAMIENTAS: Desensamblador. Por ejemplo w32dasm Editor hexadecimal. Por ejemplo uedit Paciencia y Confianza. Saludos familia. Aprovecho los ratos para escribir algunas cosillas. En esta ocasión acometemos uns joyita con Discos llave,Números de serie,encriptación, descompresión en tiempo de ejecución y misterios insondables. Un dulce para pasar el rato. Llegó a mis manos una petición de crack. Normalmente la desestimo, a menos que la pida un amigo, me interese o favorezca mi entorno de trabajo. Es mejor enseñar a crakear que enseñar a llorar para suplicar. En fin, toda esa filosofía expuesta por +ORC y reescrita por E+P. Son las 8:00 de la mañana y me he pasado toda la noche crakeando. Si señor, hay pocos placeres comparables. Los crackers me entenderán perfectamente de lo que les hablo:-). El peluo maulla desesperao y la gorda duerme a mi lado. A veces la vida te sonríe y no sabes porqué.Aprovéchala antes de que cambie. En este entorno , nada se puede resistir...
AL ATAQUE
Miremos nuestro producto. Se trata de un clásico de la facturación española. Contaplus Pyme Élite Otoño 98 del 1-11-98 Un paquete en formato CD que se compone de: ContaPlus FacturaPlus NominaPlus PersonalPlus Utilidades (Antivirus Norton, Antivirus Mcafee, Sidekick y PC Anywhere) La web la tenemos en www.gruposp.com. Despendolemos un ratico por su web a ver a cuanto tienen el timo. Uhmm 2 millones de ventas y nuestro producto 165.000 pelas, !!! Precio especial !!!! Joer, pos si que, pa una urgencia, vamos. Se merecen que lo crackeen, si señor.
PROTECCIONES ESPAÑOLAS
A primera vista, el programa es español y por tanto la protección también. Conociendo los antecedentes de protecciones españolas, estimo que estará roto en 5 minutos. Sólo recuerdo una protección española cojonuda. Era de un catalán y se la había puesto a su programa de rompecabezas. Si sería buena que fue uno de los "coladores"para la +HCU con +ORC y +Fravia(a ver si se recupera pronto, leñe)
PRIMERA APROXIMACION Y PRIMER ENFADO
Empezamos mal, intentamos instalar el contaplus y nos pide un disquete llave. Joder, ¿no habían pasado al olvido esas protecciones basadas en discos llave?. ¿Es que no aprenden?. Los discos llave fueron desechados porque no eran fiables, se podían cascar en el trayecto de la fábrica al usuario y luego vete a reclamar al maestro armero una vez que has pagado el producto, eso sin contar el tiempo de espera del nuevo disquete, y que el que te manden no esté roto. Para colmo, estos discos se formatean a medida por lo que no se pueden copiar (en general) ni siquiera para sacar una triste copia de seguridad. Como veis, una mierda, y los del CONTAPUS dale que dale.
OBJETIVOS
Estan claros, cepillarse al CONTAPLUS y obviar el disco llave. Pero conseguiremos bastantes cositas más.
SEGUNDA APROXIMACION Y SEGUNDA OSTIA. LAS COSAS SE COMPLICAN
Si intentamos instalar sin disco llave nos aparece una estúpida ventana: "Inserte disco llave, Por favor retire el disco actual y bla,bla,bla" La ventanita tiene pinta de dialogbox, así que nos vamos al SoftIce y ponemos unas bonitas trampas para osos. bpx dialogbox bpx dialogboxparama Lanzamos al niño y el que pica es el bpx dialogboxparama. Con f12 aparece la ventana de error, pulsamos NO y caemos en kernel!alloc. Ostias que feo. F12 antes pa asomar el pescuezo en :10012739 dentro del proceso ~GLC000x. (la x es variable). Ostias, que mierda es esta, ¿dónde está es fichero ese tan raro?. En el directorio del conta no, seguro. ¿Pero entonces dónde?. Si buscamos el ficherito no está en el disco duro. Entonces, ¡por la madre de MITRA!, ¿que coño pasa?. Pensad una posible solución antes de pasar al siguiente párrafo, que os van a salir almorranas cerebrales.
LA SOLUCION A LA PELUA CUESTION
Pos si, seguro que ya lo habeis acertado :-) El puto fichero se crea en tiempo de ejecución y se borra antes salir. Por eso no aparece en el directorio de instalación ni en el disco duro al finalizar. Pero entonces, segunda e importante cuestión: ¿como mangonearemos si se genera en tiempo de ejecución? Es vital poder toquetear para saltarse la protección. Así pues, relegamos el estudio del para centrarnos en como se puede modificar un fichero que se crea en tiempo de ejecución.
MODIFICACION DE FICHEROS EN TIEMPO DE EJECUCION
Las variantes que se me ocuren de menos a más elegantes son: 1 Entender como se crea el fichero y retocarlo antes de que se cree. 2 Parchearlo en memoria una vez creado - mediante un parche en tiempo de ejecución. - Aplicando ingeniería inversa para localizar y redirigir un trozo de código inútil dentro del ejecutable y que parchee el fichero. 3 Dejar que se cree en memoria pero redirigirlo a un fichero en disco ya retocado. Recuerdo cierta protección del mismo tipo en el Hotmetal 4.0. antes que los encerraran en la inutilidad del vbox.
INTENTO SER UN TIO ELEGANTE PERO NO ESTUPIDO
Pues eso, intento ser un tio elegante y opto por la primera opción y descubro lo siguiente: * Dentro del fichero instalar.exe del contaplus reside el famoso ~GLC000x. En tiempo de ejecución se lee un trozo del fichero instalar.exe, se marea un poco y se construye el nuevo fichero. El nombre se construye a partir de una cadena constante :~GLC%04x.tmp. Podeis abrir el fichero instalar.exe y cambiar el nombre por algo más decente. Tengo destripado y pasado a C el algoritmo que extrae del fichero instalar.exe los bytes, los marea un poco y los escribe en el ~GLC%04x.tmp. Si quereis más datos del algoritmo mandadme un mail. * Me quedaba la duda de si el autor de la protección había encriptado, comprimido o encriptado/comprimido. La respuesta es sólo comprimido siguiendo un complicado algoritmo que tengo casi analizado. Asi pues sólo queda otra semana para crear un compresor (el descompresor ya lo tengo, está en el propio programa). * Como la cosa se complicaba, deseche esta vía y me fui a la opción 2. Pronto la desistimé porque no sabía cuantos parches tenía que aplicar. Así pués, me fui a la vía 3. Ya sé, ya sé, es la más cutre, pero rula :-)
CAER EN LA CUENTA
Concurrida audiencia, por si no os habeis dado cuenta, la protección es muy buena. RESPETAD AL PROGRAMADOR que se ha entretenido en comprimir sus datos y descomprimirlos en tiempo de ejecución. Buen trabajo BBYYMMAARRCCOOSS. Quizás no esté todo perdido dentro del panorama de programadores españoles. Aupa muchachos!!!
OPCION 3 CAÑERA
Lo primero es pillar una copia chachi del ~GLC%04x.tmp pa poder modificarla tranquilamente y después regirigir el programa para que cargue nuestra dll y no la que ha creado. Para ello, lanzamos el instalar y aparece la venta de error con "si" y "no" . Nos vamos al explorador de Windows con la teclilla nueva con el logo del windoze (ostias, pero si sirve pa algo y to), o bien lo abrimos antes que el instalar y conmutamos con ALT+TAB. Estamos seguros que el fichero debe de existir porque aún no ha acabado el programa (nos da la opción de continuar si pusamos "si"). Buscamos en el explorador los ficheros que empiezen por ~GLC y bingo, lo tenemos en c:\windows. Con mucho cuidado lo copiamos y lo pegamos en un sitio seguro. Nuestra cena ya está en la red :-=). Para los descuidados como yo, habilitarle la opción de sólo lectura con el botón derecho del ratón y propiedades. Sino lo perderemos cuando lo utilizemos. Recordad quitarle lo de sólo lectura para parchearlo. Do quiera que un fichero se cargue en memoria y se ejecute en tiempo de ejecución este debe ser una dll. Ya sé, ya sé, no tiene extendión dll ni ná, pero no es necesario. Para que un fichero sea considerado dll basta con tener nombre y extensión, y la constante ~GLC%04x.tmp lo cumple. Por tanto, instalar debe cargarlo como librería. Si lo desensamblamos, vemos que usa la función del api KERNEL32.LoadLibraryA y además sólo una vez.
    :004024F7 740A                    je 00402503

    :004024F9 E87E060000              call 00402B7C

    :004024FE E9BD000000              jmp 004025C0

    * Referenced by a (U)nconditional or (C)onditional Jump at Address:

    |:004024F7(C)

    |

    :00402503 8D85E8FEFFFF            lea eax, dword ptr [ebp+FFFFFEE8]

    :00402509 50                      push eax; Nombre churro de la librería ~GLC%04x.tmp

    * Reference To: KERNEL32.LoadLibraryA, Ord:0190h

                                      |

    :0040250A FF1534304000            Call dword ptr [00403034]
Ahora hay que aplicar un poco de ingeniería inversa para transformar y que cargue siempre nuestra librería retocada. Os ahorro el proceso mental y obtenemos después de verificar que nunca se pasa por :004024F9 (con un bpx por ejemplo)
    :004024F7 8D85E8FEFFFF lea eax, dword ptr [ebp+FFFFFEE8];Dirección del nombre de la dll a cargar

    :004024FD C700432E6100 mov dword ptr [eax], 00612E43    ;Constante .a0 y aprovechamos la c inicial

                                                             de [eax] nos queda c.a

    :00402503 8D85E8FEFFFF            lea eax, dword ptr [ebp+FFFFFEE8];Guardamos las modificaciones.

    :00402509 50                      push eax

    * Reference To: KERNEL32.LoadLibraryA, Ord:0190h

                                      |

    :0040250A FF1534304000            Call dword ptr [00403034]
Con esto siempre se carga la librería "c.a". Así pues renombramos la ~GLC%04x.tmp que habiamos pescado antes como "c.a" . Ya sé, el nombre es un poco cutre, pero si no os gusta retocarlo vosotros. No se os olvide indicar que es de sólo lectura si no lo queréis perder. Si repetimos lo del bpx dialogboxparama aparecemos en el proceso C!text (nuestro fichero c.a). Vamos por el buen camino. To este rollo pa redirigir un puto fichero, la protección debe ser la ostia. Estoy ansioso :-) Resumiendo, buscamos en el instalar.exe 74 0A E8 7E 06 00 00 y lo encontramos en 0x18F7 y cambiamos por 8D 85 E8 FE FF FF C7 00 43 2E 61 00
VUELTA A LA PROTECCION
Ya podemos mangonear tranquilos nuestro C.a. Ahora hay que localizar donde se llama al disco llave y neutralizarlo. Los accesos al disco se pueden hacer de forma cutre y a alto nivel con "deviceiocontrol" o bien usando las interrupciones a pelo. Como podeis sospechar, se han usado los deviceiocontrol. Si en el softIce ponemos un bpx deviceiocontrol aparecemos en una dll mu fea GLfxxxx.tmp. Esto suena al mismo truquillo de descompresión en tipo de ejecución. Si pusamos unas 20 veces f12 reaparecemos en nuestra querida c.a
    :10015244 FF24858E540110          jmp dword ptr [4*eax+1001548E]

    :1001524B FF550C                  call [ebp+0C] ;Llamada a la feisima glfxxxx.tmp

    :1001524E E93C010000              jmp 1001538F

    :10015253 FF75B4                  push [ebp-4C]

    :10015256 FF550C                  call [ebp+0C] ;2º Llamada
Os ahorro el trabajo y os comento como funciona el esquema de protección a este nivel. Se crean 2 dll en tiempo de ejecución en el mismo estilo que ya hemos comentado. Estas dll se encargan de todo el acceso al disco llave. Los parámetros a las dll se pasan (agarraos) en cadenas ascii. Basta con poner un bpx 1001524B y echar un vistazo a esi y edi. Obtendremos parámetros del tipo 3HayDisco 3Esdisco 3Instalaciones
ESTUPIDO VELO
Corramos un estúpido velo en esta parte de la protección, porque es la más patética. Baste decir dos cosas, para anular completamente al disco hay que parchear :1001524B. En :1001524B se comprueba que existe disco, que el disco tiene el formato adecuado, se leen el número de licencias . Si existe algún error devuelven en eax=0, sino devuelven eax=1 Así pues cambiamos
                         :10015244 FF24858E540110          jmp dword ptr [4*eax+1001548E]

                         :1001524B FF550C                  call [ebp+0C]

                         :1001524E E93C010000              jmp 1001538F

                         :10015253 FF75B4                  push [ebp-4C]

                         :10015256 FF550C                  call [ebp+0C] ;2º Llamada

    Por

                         :1001524B 33 C0                   xor eax,eax

                         :1001524D 40                      inc eax

                         :1001524E E93C010000              jmp 1001538F

                         :10015253 33 C0                   xor eax,eax

                         :10015255 33 C0                   xor eax,eax

                         :10015257 40                      inc eax

                         :10015257 90                      nop
Buscamos FF 24 85 8E 54 01 10 en c.a y lo encontramos en 0x1464B donde ponemos 33 C0 40 E9 3C 01 00 00 33 C0 33 C0 40 90 Con esto quedan fulminados los accesos a disco. Si seguimos adelante nos pide un número de serie que se puede obviar si parcheamos en
    :1001525E FF75B8                  push [ebp-48]

    :10015261 FF75B4                  push [ebp-4C]

    :10015264 FF550C                  call [ebp+0C]; eax=0 si todo va bien.

    :10015267 E923010000              jmp 1001538F

    por

    :1001525E 33C0                    xor eax, eax

    :10015260 33C0                    xor eax, eax

    :10015262 33C0                    xor eax, eax

    :10015264 33C0                    xor eax, eax

    :10015266 90                      nop

    :10015267 E923010000              jmp 1001538F
Si no parcheamos los push el programa casca. Resumiendo, buscamos en c.a ff 75 b8 ff 75 b4 ff 55 0C E9 23 01 00 00 y lo encontramos en 0x1465E, cambiándolo por 33 c0 33 c0 33 c0 33 c0 90 Cuando pida el serial podemos introducir cualquier churro numérico p.e: 111-1-696969-11 En el nombre de la empresa y nombre del usuario introducimos más de dos caracteres. Curiosamente todas estas rutinas GLC de acceso a disco y check del serial, aparecen como una dll normal spptr.dll en el directorio de instalación. Para qué, mu sencillo, para deinstalar y eliminar una licencia del disco llave. En teoría hay un número límite de instalaciones, cada vez que se instala el programa se elimina una licencia del disco llave y cada vez que se desistala se añade una. ¿ÉXITO? Si seguimos todos los pasos, la instalación finaliza correctamente . Ávidos lanzamos el programa y crash."Aplicación instalada incorrectamente". ¿En qué nos hemos equivocado?. Pensad un poco.
SOLUCIONES VIABLES
Seguro que habéis llegado a la misma conclusión que yo. Las rutinas de manejo de disco que hemos inutilizado, dejaban algun flag en algún sitio que indicara que el programa estaba bien instalado. Así pues hay quedan dos opciones: 1 Saltar la comprobación en el programa principal. 2 Activar ese flag.
HORROR Y ESPANTO
Seleccionando la opción 1 nos encontramos en un avispero. El progrma principal está hecho en CLIPPER. Qué horror, aún se siguen usando esas herramientas del demonio. Si queréis pasarlo realmente mál intendad, trazar un programa en clipper. El control se realiza por bucles de salto del tipo call[ax+4] que conducen a otros bucles de salto call [ebx+6], hasta el inifito. Todo está dirigido por tabla y en código de 16bits. Osea nada de usar la potencia de los registros de 32 bits. Una montaña de mierda, como podreis observar. Nada recomendabe ni saludable. Optamos por la opción 2. Para eso llamamos a nuestro amigo y le pedimos que nos comprima el CONTAPLUS (bien instalado) en disquetes para compararlo con el que tenemos. Busque las diferencias.
EL MISTERIO INSONDABLE
Si descomprimimos el CONTAPLUS bien instalado en nuestro disco duro nos llevamos una desagradable sorpresa. "Aplicación mal instalada". Joder, que coño pasa, pero si lo hemos copiado de uno que estaba bien instalado. A ver, a lo mejor accede al registro del sistema buscando algo raro. Lanzamos el regmon y vemos que la aplicación accede pero busca cosas nada importantes. Podréis pensar, bueno quizás busque un fichero extraño que no hayamos copiado. Lanzamos en filemon y sólo accede al win.ini fuera de su directorio. Miramos el win.ini y no vemos nada sospechoso. ¿To esto está mu bien, pero que coño mira para saber que no está bien instalado? Este es el misterio insondable que me ha tenido la noche en velo y que me ha hecho disfrutar como un enano cabezón. Pero hay más, si copiamos el directorio de instalación en el disco duro donde se instaló originalmnte, el programa deja de funcionar. Quedan eliminados los flags en el registro del sistema y el acceso a ficheros raros, como ya suponíamos. Y el colmo, si copiamos y pegamos el ejecutable en el directorio de instalación del disco duro original de instalación el jodio programa funciona con el ejecutable original, pero no con la copia. ¿es mágia? ¿hay una explicación razonable o estamos ante un expediente X ? Pensad el problema antes de mirad la solución, es apasionante. Centraos en lo extraño que es que funcione con el ejecutable original y no con la copia, cuando son los mismos ficheros.
EL EXPEDIENTE X DESVIRGADO
Lo más curioso de todo es que el programa funciona con el ejecutable original, pero no con la copia. En principio, esto no tiene sentido, a menos, claro está que exista una diferencia entre el original y el copiado. Exactamente, la fecha de creación. Para comprobarlo retrasé el reloj del windoze hasta la fecha hora y minuto en el que se había construido el ejecutable original. En ese preciso momento realizé una copia del origial y BINGO, la copia del ejecutable funcionaba. Ya hemos encontrado el flag, pero hace falta saber donde se guarda. En el registro del sistema no, porque no realiza ninguna operación extraña. Puede guardarlo en algún campo de la base de datos , osea en los fichero dbf. Para eliminar esta opción copie todos los ficheros (excepto el ejecutable) de nuestro CUENTAPLUS al directorio original, y seguia funcionando. En conclusión, el flag está dentro del propio ejecutable. Para comprobarlo, comparé el ejecutable original y el nuestro y he aquí las diferencias :
    FileSize:   2FA780h

    DD     2F2726h

    DB         C7h

    DB         7Fh

    DD     2F2727h

    DB         A2h

    DB         C1h

    DD     2F272Dh

    DB         9Dh

    DB         3Dh

    DD     2F272Eh

    DB         54h

    DB         79h
Cambian 4 posiciones de memoria de un ejecutable a otro. Así pues una de las rutinas de acceso a disco que hemos desabilitado introduce en el ejecutable final la fecha de creación. Para más inri, esta fecha está encriptada y la llave de la desencriptación es BBYYMMAARRCCOOSS. Estos programadores nuncan aprenderán a ser humildes, los muy jodidos. Si cazamos las dll de disco que hemos anulado (copiar y pegar como ya vimos) y desensamblamos, observamos que se utiliza una bonita función: DosDateTimeToFileTime function converts MS-DOS date and time values to a 64-bit file time.
    BOOL DosDateTimeToFileTime(

        WORD  wFatDate,	// 16-bit MS-DOS date

        WORD  wFatTime,	// 16-bit MS-DOS time

        LPFILETIME  lpFileTime 	// address of buffer for 64-bit file time

       );
Ponemos un bpx DosDateTimeToFileTime y lanzamos el contaplus. EUREKA, aparecemos en spptr.dll, un par de f12 más y volvemos a al ejecutable original. No os aburriré indicando como localizar la rutina de comprobación del flag (ya somos mayorcitos), doy directamente el parche:
    Cambiamos

    :10001545 8D542428                lea edx, dword ptr [esp+28]

    :10001549 51                      push ecx                   ;BBYYMMAARRCCOOSS

    :1000154A 52                      push edx

    Por

    :10001545 8D542428                lea edx, dword ptr [esp+28]

    :10001549 51                      push ecx                   ;BBYYMMAARRCCOOSS

    :1000154A 51                      push ecx                   ;BBYYMMAARRCCOOSS
Buscamos en spptr.dll 8d 54 24 28 51 52 lo encontramos en 0x154A y lo cambiamos por 51 Listo y a disfrutar. Ya es hora de volver con la gorda y el peluo para tomar una cerveza.
JUGUETEANDO
*Existe una forma alternativa de corregir el problema de aplicación mal instalada. Si cogemos un dbf cualquiera del directorio /emp y lo copiamos con el nombre menumode.dbf , entramos en la aplicación pero en versión demostrativa, sin copias de seguridad y sin algunas opciones más. * Para convertir las copias de seguridad a la versión profesional, cambiad el nombre del fichero /emp/versione.dbf por /emp/versionp.dbf y /emp/menuwine.dbf /emp/menuwin.dbf . Esto provoca un pequeño error al mirar el "Acerca de" en el CONTAPLUS, pero no tiene mayor importancia. Sospecho que con una poyada de estas más podemos pasar del CONTAPLUS élite al profesional, pero no he dado con la tecla. * Podemos copiar impunemente el directorio del CUENTAPLUS de un disco duro a otro sin necesidad de reinstalar. * Este mismo proceso es aplicable al NOMINAPLUS y FACTURAPLUS y el resto del paquete y muy probablemente al resto de productos de la empresa SP. El TVPPLUS está cascado (por lo menos en el cd) por lo que no se ha podido probar y el PersonalPlus no necesita retoques. PAra el resto de componenetes del paquete, simplemente se parchea el instalar.exe, y se copia el c.a del CONTAPLUS y se comienza la instalación. Una vez instalado, se copia el spptr.dll del contaplus en el directorio apropiado para cada producto (NOMINAPLUS: /exe) (FACTURAPLUS: /exe) * Para pasar una version demostrativa (o educativa) a versión élite, basta con aplicar el parche al spprt.dll y borrar el fichro /emp/menumode.dbf
P.D. PARA EL AUTOR
Querido Marco: Has construido una buena protección. He estado tentado de guardarme el crack por respeto. Pero lo que me decidió fue la decepción de ver como usabas Clipper y tu forma relajada de acceder al disco mediante deviceiocontrol. La próxima vez esmérate un poco más, aunque he de reconocer que he disfrutado con tu protección en grande.
NOTAS PARA LOS LECTORES
1.- Los mensajes del tipo "Hazme el crack para ....", "Dime como se crackea....", "Dime donde puedo encontrar..." son automáticamente ignorados. El objetivo de estos artículos es enseñar a crackear no enseñar a ser unos llorones ineptos que sólo saben mendigar. 2.- Sólo responderé a preguntas teóricas sobre cracks, indicando algunas pistas que faciliten la labor. 3.- Narices, escribid artículos sobre los programas que crackeeis. De nada sirve lo que aprendéis si no lo repartís, se os pudre en el cabeza, palabra. 4.- Lamento no haber contestado a ciertos mails interesantes. Desde aquí mis excusas. 5.- Si os ha servido para algo mis artículos, no seáis vagos y mandad un mail indicándomelo. Estado+Porcino Esperamos vuestras opiniones, sugerencias y ensayos en estadoporcino@hotmail.com Recordad bebed de la fuente, buscad a +ORC en la red.
[ Entrada | Documentos Genéricos | WkT! Web Site ]
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
(c) Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers. Si necesitas contactar con nosotros , lee esto antes e infórmate de cómo puedes ayudarnos