Crackear un programa con serial

5
CRACKEAR UN PROGRAMA CON SERIAL En esta seccion aprenderemos un metodo habitual y general de cracking de programas con una pobre proteccion que consiste en un simple serial (en este caso los que, despues una serie horrorosa de operaciones sobre el nombre, acaban en una simple comparacion). Os vuelvo a repetir que esto es una simple guia, no creais que va a funcionar en todos los programas, vosotros sois los que debeis estudiar el codigo. Antes de nada deciros que para este cursillo voy a usar como desensamblador el Win32Dasm y que voy a dar por sabido el cómo usar el Win32Dasm y el SoftIce (SICE); para su uso hay otra seccion mas adelante. Programas con una proteccion tan pobre pueden ser: mIRC (http://www.mirc.co.uk), WinZip (http://www.winzip.com), Hex WorkShop (http://www.bpsoft.com), etc. Para empezar, corremos el programa y vemos que nos pide que lo registremos, y para ello nos pide un Nombre y un Numero de Serie, los cuales no sabemos :-( Joder!!! Pues este programa me gusta y me lo quiero quedar asi que lo voy a "petar" :-] Para ello tenemos dos opciones: 1. Correr el Win32Dasm y desensamblarlo. - Lo primero que os aconsejo es hacer una copia de fichero con el que vayas a trabajar por seguridad mas que nada ;-) - Una vez desensamblado corremos de nuevo el programa e introducimos un nombre y una clave (Nombre: Mr_Burns Serial: 1234567890) le damos al OK y nos dice "Wrong Password" (o algo por el estilo :-)) Bueno, pues apunta esa frase! - Volvemos al Win32Dasm y en la seccion de String Reference buscamos esa cadena. Ahora le haces un dobleclick nos llevara a la direccion donde esta esa

description

Crackear un programa con serial

Transcript of Crackear un programa con serial

Page 1: Crackear un programa con serial

CRACKEAR UN PROGRAMA CON SERIAL

En esta seccion aprenderemos un metodo habitual y general de cracking de

programas con una pobre proteccion que consiste en un simple serial (en este

caso los que, despues una serie horrorosa de operaciones sobre el nombre,

acaban en una simple comparacion). Os vuelvo a repetir que esto es una simple

guia, no creais que va a funcionar en todos los programas, vosotros sois los

que debeis estudiar el codigo. Antes de nada deciros que para este cursillo

voy a usar como desensamblador el Win32Dasm y que voy a dar por sabido el

cómo usar el Win32Dasm y el SoftIce (SICE); para su uso hay otra seccion

mas adelante.

Programas con una proteccion tan pobre pueden ser: mIRC

(http://www.mirc.co.uk), WinZip (http://www.winzip.com), Hex WorkShop

(http://www.bpsoft.com), etc.

Para empezar, corremos el programa y vemos que nos pide que lo registremos,

y para ello nos pide un Nombre y un Numero de Serie, los cuales no sabemos

:-( Joder!!! Pues este programa me gusta y me lo quiero quedar asi que lo voy

a "petar" :-]

Para ello tenemos dos opciones:

1. Correr el Win32Dasm y desensamblarlo.

- Lo primero que os aconsejo es hacer una copia de fichero con el que vayas a

trabajar por seguridad mas que nada ;-)

- Una vez desensamblado corremos de nuevo el programa e introducimos un

nombre y una clave (Nombre: Mr_Burns Serial: 1234567890) le damos al OK

y nos dice "Wrong Password" (o algo por el estilo :-)) Bueno, pues apunta esa

frase!

- Volvemos al Win32Dasm y en la seccion de String Reference buscamos esa

cadena. Ahora le haces un dobleclick nos llevara a la direccion donde esta esa

Page 2: Crackear un programa con serial

cadena, lo normal es volver a darle un dobleclic ya que puede haber varias

referencias a esa cadena. Si al hacer eso os vais a otra direccion, volveis a

hacerlo hasta que llegueis a la primera. Espero que no haga falta decir que

debemos apuntar esas direcciones (o address, como querais decirlo).

- Antes de continuar, hay otra posibilidad... que no encontremos esa cadena

en String References :-( Para ello hay otra solucion: Le damos a buscar texto

(en el boton ese que tiene una linterna) e introducimos el texto. Si lo

encontramos estara, normalmente, al principio del programa y delante de esa

cadena veras algo como "ID=0075". Eso es que en ese sitio esta la referencia

a esa cadena asi que le damos nuevamente a buscar texto y ponemos ese

"ID=0075" y nos llevara ahi. En este momento estaremos en la misma

direccion que si le hubieramos encontrado en el Reference String y le

hubieramos hecho dobleclic.

- Una vez en la direccion de la cadena debemos buscar mas arriba un salto,

(JMP, JNE...) o una llamada (CALL). Algo parecido a esto:

* Referenced by a (U)ncondicional or (C)ondicional Jump al Address:

|: 0040CA91 (C), :00402809 (U) <-- Como podeis ver (C) es condicional y (U)

es incondiconal

|

* Referenced by a CALL at Address

|: 0000457FBA <-- Esto es una referencia a una llamada

|

- Estas referencias a llamadas y saltos significan que en otra parte del codigo

hay un salto que lleva aqui, si son condicionales saltan ante una comparacion,

es decir, comparan dos numeros, si son iguales sigue sino viene aqui o

viceversa. ¿Lo pillais? Al ser esta una cadena que nos dice que la password es

incorrecta, en alguno de estos saltos debe haber algo asi. Por ello debemos ir

a ellos y mirar el codigo que esta alrededor de ese salto. A lo mejor

encontramos algo parecido a esto:

xor eax,eax <-- Borra EAX

call 00495870 <-- Hace una llamada. Lo habitual es que esta sea la que

genera el codigo verdadero

Page 3: Crackear un programa con serial

pop ecx <-- Devuelve nuestra pass 1234567890

cmp eax,ecx <-- Compara EAX (con la pass verdadera) y ECX (con nuestra

pass)

jne PasswordIncorrecta <-- Si no son iguales te salta a la ventana de "The

Password is Wrong"

PasswordCorrecta <-- Si es igual, el programa queda registrado

- Espero que vayais entendiendo lo que os quiero decir. Lo que a mi se me

ocurre es cambiar ese salto JNE a JE asi al compararlas y ver que no son

iguales continue para registrar el programa. Este metodo tiene un fallo, y es

que si introducimos un serial correcto nos salta a la ventana de "Wong

Password", pero nada es perfecto :-)

- Otro metodo que podemos usar es hacer que esto:

cmp eax,ecx <-- Compara EAX (con la pass verdadera) y ECX (con nuestra

pass)

se convierta en esto:

cmp ecx,ecx <-- Compara ECX (con nuestra pass) y ECX (con nuestra pass)

y asi es mucho mas limpio xDDDDDD

- Para hacer los cambios que hemos dicho podemos meternos en el SICE

(entiendo que sepais usarlo :-) aunque habra una seccion del SICE!!) o usar el

debugger del Win32Dasm y probar que ese salto sea el que compruebe las

Password (ya no siempre va a ser tan facil ;-))

