Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción
Bueno, una vez más nos volvemos a encontrar y esta vez con lo que más nos gusta, el cracking.
Despúes de un descanso que me había tomado del cracking escriboendo tut’s sobre programación,
he vuelto a la carga con el cracking, y esta vez vamos a trabajar sobre el crackme del amigo Yllera.
Considero que es un muy buen crackme para comenzar a explorar el tema de los keygens. Si bien
vamos a crackearlo, también vamos a intentar crear un keygen ya que, en mi opinión, un cracker
debe saber, además de muchas otras, programar y criptografía, son dos cosas fundamentales que un
cracker debe aprender con el tiempo y creo que mi amigo AkirA está de acuerdo con esto, no?.
Debo reconocer que el keygen me ha costado dado que funcionaba de lo mejor en sistemas
operativos Win98, Win98 SE y WinMe, pero no funkba en WinXp, pero gracias a los amigos de la
lista (gracias RedH@wK y Daniel (La Calavera)) he podido solucionar el tema.
reversing_ar@yahoo.com.ar 1
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Comenzemos...
Mov eax,serial_bueno
Mov ebx,serial_malo
Cmp eax,ebx
Jne chico_malo
Algo que da pena.....esto no suele verse, no he visto ninguno, en programas creados por crackers,
dado que el objetivo de los crackers es intentar crear un buen sistema de protección que cueste
bastante trabajo romperlo. Pero esto las empresas no lo tienen en cuenta, solo quieren que pagemos
por su software y la verdad es que dan lástima algunas protecciones que estos programas
comerciales traen. En fin....por lo tanto sabemos que puede que esta sea una tarea ardua, más fácil,
más difícil, pero tengamos siempre en mente que un cracker no busca presisamente hacernos las
cosas fáciles, sino todo lo contrario. Esto lo digo para los que recién se están iniciando en el tema
cracking.....(like me, je ).
Por lo menos nos avisa de algo, así que ya tenemos por donde comenzar. Nos vamos a olly y
abrimos este crackme. Una vez dentro de olly, nos vamos a buscar el mensaje. Hacemos click
derecho sobre la ventana de code de olly y vamos a Search for All referenced text strings y
veremos esto:
reversing_ar@yahoo.com.ar 2
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Ahí lo tienen, el mensaje que estabamos buscando. Lo seleccionamos y le damos a Enter para ver a
donde nos conduce:
Caemos en una zona en la cual hay varios mensajes parecidos a este. Enseguida nos ponemos a ver
cual puede ser el que nos conviene explotar. Si somos buenos observadores, veremos que hay
llamadas a la función GetDlgItemTextA, a la función lstrlenA y por supuesto a MessageBoxA. Ya
sabemos bien para que se usa cada una de estas funciones del api, pero por las dudas se los
recuerdo:
La primera es para tomar datos de un editbox, o sea, datos del teclado, en este caso podría servir
para tomar nuestro nombre y serial. La segunda sirve para calcular la longitud de una cadena, podría
utilizarse en este caso para ver cuantos caracteres tienen nuestro nombre y nuestro serial. Y la
última creo que no necesita presentación, es la aclamada y tan amada MessageBoxA, que lo que
hace es mostrar mensajes.
Si nos fijamos, también, a continuación de las llamadas a lstrlenA hay comprobaciones. Esto quiere
decir que se están verificando las longitudes de cada cadena que introducimos (serial y name), si
pasamos las condiciones impuestas seguiremos adelante con el cálculo del serial, sino nos
mostrarán un mensaje diciendo que nos falta, en el mejor de los casos , claro. Puede ocurrir que no
se no avise de nada y perdamos mucho tiempo tratando de ver porque no funciona el tema.
Este no es el caso, el amigo Yllera nos avisa de cada error que cometemos, por ejemplo. Yo siempre
pongo como datos +NCR y como serial 45561223, ustedes pongan lo que quieran pero respeten el
formato para que puedan seguir la explicación, o sea un nombre con un carácter especial, tres letras
y un serial de 8 caracteres. Ahora pongamos un bp con F2 en la primer llamada a
GetDlgItemTextA, le damos Run (F9) para arrancar y le metemos el nombre y serial, luego le
damos a Probar y veremos que el olly salta en esta parte:
reversing_ar@yahoo.com.ar 3
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Primero vemos, en la parte resaltada con azul, que llama a GetDlgItemTextA para tomar nuestro
nombre, los push de arriba de la llamada son los argumentos que le pasa a la función. Luego
comienza a empujar nuevos argumentos para llamar nuevamente a la misma función, pero esta vez
para tomar el serial. Seguido de esto, en la parte amarilla, llama a la función lstrlenA para tomar la
longitud de nustro nombre, después de esto tenemos un xor y un salto condicional. Esto lo hace para
ver si hemos puesto algo en el edit que correponde al nombre, si no hemos puesto llama a la función
MessageBoxA para mostrarnos el siguiente mensaje:
Si hemos puesto algo, se queda con la longitud de dicha cadena y salta a esta parte:
Lo que hace en esta ocasión es fijarse si la longitud del nombre es mayor que 4 caracteres, sino nos
saca otro mensaje del mismo estilo que el anterior. Ahora si es mayor, vuelve a saltar a esta parte:
En esta parte realiza la misma comprobación, pero esta vez el salto es distinto, es decir, se fija si la
longitud de la cadena que correponde al nombre es menor que 5, o si está por debajo de 5. Este salto
es del mismo tipo que el anterior (JA) pero no tiene en cuenta el signo pero tiene en cuenta el flag
de signo. El tema es que debemos meter un nombre con al menos cinco caracteres.
reversing_ar@yahoo.com.ar 4
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Lo mismo que con el nombre, si tiene más de 4 caracteres, sigue, sino nos saca otro mensaje de
error. En caso de seguir va a esta parte:
Hace los mismo que antes con el nombre, pero esta vez con el serial. Se fija se la longitud del
nombre esta por debajo de 5. Pero en este caso nos afecta dado que nuestro serial tiene 8 caracteres.
Por lo tanto lo que debemos hacer es cambiar el nombre por uno de 5 caracteres o más y el serial lo
dejamos como estaba. En mi caso he elegido seguir con el serial 45561223 y cambiar el nombre a
Reverser.
Vuelvo a reiniciar el crackme y a poner los nuevos datos, una vez que hemos pasado por las
anteriores comprobaciones, vemos que terminamos en la llamada que se encarga de generar el
serial. Esta llamada es la que está en [401137]. Así que no metemos con F7 y veremos esto:
En esta primera parte, lo primero que hace es poner los registros a cero para comenzar con las
operaciones y no tener problemas de que algún dato contenido en dichos registros termine
generando algún error en el cálculo.
Luego compara a EBX con 2, esto lo hace porque va a utilizarlo como variable de control en el
bucle (como contador), si EBX es igual a 2 salta a una instrucción después del RETN para continuar
con el cálculo del serial, sino sigue ejecutandose el bucle. Después mueve el primer carácter de
nuestro serial a AL y lo compara, primero con 30h (48 en decimal; corresponde al valor ASCII del
carácter 0) y luego con 39h (57 decimal; valor ASCII del carácter 9). Básicamente lo que está
haciendo es comprobar si el primer carácter está entre 0 y 9; o sea, si es un número. Si resulta ser un
número, incrementa EBX y toma el segundo carácter y realiza la misma comprobación, sino son
números nos vamos de la llamada y se va todo al coño, je. Una vez que ha tomado los dos
reversing_ar@yahoo.com.ar 5
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
caracteres, EBX se ha incrementado dos veces con lo que toma un valor 2. Por lo tanto sigue en esta
parte:
En esta parte vuelve a limpiar los registros y vuelve a utilizar a EBX como contador, pero esta vez
compara a EBX con 6, así que el nombre debe tener al menos 6 caracteres y no 5 como habíamos
pensado y ya van a ver porque. Va tomando cada carácter del nombre y se fija si los caracteres están
entre 41h y 5Ah que corresponden a los valores ASCII de las letras A y Z mayúsculas, por lo que
deducimos que el nombre debe contener solo mayúsculas. Sigue tomando caracteres hasta que el
contador valga 6, si alguno de los caracteres resulat ser una letra minúscula, un número o un
carácter especial, se termina el bucle y nos saca una MessageBoxA con un mensaje de error.
Pero acá hay una cosa que debemos tener en cuenta. Primero habíamos visto que el nombre debia
tener más de 4 caracteres para pasar las anteriores comprobaciones, pero si ponemos el nombre
REVER, con 5 caracteres, cuando se tome la última R, EBX valdrá 4, y luego se incrementará para
tomar el próximo carácter, con lo que EBX pasará a valer 5. Si hubiera un carácter más (el sexto) se
tomaría, se compararía con 41h y 5Ah y se volvería a incrementar EBX con lo que pasaría a valer 6
y la condición ya sería verdadera, con lo que saldríamos del bucle para seguir el cálculo.
Pero en este caso, si tenemos ese nombre con 5 caracteres, cuando tome el sexto, será un cero (un
carácter nulo) que no está entre el intervalo acotado, por ende terminaríamos saliendo del bucle
antes de tiempo. Por eso decimos que el nombre debe, además de contener solo mayúsculas, tener al
menos 6 caracteres, si hay más no interesa dado que con lo restantes no hace nada, pasa lo mismo
con el serial, debe tener al menos 6 caracteres para que se puedan seguir los cálculos.
reversing_ar@yahoo.com.ar 6
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Veamos que hace en esta ocasión. Vuelve a limpiar los registros y a uitilzar como contador a ECX.
Esta vez la condición para finalizar el bucle es que ECX valga 2. Básicamente, toma el primer
carácter de nuetro serial y lo guarda en AL, luego mueve un 32h (ASCII de 2) en Bl y compara a
AL con Bl, si son iguales incrementa ECX y toma el segundo carácter con el que vuelve a realizar
la misma operación, sino nos saca de la llamada con una linda MsgBoxA.
De aquí sacamos que los dos primeros caracteres del serial deben de ser “22”.
Si todo fue bien, seguimos, sino reiniciamos el crackme y metemos los nuevos datos. Yo hasta hora
llevo esto:
Nombre: REVERSER
Serial: 22561223
Ya de entrada vemos algo sospechoso, la cadena “LATINO”. Bueno, en esta ocasión limpia los
registros nuevamente, luego mueve el string “LATINO” a EDX, compara ECX con 6 (lo utiliza
como contador) si es igual sale del bucle, sino mueve el cuarto carácter de nuetro serial y lo
almacena en AL, luego toma la primera letra de la cadena (“L”) y la almacena en BL, por último,
las compara, si son iguales sigue haciendo lo mismo con los demás caracteres, es decir, ir tomando
caracteres y comparandolos con las letras de la cadena sino mensaje de error. Con esto llegamos a
que nuetro número (22561223) es insuficiente dado que al tomar el último carácter, estaría tomando
un cadena nula, por lo que para evitar problemas en un futuro, pongamos un bp en el inicio de esta
parte, reiniciemos el crackme y metamosle el mismo nombre (REVERSER; o el que quieran
siempre y cuando tenga más de 6 caracteres y este en mayúsculas) y como serial metámosle un
número grande como 220LATINO0123456789 y sigamos con la faena.
Ya tenemos bastante armado nuetro serial, lo que podemos pensar hasta ahora es que puede llegar a
ser un harcoded, pero esperemos al final a ver que pasa. Una vez que pasamos las comprobaciones
correspondientes llegaremos a esta parte:
reversing_ar@yahoo.com.ar 7
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Vuelve a limpiar los registros y a tomar el carácter que quedo enntre el 22 y la cadena “LATINO”,
en este caso tengo un 0. Lo mueve a AL, luego mueve 2D a Bl (ASCII de “-“) y los compara. Acá
se fija si entre el 22 y “LATINO” existe un guión, en caso aformativo, continúa con la generación
del serial, sino chao!!!!.
Nombre :REVERSER
Serial: 22-LATINO0123456789
Veamos que más hace. Si pasamos esta otra comprobación llegamos hasta esta parte:
Primer comprobación:
00401246 > |33DB XOR EBX,EBX
00401248 . |33C0 XOR EAX,EAX
0040124A . |A0 C6314000 M OV AL,BYTE PTR DS:[4031C6]
0040124F . |8A1D B2314000 M OV BL,BYTE PTR DS:[4031B2]
00401255 . |38D8 CM P AL,BL
00401257 . |74 0C JE SHORT CRACKM E1.00401265
00401259 . |C705 D0324000>M OV DWORD PTR DS:[4032D0],0
00401263 . |EB 0A JM P SHORT CRACKM E1.0040126F
00401265 > C705 D0324000>M OV DWORD PTR DS:[4032D0],1
En esta y las siguientes 5 partes realiza algo similar. Va tomando los caracteres restantes del serial
saltándose uno entre medio (parece que está reservando espacio para otro guión ), o sea con el
serial 22-LATINO0123456789, toma el 1, lugo el 2 y así sucesivamente en orden y va tomando las
letras del nombre pero comienza a partir del tercer carácter, luego el segundo, luego primero, luego
el sexto, el quinto y por último el cuarto y los va comparando con lo caracteres del serial. En esta
caso compararía:
1 con V
2 con E
3 con R
4 con S
5 con R
6 con E
Es como si fuera armando el nombre al revés. Ahora veamos las demás comprobaciones:
La segunda:
reversing_ar@yahoo.com.ar 8
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
la tercera:
la cuarta:
la quinta:
y la sexta:
Fijens que después de cada comprobación hay un asalto que da valor a una variable que se está
utilizando como flag según si la comprobación resulta verdadera o falsa.
En caso de que las comprobaciones vayan siendo iguales, mete un 1 en una variable y así con las
seis comprobaciones. Si las seis fueran verdaderas, tendríamos seis 1. Luego de esto, compara cada
uno de los flags son el valor 1, o sea, se fija si las comprobaciones han resultado verdaderas, en
cuyo caso va incrementando ECX. En una última comprobación se fija cuanto vale ECX, si es
menor a 6, nos lleva al mensaje de error, si es igual nos da las garcias y las FELICITACIONES!!!!.
Pero esperen que falta algo, primero veamos las correspondienets comprobaciones:
reversing_ar@yahoo.com.ar 9
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
La primera:
la segunda:
la tercera:
la cuarta:
la quinta:
la sexta:
reversing_ar@yahoo.com.ar 10
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Fijense que está la comprobación de ECX con 6 para ver si nos da las garcias o nos manda al coño.
Si ECX es igual a 6, nos da las garcias, pero en el serial queda algo medio colgado:
Nombre: REVERSER
Serial: 22-LATINO0VERSRE
Fijense que hay un cero entre el nombre invertido y la cadena “LATINO”. Como el programa no
hace nada con ese carácter yo he decidido, por decreto, convertirlo en un guión (“-“) a la hora de
programar el keygen como para que el serial tenga más bonita pinta, ustedes haganlo como más les
guste.
Bueno, por fin hemos llegado al final del crackeo, veamos como nos quedo:
Nombre: REVERSER
Serial: 22-LATINO-VERSRE
Nombre: RICARDO
Serial: 22-LATINO-CIRDRA
Nombre: YLLERA
Serial: 22-LATINO-LLYARE
Nombre: ODRAUDE
Serial: 22-LATINO-RDODUA
En fin...hay muchos.......
reversing_ar@yahoo.com.ar 11
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Programando el KeyGen
Primero debemos ttener bien en claro lo que debemos hacer. Es decir, recordar las condiciones que
teníamos para que el serial fuera válido. Enumeremos las condiciones:
1- El nombre debe tener al menos 6 caracteres. Por los demás no se preocupen total no hace nada
con ellos.
2- Los caracteres del nombre deben estar solo en mayúsculas.
3- El serial debe tener al menos 6 caracteres también.
4- El serial tiene una cadena constante que se repite en cada serial “22-LATINO-“.
5- La última parte del serial está armada con nuetros nombre. Los tres primeros caracteres
corrresponden a los tres primeros caracteres del nombre pero invertidos y los últimos 3 del
serial a los últimos tres del nombre, también invertidos.
Con esto ya estamos en condiciones de que ponernos a programar el keygen. Hay que tener en
cuenta de que cuando no se cumplan algunas de estas condiciones, deberemos informar al usuario lo
que tiene que hacer o no hacer nada. Pero creo que debemos decirle que esta pasando dado que no
estamos programando un crackme y además el pobre no sabrá que hacer.
Así que habrimos nuestro querido RadASM y creamos un proyecto tal como lo veníamos haciendo
hasta ahora.
Ponemos dos edit’s, dos botones, dos static’s y lo que queramos nosotros. Tratemos de que quede
algo similar a esto:
Mov eax,uMsg
.if eax==WM_INITDIALOG
invoke LoadIcon,hInstance,500
mov hIcon,eax
invoke SendMessage,hWin,WM_SETICON,NULL,hIcon
Todo eso es para el ícono, pero no viene al caso. Si quieren miren las teorías de Daniel en las que se
explica muy bien como hacer esto.
reversing_ar@yahoo.com.ar 12
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
.elseif eax==WM_COMMAND
mov eax,wParam
.if eax==1007 ;Si presionamos “Generar”
invoke GetDlgItemText,hWin,1003,ADDR nombre,10 ;Toma el nombre
invoke lstrlen,offset nombre ;Obtiene su longitud
.if eax<6 ;Si es menor que seis
invoke MessageBox,hWin,offset men,offset tit,MB_ICONERROR ;Nos saca un
mensaje
ret ;Vuelve de la llamada
.elseif ;Sino
xor ebx,ebx ;Limpia los registros
xor ecx,ecx
xor edx,edx
invoke lstrlen,offset nombre ;Vuelve atomar la longitud del serial
mov edx,eax ;Mueve dicha longitud a EDX
xor ecx,ecx ;Limpia ECX
sigue: ;Inicio del bucle
mov al,byte ptr ds:[ebx+nombre] ;Mueve un carácter a AL
.if al>=41H && al<=5AH ;Se fija si está entre “A” y “Z”
inc ecx ;Si está en ese intervalo, incrementa ECX
.endif ;Termina la condición
inc ebx ;Incrementa EBX (Contador)
.if ebx!=edx ;Si EBX es distinto de EDX
jmp sigue ;Sigue tomando caracteres
.endif ;Termina en caso contrario
Expliquemos un poco que vinimos haciendo hasta acá. Si hemos presionado el botón de generar,
llamará a la función GetDlgItemTextA, la cual se encargará de tomar la cadena que esta en el edit
cuyo ID es 1003 y la guardará en una variable llamada nombre a la cual le he reservado 9
caracteres. Después toma la longitud de dicha cadena llamando a la función lstrlenA a la cual le
pasamos como argumento la variable “nombre”. Si la longitud de dicha cadena es menor que 6,
pues nos saca una MessageBoxA diciendonos que ingresemos un nombre con al menos 6
caracteres, sino comienza con las comprobaciones pertinentes para generar el serial.
Limpia los registros para que ningun valor intefiera con nustro cálculo. Tomamos nuevamente la
longitud de nuetras cadena y movemos la cantidad de caracteres que tiene a EDX. Volvemos poner
a ECX a cero. Esto se hizo así dado que en WinXp, el KeyGen había tenido problemas de
funcionamiento. Yo cuando lo programe, creí que con solo inicializar ECX antes de la llamada a
lstrlenA era suficiente dado que en mi OS, ese registro no se modifica hasta la primera vez que lo
incrementamos. Pero parece que en WinXp, al llamar a lstrlenA, se vuelven a meter valores en
dicho registro con lo que las comprobaciones posteriores no daban y el programa no funkba, así que
para eso esta ese XOR ECX,ECX antes del inicio del bucle. Pero debo aclarar que en Win98,
Win98 SE y WinME, el programa funcionaba de lo mejor sin ese parche (misterios del amigo Bill,
je ). Sigamos....
Luego damos inicio al bucle, el cual comenzamos metiendo el primer carácter del nombre en AL lo
comparamos con 41h y 5Ah (ASCII de “A” y “Z”) para fijarnos si son solo letras mayúsculas. Si la
letra resulta ser mayúscula, incrementamos ECX (contador secundario) sino incrementamos solo
EBX y tomamos el siguiente carácter con el cual hacemos las mismas operaciones, luego nos
fijamos si EBX vale lo mismo que EDX (ahí habíamos movido la longitud del serial, es decir que se
reversing_ar@yahoo.com.ar 13
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
seguirán tomando caracteres hata que se completen los 6 que corresponden), por último, una vez
que hemos terminado el bucle, nos fijamos si ECX (contador secundario) es igual a EDX (longitud
del serial). Si hemos EDX y ECX valen lo mismo, es decir 6, quiere decir que hemos introducido
solo letras mayúsculas y por lo tanto ECX se ha incrementado 6 veces, sino, quiere decir que algun
carácter no fue lo que esperabamos, por lo tanto nos saca un mansaje pidiendonos que metamos
solo letras mayúsculas.
Lo que hace ahí es fijarse si EDX (longitud del serial) y ECX (contador) son iguales. Si lo son,
llama a la rutina que genera el serial, la cual devolverá en la variable “iserial” la cadena válida para
nuestro nombre y la termina mostrabdo con la función SetDlgItemText en el edit cuyo ID es 1004.
Ahora toca hablar de la parte con la que más me pelié. Nunca antes había programado un keygen
solo, siempre tenía ayuda de alguien, pero esta vez decidí hacerlo solo y tuve que ir probando cosas
hasta que por fin terminé.
generar:
xor eax,eax ;Limpia EAX
mov [iserial],"22" ;Mueve la cadena “22” al la variable “iserial”
mov [iserial2],"- " ;Mueve un guión a la variable “iserial2”
invoke lstrcat,offset iserial,offset iserial2 ;Concaetna (junta, une) las dos cadenas anteriores
mov [iserial2],"TAL" ;Mueve la 1º parte de la cadena “LATINO”
invoke lstrcat,offset iserial,offset iserial2 ;La concatena con lo que hay en la variable “iserial”
mov [iserial2],"ONI" ;Mueve a “Iserial2” la 2º parte de la cadena “LATINO”
invoke lstrcat,offset iserial,offset iserial2 ;Vuelve a concatenar con “Iserial”
mov [iserial2],"- " ;Agrega el guión que faltaba
invoke lstrcat,offset iserial,offset iserial2 ;Y lo concatena
invoke lstrlen,offset nombre ;Toma la longitud del nombre
mov al, byte ptr ds:[nombre+2] ;Toma el 3º carácter del nombre
mov [serial],eax ;Lo mueve a la variable “serial”
invoke lstrcat,offset iserial,offset serial ;Y lo concatena con la cadena que ya tenemos armada
invoke lstrlen,offset nombre ;Toma la longitud del nombre
mov al, byte ptr ds:[nombre+1] ;Mueve el 2º caracter
reversing_ar@yahoo.com.ar 14
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Antes de que digan algo, quiero que sapan que esta es la manera en que me fueron saliendo las
cosas, yo iba probando y lo que no me funcionaba lo reemplazaba por otra cosa y volvía a probar
hasta que me funcionó.
Tal vez haya una manera más limpia de hacer este trabajo, pero por ser que estamos comenzando
creo que es bastante, je . Tal vez podríamos haber evitado llamar tantas veces a lstrlenA y hacerlo
todo dentro de un bucle. Pero bueno....sigamos con la explicación de cómo lo hice yo.
Primero utilizo dos variables para ir concatenando la cadena constante que tiene el serial, toda la
primera parte la tuve que hacer así porque no sabía como hacer para mover toda la cadena entera y
solo podía mover de a tres caracteres, sino el RadASM no ensamblaba el proyecto. El amigo
RedH@wK mando a la lista un ejemplo de cómo se hace, se los pongo tal cual:
.in
.m
in
e
vlsik
fde
o v e,1
afS
V =
x la
sriw=
W
t0
b
P
1
eIrm
c
D
g
la 0e_T
M
t,oC
M
O
fs
e
tV
x M
riA
a,h
W N
bD
in
le,1
o
0
fs2
e,o
tvfs
ae
tr3
1V
2;lo
rm
aio
le
b
m
v
;o
v
ae
sm
ao
s
rilb
q
eu
h
e
ayen
varib
lealed
it
Creo que esta es la forma correcta de hacerlo, pero como yo estaba solo, eran como las 5 de la
mañana y no podía salir a pedir ayuda a ningún CrackLatino, me puse a probar de diferentes
maneras y así fue como salió, jeje.
reversing_ar@yahoo.com.ar 15
Tutorial nº 33 – by +NCR/CRC! [ReVeRsEr] Junio 2004
Lo único que se va haciendo después es ir tomando los caracteres en el orden que ya vimos cuando
crackeamos el programa y los vamos uniendo con la cadena constante que debe aparecer en todas
las cadenas válidas.
Despedida
Creo que ha sido un tut muy largo, por lo menos para mí, así que no tengo nada más que decir.
Agradecimientos
En primer lugar agradecer al amigo Yllera por su crackme con el cual he aprendido mucho y me he
divertido también. Luego agradecer a las personas de siempre, Ricardo Narvaja, RedH@wK,
Shadow&Dark, Daniel, Juan José, COCO, Morales, Odraude, Flipi, Degete, Kaod, _Primax, AkirA,
Joe Cracker, Pr@fesorX y a toda la demás gente de la lista!!!.
Saludos....
+NCR/CRC! [ReVeRsEr]
Junio de 2004
reversing_ar@yahoo.com.ar 16