Test Foro de elhacker.net SMF 2.1

Programación => Ingeniería Inversa => Mensaje iniciado por: N0mada en 20 Julio 2010, 21:37 PM

Título: Ayuda para crackear un programa
Publicado por: N0mada en 20 Julio 2010, 21:37 PM
Hola, estoy intentando crackear un programa que tiene 3 protecciones al menos...

Cómo puedo en olly poner un BP para cuando acceda a una clave del registro en concreto para tracear después desde alli ?

es porque el programa accede a la clave de registro para comprobarla así que quizás a partir de ahi pueda llegar a la rutina que comprueba la clave y modificarla para que crea que está bien...no se me ocurre mejor forma de empezar a buscar que esa, acepto todas las sugerencias de los expertos.
Título: Re: Ayuda para crackear un programa
Publicado por: MCKSys Argentina en 20 Julio 2010, 22:03 PM
Puedes usar un BP en la API RegQueryValueA o RegQueryValueExA.

El tema es que deberás ejecutar con F9 cada vez que acceda al registro, hasta que llegues a la clave que quieres.

Si el registro lo consulta luego de iniciar la aplicación (por ej. luego de hacerle click a algun boton) puedes ejecutar el EXE  con el BP deshabilitado y habilitarlo antes de hacerle click a dicho boton...
Título: Re: Ayuda para crackear un programa
Publicado por: N0mada en 20 Julio 2010, 22:23 PM
Lo primero gracias por responder  :D

el problema es precisamente ese, el programa cuando va a imprimir comprueba que se esté registrado leyendo esa clave de registro y haciendo algo con ella, pero si no lo estás sólo imprime unas pocas líneas y ademas escribe publicidad.
He mirado con el process monitor las llamadas a registro y hay cientos justo en ese momento, carga los tipos de fuentes del sistema, las impresoras del sistema... etc etc junto con la comprobación de la clave para imprimir todo o sólo parte.

por eso quería filtrar más si es posible o si se puede atacar de alguna otro forma...

no se, me he atascado ahí la verdad

a ver si hago progresos...

les cuento!
Título: Re: Ayuda para crackear un programa
Publicado por: MCKSys Argentina en 21 Julio 2010, 15:08 PM
Si el programa no está empacado, puedes probar de parchear el salto donde decide si es una copia registrada o no.

Aunque esto depende de "qué" es lo que hace el programa con el serial...  :P
Título: Re: Ayuda para crackear un programa
Publicado por: N0mada en 21 Julio 2010, 22:28 PM
Ya...

esque es precisamente dónde no se por donde entrar.

el programa es http://www.simplygest.es/descargas/sgpro.exe