- Pero la cosa no se queda aqui, los programadores son tontos pero no tanto

:-] La mayoria de las veces que hacemos ese cambio en el salto y lo dejamos

fijo (es decir que modificamos el fichero con un editor hexadecimal) lo

corremos metemos nuestro nombre y cualquier codigo, nos dice que esta

regitrado pero... no os emocioneis tanto porque si lo volveis a correr, lo

habitual es que, vesis que os vuelve a pedir registro :-[

- Para subsanar esto ( joe que intelectual me ha quedado) lo que a mi se me

ocurrio en mi tiempo es entrar en la llamada de generaba el codigo real (os

acordais¿?) y ver las Referenced Call que habia. Pues eso, lo haceis y

Page 4: Crackear un programa con serial

apuntais esas Call. Despues nos vamos al SICE y ponemos un BPX en cada una

de esas llamadas y corremos el programa (F5) y antes de empezar... BOOM!!

el SICE salta!!! Pero que pasa!!! Pues que al programador se le encendio una

bombilla y se le ocurrio la MAGNIFICA idea de comprobar el serial correcto

con el que tu has introducido cada vez que corrieramos el programa y el

cambio que nosotros hicimos es tan solo para que nos apareciera una bonita

win que dijera "Thanks for register this program!!" xDDD asi que en el SICE

veremos algo parecido a esto:

CALL 00495870 <-- Llama a la rutina que genera al codigo

cmp eax,ecx <-- Compara el codigo que introdujimos la otra vez con el

verdadero

jne 00424344 <-- Si no es igual MALOOO!!!

- Hay ocasiones en las que el metodo anterior no es posible porque los

programadores, como un pobre medio de proteger sus creaciones, incluyen

gran cantidad de CALLs basura que no siven para nada y que nos volverian loco

si quisieramos parchear todas. Por ello, deduje un nuevo metodo, el cual no

siempre funciona, y es simplemente parchear esa rutina en vez de parchear la

call; me explico, para que leches voy a parchear 5 CALLs (por ejemplo) que

apuntan a una misma rutina cuando puedo parchear la propia rutina!!! ¿Lo

entendeis? Este metodo no siempre funciona, hay veces que provoca error en

el programa pero por probar que no quede ;-D

- Esto es siempre igual asi que una de dos, o cambiamos ese JNE por un JE ó

hacemos que ese CMP EAX,ECX se convierta en un CMP ECX,ECX.

- Despues de comprobar estos cambios y ver que una vez registrado lo

volvemos a correr y sigue registrado usamos el editor hexadecimal para fijar

lo datos. Y despues de tanto rollo ya teneis vuestro primer programa

crackeado!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2. Usar el SICE inmediatamente:

- Despues de haber instalado el programa y haberlo estudiado un poco

entramos en la seccion de registro donde nos pide un nombre y un serial, los

Page 5: Crackear un programa con serial

cuales rellenamos como queramos para ver que pasa. Lo mas habitual es que

nos aparezca una ventanita que nos diga "Wrong Password".

- Lo quee haremos es volver a la ventana de registro e introducir lo datos de

nuevo, pero antes de darle al Ok, nos metemos en el SICE (Control + D) y

ponemos un par de breackpoints: bpx getdlgitemtexta y bpx getwindowtexta

(los que no sepan de que va que miren la seccion de cómo usar el Softice).

Despues le damos de nuevo a Control + D para salir del SICE. Ahora es

cuando le damos al Ok y, lo mas seguro, es que nos salte de nuevo al SICE.

Una vez dentro salimos de las llamadas que hay hasta llegar a algo que posea

esto call [GetWindowTextA] ó call [GetDlgItemTextA]. Una vez ahi lo que

debemos hacer es tracear (F10) hasta que encontremos un salto que nos lleve

a la ventana de "Wrong Password"; eso suele ser un salto condicional, por ello

debemos apuntar la direccion de ese salto.

- Repetimos la operacion hasta llegar al salto apuntado anteriormente y lo

cambiamos como nos venga ( JE --> JNE o asi) y le damos al F5. Lo mas

seguro es que esta vez te salga la ventana de "Thanks for register this

program". Despues de esto, yo solia entrar en el Win32Dasm y hacer lo mismo

que en el paso 1º (con win32Dasm).

- Este metodo nos puede servir para programas que no realizan ninguna

accion, enseñar una ventana o un beep..., si el serial es invalido, por allo no

nos podmeos basar en una cadena como "Wrong Password". Asi con este

metodo podemos ver la direccion en la que se encuentra el escaneo del serial.

-TRUCO: Un truco que descubri (que de truco nada, simple ingenio y pensar),

es que cuando nosotros ponemos un bpx GetWindowTextA despues de

introducir nuestro Nombre, Compañia y Serial, y nos salta, lo primero que

salta no es el escaneo del serial sino el del Nombre, por ello cuando os salte a

la primera dadle al F5 las veces que haga falta (lo normal son 1 o 2 veces mas

como mucho) para llegar al escaneo del serial