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.
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...
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!
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
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 !
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
en donde tiene para ingresar el registro?
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.
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
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
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
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
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)
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.
0
0E29399 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
Gracias tena, no conocia esa API.
Saludos
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 Set
DateFile, 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 !
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.