y es justo el problema llegar a ese salto que no se me ocurre como llegar a esa zona caliente.
Quiero encontrar la rutina esa que "hace algo" con esa clave pero no doy con ella. :-[

No se que mas formas se les ocurren para llegar a esa zona caliente ...

Voy a seguir peleandome con la aplicación a ver si alguien arroja algo de luz mientras tanto.

Saludos !
Título: Re: Ayuda para crackear un programa
Publicado por: gastonp en 26 Julio 2010, 04:28 AM
Proba con el método que comentó LSL en otro post:

Citarbusca los mensajes en memoria con Alt+M, Control+Inicio y Control+B (para buscar), una vez localizado el texto, le pones un "Breakpoint > Memory on access".

Proba buscando el mensaje "el código de desbloqueo no es correcto" que es el error que te tira cuando ingresas la clave. Luego anda fijandote en el stack a donde regresa y si en ese lugar hay algun salto que lo evite. Si el primer RETURN TO del stack no cumple con esa condicion, baja hasta el siguiente y asi que llegues a una parte de codigo con un salto que evite el CALL que lleva al mensaje de error.
Saludos
Título: Re: Ayuda para crackear un programa
Publicado por: tena en 26 Julio 2010, 18:51 PM
en donde tiene para ingresar el registro?
Título: Re: Ayuda para crackear un programa
Publicado por: gastonp en 27 Julio 2010, 03:14 AM
Hola tena, cuando ingresas al programa te aparece la ventana principal con varios botones grandes en el medio. Presionas en cualquiera de ellos y te aparece una nag con un contador de 10 segundos despues de los cuales se habilita la opcion de continuar probando la aplicacion. Dentro de esa nag tambien esta la opcion de registrarse.
El metodo mas facil que encontre para romper cerca de la comprobacion del codigo de registro es el que cite en el post anterior. De esa forma llegue a una CALL en la direccion 00DBDFA6 que venia de un JE en 00DBDDB7. Ahi entras en la CALL que esta encima del salto y la parchas para que devuelva un 1 en AL. De esa forma te acepta cualquier codigo de registro y la proxima vez que ingresas ya no aparece la nag.
Luego hay parchar otra rutina para que no aparezca la palabra [DEMO] delante del nombre de la empresa ni la leyenda "Version de demostracion" al imprimir las facturas.
Título: Re: Ayuda para crackear un programa
Publicado por: N0mada en 28 Julio 2010, 17:49 PM
Hola,

gracias por las sugerencias gastonp.
Esa primera parte ya la tengo conseguida, de hecho el programa también comprueba que la fecha de modificación sea la del original y si no ... ExitProcess.
Yo uso el SetDateFile para poner la misma del original y así no tengo que preocuparme de cuantos checks ha puesto el programador adicionales...

El problema es que aunque el programa te dice lo de: "El programa ha sido desbloqueado con éxito en este equipo" tras parchear esa rutina con el
mov AL, 1
RETN

en la subrutina hay otra subrutina para la impresión que te dice lo de versión demo...

esa es la que no descubro  y con BP en los RegQueryValueA o RegQueryValueExA hay cientos de BPs porque carga fuentes, drivers, impresoras...

Esa es la rutina que hay que machacar !  ;D
Título: Re: Ayuda para crackear un programa
Publicado por: gastonp en 29 Julio 2010, 01:05 AM
Hola N0mada:
Yo antes de buscar la rutina de impresion busque la que hacia que aparezca la palabra [DEMO] delante del nombre de la empresa, y grata fue mi sorpresa cuando al parcharla tambien desapareció la leyenda en la impresión de facturas (sin querer mate dos pajaros de un tiro  ;D). Se ve que la misma rutina maneja ambas cosas.
Para encontrarla busca en las cadenas de texto la palabra [DEMO]. Solo hay dos ocurrencias y estan una debajo de la otra.
Subis un poco en el código hasta la CALL de 00D13ECF. Esa es la que tenes que parchar para que devuelva 1 en AL. De esa forma desaperece tambien la leyenda "Version de demostracion" en la impresion de facturas.
No se si habra alguna otra limitacion, yo solo encontre esas pero como no uso este tipo de programas quizas tenga otras. Es cuestion de probarlo.
Saludos


PD: ah me olvidaba, para que funcionen todos los cambios tenes que hacer un loader
Título: Re: Ayuda para crackear un programa
Publicado por: tena en 29 Julio 2010, 16:35 PM
Felicitaciones gaston,

Lo del Loader es porque se cierra la aplicacion?

Porque si es asi, como bien dijo Nomada se puede usar el SetDataFile para cambiar la fecha de modificacion y ya se soluciona el problema.

ó parchando aqui..


00E29399   .  8B85 44FCFFFF MOV EAX,DWORD PTR SS:[EBP-3BC]                   ;  fecha parcheado
00E2939F   .  8B15 94F4EE00 MOV EDX,DWORD PTR DS:[EEF494]                    ;  SimplyGe.00EFF914
00E293A5   .  8B12          MOV EDX,DWORD PTR DS:[EDX]                       ;  fecha original
00E293A7   .  E8 C4CA5DFF   CALL SimplyGe.00405E70
00E293AC   .  0F84 91000000 JE SimplyGe.00E29443


cambiando el JE por un JMP ya no se cierra.

slds
Título: Re: Ayuda para crackear un programa
Publicado por: gastonp en 29 Julio 2010, 20:04 PM
Gracias tena, y si lo del loader es porque se me cierra la aplicacion. Lo que no se es como llegaste a esa dirección para parcharla y que no se cierre. Yo puse un bp ExitProcess y Olly se detiene antes de salir pero no logro llegar a ese lugar.
Disculpen mi ignorancia pero ¿qué es el SetDataFile?

Saludos
Título: Re: Ayuda para crackear un programa
Publicado por: MCKSys Argentina en 29 Julio 2010, 21:12 PM
Creo que es esto: http://msdn.microsoft.com/es-es/library/ms136861(SQL.90).aspx (http://msdn.microsoft.com/es-es/library/ms136861(SQL.90).aspx)
Título: Re: Ayuda para crackear un programa
Publicado por: tena en 30 Julio 2010, 00:31 AM
Cita de: gastonp en 29 Julio 2010, 20:04 PM
Gracias tena, y si lo del loader es porque se me cierra la aplicacion. Lo que no se es como llegaste a esa dirección para parcharla y que no se cierre. Yo puse un bp ExitProcess y Olly se detiene antes de salir pero no logro llegar a ese lugar.
Disculpen mi ignorancia pero ¿qué es el SetDataFile?

Saludos

Sinceramente, tuve el mismo problema que vos y no encontre el motivo del que se cerrara, pero despues dijo ahi Nomada que era por la Fecha de Modificacion ( me gustaria saber como lo averiguo ) y entonces con estas apis:

GetFileTime
FileTimeToLocalFileTime
FileTimeToDosDateTime

me fui acercando, la que mejor te deja es la ultima, ahi vas dando run y cuando te sale en los registros el nombre del ejecutable, das Alt+F9 para ir al codigo y llegas aca.

00E265B6  |.  E8 29235EFF   CALL <JMP.&kernel32.FileTimeToDosDateTime>          ; \FileTimeToDosDateTime
00E265BB  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00E265BE  |.  E8 ADAD5EFF   CALL SimplyGe.00411370
00E265C3  |.  DD5D E8       FSTP QWORD PTR SS:[EBP-18]
00E265C6  |.  9B            WAIT
00E265C7  |.  FF75 EC       PUSH DWORD PTR SS:[EBP-14]                          ; /Arg2
00E265CA  |.  FF75 E8       PUSH DWORD PTR SS:[EBP-18]                          ; |Arg1
00E265CD  |.  8BD3          MOV EDX,EBX                                         ; |
00E265CF  |.  B8 E865E200   MOV EAX,SimplyGe.00E265E8                           ; |ASCII "yyddmm"
00E265D4  |.  E8 5BD75EFF   CALL SimplyGe.00413D34                              ; \SimplyGe.00413D34


luego pasas el ret y llegas a la comparacion de las fechas.

00E29399  MOV EAX,DWORD PTR SS:[EBP-3BC]                      ;  fecha modificado del parchado
00E2939F  MOV EDX,DWORD PTR DS:[EEF494]                       ;  SimplyGe.00EFF914
00E293A5  MOV EDX,DWORD PTR DS:[EDX]                          ;  fecha modificad deloriginal
00E293A7  CALL SimplyGe.00405E70
00E293AC  JE SimplyGe.00E29443                                ;  la salvacion


y ahi parchamos por un jmp.

slds

Título: Re: Ayuda para crackear un programa
Publicado por: gastonp en 30 Julio 2010, 15:34 PM
Gracias tena, no conocia esa API.
Saludos
Título: Re: Ayuda para crackear un programa
Publicado por: N0mada en 4 Agosto 2010, 16:49 PM
Cita de: gastonp en 29 Julio 2010, 20:04 PM
Disculpen mi ignorancia pero ¿qué es el SetDataFile?
Saludos

Disculpadme a mi que me equivoqué al teclearlo.
No es SetDataFile sino SetDateFile, y sirve para lo que su propio nombre indica: establecer fechas de modificación, creación etc a los archivos.
Una especie de "touch" en linux.

aquí hay varios programas para lo mismo:
http://www.online-tech-tips.com/computer-tips/how-to-change-the-last-modified-date-creation-date-and-last-accessed-date-for-files-and-folders/es/

MCKSys se las arregló para encontrar información hasta de una palabra escrita por error,  ¡es un fenómeno!  ;-) hasta de eso he aprendido yo algo...

En cualquier caso yo opté por esta solución por miedo a alguna rutina extraña y oculta por el programador que se abra los años bisiestos a las 3 y cuarto de la tarde y cosas de esas...
De todas formas el método que propone tena es el mejor para este foro al menos, que es el más educativo y la explicación de las APIS está genial.

Gracias por la ayuda !
Título: Re: Ayuda para crackear un programa
Publicado por: ea3000 en 23 Noviembre 2014, 05:07 AM
Usen este EXE el otro esta completo solo es un demo se logra activar pero este contiene todos los reportes completos y demás detalles.

Ultima version 22-11-2014
www.simplygest.es/reg/sgpromodu.exe

SI alguien tiene algo de tiempo para entretenerse haciendo un KeyGen les dejo la DB de los clientes activaciones, licencias a la fecha 22-11-2014.

https://mega.co.nz/#!ZtNnSboC!Be7ARb4YuAalYodobar1V8OtsLBk9kfTUlIw5r9ONrk

Listo ahí tienen los materiales, me envían un MP cualquier cosa si se les complica.

Saludos
EA3000

29 Julio 2010, 20:04

[MOD] No se reabren temas tan antiguos, leer Reglas del Foro.