BuSCaR eL SeRiaL De uN PRoGRaMa
En esta seccion nos dedicaremos tan solo a captar un serial valido para poder registrar nuestro programa victima. Aqui nos os podre decir la cantidad ingente de metodos que existen porque no sabria deciros, este es una de las secciones en la que vuestra imaginacion, perspicacia, astucia... mas influyen, por ello os dire unos metodos muy generales, los cuales no podreis seguir paso a paso ante un programa pero que os pueden ayudar un poquito, asi que mepecemos ya.
Para empezar corremos el programa, nos vamos a la seccion Registrar
e introducimos nuestros datos:
Name: Mr_Burns
Serial: 12345
Antes de "darle" al Ok debemos entrar en el SICE (Control + D) y poner los bpx que nos interesen, es decir, en este caso quemos que nos detecte cuando el programa va a leer los datos que hemos introducido para que genere la clave verdadera y la compare con la mia, por ello pondremos estos dos BPX: bpx GetDlgItemTextA y bpx GetWindowTextA; despues de poner los breakpoints salimos del SICE (Control + D), para entrar de nuevo en el programa y "atizarle" al Ok. Inmediatamente te saltara al SICE. Un vez dentro debemos navegar por el codigo hasta estar en el address correcto (espero que reconozcas eso!! ;-)): este address puede ser del tipo:
Call [USER32!GetWindowTextA] ó Call [USER32!GetDlgItemTextA]
mov ecx,[ebp+10]
push FF
Call XXXXXX
jmp XXXXXX
Despues de ver esto debemos continuar traceando hasta que veamos que no hay ningun RET cerca o que se hallan tomado ya todos los datos que nosotros hemos introducido (Mr_Burns y 12345). Despues de esto hay que ir estudiando el codigo:
- Podemos caminar
por el codigo y buscar el salto que nos lleve a la ventana de
"WrongPass" que sera del tipo:
Call XxXxXx
test eax,eax
jne "WrongPass"
Aqui nos deberiamos haber dado cuenta que esa llamada es la que debe generar el serial correcto y lo debe comparar con el nuestro; si al comparalos son iguales devuelve en EAX = 0, en caso contrario devuelve 1, con lo que en testeo y el salto nos llevara al error. Asi que entraremos en esa CALL a ver que hace. Estas CALL no suelen ser simples, es decir, que no generan el codigo directamente y lo comparan con el nuestro sino que a su vez poseen otras llamadas y saltos condicionales. Puede que en esa llamada no este la rutina que genere el serial verdadero pero puede que posea otra CALL que si que lo haga. Unos de las rutinas mas especiales que he visto que genere el codigo es la del mIRC (Name: Mr_Burns Serial: 6066-644328): Comprobaba que tu serial poseia un guion (2D), si no lo tenia devolvia EAX=1 y salia, luego generaba la 1º parte del serial (6066) y lo comparaba con el nuestro, si era diferente error e idem con la segunda parte del serial. Por ello, estas CALL que estamos comentando poseen un estramado de codigos que comprueban todo tipo de cosas bastante importantes.
- Despues de este
buen ROLLO que os acabo de echar irmos al grano. Debemos estudiar
destro de esta CALL y observar todo tipo de operaciones aritmeticas
(- + * / ) que se hagan porque puede que sea la rutina que genera el
codigo, es este caso no nos debemos fijar en las operaciones que se
hacen (de ese tema trataremos en la seccion de KeYgEnS) sino tan solo
observer el resultado final de esa serie de operaciones. Por ejemplo:
0001 Call XxXxXx <--- Calcula la longitud del nombre y lo guarda en AH
0002 Cmp ah,8 <--- Compara AH con 8
0003 jl [Mal] <--- Si es menor a 8 salta ERROR
0004 mov eax,[Nombre] <--- Guarda en EAX = Nombre (Mr_Burns)
0005 Call XxXxXx <--- Llamada que genera el serial verdadero!
0006 mov ebx, [Serial mio] <--- EBX = 12345
0007 mov ecx,[Serial verdadero] <--- ECX = Serial valido para "Mr_Burns"
0008 cmp ebx,ecx <--- Los compara
0009 je [Registrado!!!] <--- Si son iguales "tas" registrado
0010 ;A joderse <--- Sino te aguantas xDD
Por ejemplo en este caso tan sencillo lo unico que debriamos hacer es en 0007 tipear d ecx para obtener el serial verdadero ;-)
Existen gran
cantidad de metodos pero cada uno es diferente del otro, asi que
investiga por tu cuenta, que con la practica se llega a ser un buen
cracker no siguien a raja-tabla un tutorial ;-)
Este metodo que
os he presentado es el mas sencillo y habitual en programas con una
pobre proteccion, otros porgramas mas protegidos no poseen la
password verdadera tan a la vista; en vez de generar la clave entera
y compararla con la nuestra generan el primer valor y lo comparan,
luego el 2º etc etc etc Por ello estudiad con MUCHA paciencia el
codigo (os digo lo de la paciencia porque es algo que me ha costando
entender, al principio entraba a saco en el codigo sin mirar siquiera
el codigo buscando ciegamente el serial verdadero hasta que me di
cuenta que no servia de nada :-D).
Esta
parte del tutorial la veo un poco coja pero no sabria que mas metodos
poneros ya que cada uno es especifico a un programa o una
circunstancia y aqui de los que hablamos es de CRaCKiNG eN GeNeRaL y
no de casos concretos.