elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección.


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  [Tutorial Nivel básico] Haciendo cantar a nuestro Crackme
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Tutorial Nivel básico] Haciendo cantar a nuestro Crackme  (Leído 2,078 veces)
fary
Colaborador
***
Desconectado Desconectado

Mensajes: 957



Ver Perfil WWW
[Tutorial Nivel básico] Haciendo cantar a nuestro Crackme
« en: 4 Febrero 2016, 22:12 »

En este tema intentaré explicar como hacer  de nuestro Crackme, un Keygen. Modificando su comportamiento.

Decir que, esta técnica no funciona con todos los crackme, pero normalmente con los que suele hacer un strcmp suele funcionar.

En esta práctica vamos a usar el Crackme V1 de Yo-Mismo. Lo podemos descargar de aquí (estando registrados).

http://crackmes.de/users/yo_mismo/crackme_v1/

Bien, una vez que tenemos el crackme lo abrimos con OllyDbg. Lo importante es llegar al punto caliente donde compara el seríal que genera con el que nosotros introducimos, para ello en este caso pondremos un BP en scanf. Y se nos parará aquí:



Un poco mas abajo veremos el strcmp:
Código:
00401389  |. E8 52040000    CALL <JMP.&msvcrt.strcmp>                ; \strcmp

ponemos un BreakPoint en el. Introducimos usuario y serial y se nos parará en la función, vamos a examinarlo.



En la dirección 0x00404010 esta el serial correcto y en la dirección 0x00404020 esta el seríal que nosotros hemos introducido.

Anotamos la dirección donde guarda en seríal generado para nuestro usuario, osea 0x00404010.

Ahora lo que haremos será modificar la función printf, para que cuando valla a dar el error de “chico malo” en vez de mostrar el error muestre lo que sería el seríal válido para el usuario introducido.

Un poco mas abajo veremos donde muestra el mensage de error y el mensage correcto.



Entonces todo lo que tenemos que hacer es modificar esta linea:
Código:
004013A8  |> C70424 6420400>MOV DWORD PTR SS:[ESP],crack.00402064    ; |ASCII "Sigue intentando..."

Por esta otra:

Código:
004013A8     C70424 1010400>MOV DWORD PTR SS:[ESP],crack.404010

Ahora guardemos los cambios. Clic derecho>Copy To executable>All Modifications.
Clic derecho de nuevo en la ventana que nos paarecio > Save File.

Guardamos con el nombre que queramos y listo.

El único requisito que debemos cumplir es que el usuario y el serial que introduzcamos debe tener una longitud igual o mayor a 4. Si observas el algoritmo del Crackme lo vas a poder ver ;)

Ejemplo de como funciona nuestro keygen:





Eso fue todo :) Espero que se haya entendido algo, y nada, se que esto es muy básico pero seguro que a mas de uno de los que empiezan le va a servir.

un saludo.
« Última modificación: 5 Febrero 2016, 11:07 por fary » En línea

Un byte a la izquierda.
apuromafo CLS


Desconectado Desconectado

Mensajes: 1.389



Ver Perfil WWW
Re: [Tutorial Nivel básico] Haciendo cantar a nuestro Crackme
« Respuesta #1 en: 5 Febrero 2016, 03:59 »

cuando parchas un programa para que muestre el serial se le conoce como "self keygen" o autogenerar un keygen, por otro lado el tema que comentas que no siempre funciona parchar las dll, es porque la importación de la iat refiere que apis trabajará, entonces si cambias de sistema operativo, esto no hará funcional el programa, dado que es un programa hecho en c++, creo que hoy en día inclusive se puede re-programar todo , en las soluciones del programa presentados por otros usuarios comentan además de un pequeño bug que tenían en la lectura de los carácteres presentados, osea solo leia un cierto largo para la generación del número mágico que involucraba xor, multiplicacion, rotación , y multiplicacion, concatenación inclusive, el tema es que el trabajo de conocer un programa nunca es fácil a la primera pero como bien presentas, es facil modificar el comportamiento cuando ya sabes que hacer

felicidades, sigue así y espero vayas tomando idea de lo que te comento
Saludos Apuromafo
En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: [Tutorial Nivel básico] Haciendo cantar a nuestro Crackme
« Respuesta #2 en: 5 Febrero 2016, 04:16 »

De lujo Fary gracias por el aportaso
Saludos...
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
fary
Colaborador
***
Desconectado Desconectado

Mensajes: 957



Ver Perfil WWW
Re: [Tutorial Nivel básico] Haciendo cantar a nuestro Crackme
« Respuesta #3 en: 5 Febrero 2016, 11:12 »

Hola apuromafo!

Desconocia que esto se llamaba self keygen, no estoy muy metido en tecnicismos.  :xD

Por otro lado, yo no hablo en ningún momento de parchear una DLL  :-\ ¿A qué te refieres?

saludos!!

En línea

Un byte a la izquierda.
apuromafo CLS


Desconectado Desconectado

Mensajes: 1.389



Ver Perfil WWW
Re: [Tutorial Nivel básico] Haciendo cantar a nuestro Crackme
« Respuesta #4 en: 5 Febrero 2016, 22:13 »

self= por si mismo
keygen=generar la key

es considerado parchar el ejecutable, dado que has cambiado el exe original

Respecto a la dll, me refiero que cuando programas algo que use la funcion original, no siempre los formatos son compatibles, por lo cual muchas veces deben hacerse arreglos llamando a wsprint, para lo cual terminas importando una dll externa al código, en este caso no es necesario, pero algún dia te darás cuenta que no todo programa validado se usan el mismo formato, un ejemplo los números flotantes., reales, enteros boleanos etc, cada uno debe adaptar según la situación, estos son crackmes, asi que cumple su objetivo, pero cuando generas keygen de programas te das cuenta que no todo puede ser reversible a primera vista y muchas veces deben generarse bruteforce

Saludos Apuromafo
En línea

fary
Colaborador
***
Desconectado Desconectado

Mensajes: 957



Ver Perfil WWW
Re: [Tutorial Nivel básico] Haciendo cantar a nuestro Crackme
« Respuesta #5 en: 6 Febrero 2016, 00:03 »

Gracias por tus consejos apuromafo   :)

Si no genera el serial valido no se puede hacer así de esta manera, pero si genera un serial para comparar, da igual el formato en que este int, float, u otro ya que se podrá mostrar como tu dices con wsprintf, que siempre se podrá cargar con GetProcAddress aunque no use User32.dll.

Lo de brute force no lo hice nunca  :laugh: ya se dará la ocasión de probar a hacerlo  :laugh:

saludos.
En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
|Lo que no hay que hacer en C/C++. Nivel basico| « 1 2 ... 6 7 »
Programación C/C++
Littlehorse 69 132,309 Último mensaje 24 Octubre 2015, 08:48
por Seyro97
[Nivel 1/10] CrackMe básico C #4 « 1 2 »
Ingeniería Inversa
cibergolen 12 6,059 Último mensaje 30 Diciembre 2012, 22:42
por cibergolen
[Reto] CrackMe I (Nivel: Básico / SuperFácil) « 1 2 »
Ingeniería Inversa
jaxoR 13 3,467 Último mensaje 28 Abril 2015, 20:21
por Arkangel_0x7C5
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines