COMO CRACKEAR POR ESTADO+PORCINO |
CAPÍTULO
VI. DESVIRGANDO EXPEDIENTES X -Como Crackear Contaplus Élite Pyme- |
Junio 1999
Indice |
INTRODUCCIÓN
AL ATAQUEEEEEEE PROTECCIONES ESPA╤OLAS PRIMERA APROXIMACION Y PRIMER ENFADO OBJETIVOS SEGUNDA APROXIMACI╙N Y SEGUNDA OSTIA. LAS COSAS SE COMPLICAN LA SOLUCI╙N A LA PELUA CUESTI╙N MODIFICACI╙N DE FICHEROS CREADOS EN TIEMPO DE EJECUCI╙N INTENTO SER UN TIO ELEGANTE, PERO NO EST┌PIDO CAER EN LA CUENTA OPCION 3 CA╤ERA VUELTA A LA PROTECCI╙N EST┌PIDO VELO ┐╔XITO? SOLUCIONES VIABLES HORROR Y ESPANTO EL MISTERIO INSONDABLE EL EXPEDIENTE X DESVIRGADO JUGUETEANDO PD PARA EL PROGRAMADOR |
INTRODUCCIÓN
Victima: CONTAPLUS ╔LITE PYME
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.
|
AL ATAQUEEEEEEE Miremos nuestro producto. Se trata de un clßsico de la facturaci≤n espa±ola. Contaplus Pyme ╔lite Oto±o 98 del 1-11-98Un 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 porqueno 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 APROXIMACI╙N 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 SOLUCI╙N A LA PELUA CUESTI╙N 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. |
MODIFICACI╙N DE FICHEROS CREADOS EN TIEMPO DE EJECUCI╙N 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 EST┌PIDO 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 podermodificarla 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 PROTECCI╙N 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 |
EST┌PIDO 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 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 llevamosuna 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 |
PD PARA EL PROGRAMADOR 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. |
|