|
Mostrar Mensajes
|
Páginas: 1 2 3 [4] 5 6 7 8 9
|
31
|
Programación / Ingeniería Inversa / Re: Crackme1 por p[i].
|
en: 12 Julio 2006, 18:14 pm
|
pos ahi ya depende de lo que vayas a guardar, en este caso e usado la variable DATA que lo que hace es almacenar el contenido de los registros que son DWORD asi que DATA tambien sera DWORD
|
|
|
32
|
Programación / Ingeniería Inversa / Re: Crackme1 por p[i].
|
en: 12 Julio 2006, 18:07 pm
|
solo copias ASM cuando es una parte que vas a usar en tu programa, para eso tienes que tener claro que es lo que hace cada cosa y si tienes claro que es cada cosa entonces no deberias tener problemas para saber que coger...
en este caso e copiado el CALL completo solo e quirtado PUSH EBP // guarda la posicion del stack ... ... ... POP EBP // recupera la posion del stack RET //vuelve del call
y las e quitado xk se que mi compilador de C++ agrega esa parte auntomaticamente en todos los CALL y si esta doble puede dar problemas logicamente...
|
|
|
33
|
Programación / Ingeniería Inversa / Re: Crackme1 por p[i].
|
en: 11 Julio 2006, 22:41 pm
|
La verdad no me e complciado mucho la vida, esta en mfc para terminar rapido y practicamente imita el codigo del CrackME al darle al boton se ejecuta esta funcion
void Cpickme01Dlg::OnBnClickedGenerate() { char key[21]; key[0]=rand()%25+'A'; //toda la clave depende del primer caracter asi que si queremos uno aleatorio debemos empezar por generar la primera letra aleatoria (como el resto del serial queda en mayusculas ahi genere una mayuscula para que quede mas bonito xD) int x; for(x=1;x<19;x++) //el CrackMe hace un loop que es mas o menos este solo que despues de llamar a la funcion que efectua operaciones con el caracter comprueba que el numero que le sigue es = que el que devolvio dicha funcion, asi que yo se lo asigno al siguente { DATA=(key[0]+x); getnext(); //la funcion que hace las operaciones la e copiado textualmente ya que hace exactamente lo que yo quiero key[ x ]=DATA; } key[18]=0; //aqui ya temeos la key lista, fixeamos la string ya solo queda mostrarla.. ver.Format("%s",key); UpdateData(false);
}
void getnext() { _asm{
MOV EDX,DATA MOV EAX,EDX SHL EAX,06h ADD EAX,EDX MOV DATA,EAX MOV ECX,DATA MOV EAX,0B60B60B7h IMUL ECX LEA EAX,DWORD PTR DS:[EDX+ECX] MOV EDX,EAX SAR EDX,06h MOV EAX,ECX SAR EAX,01Fh SUB EDX,EAX MOV EAX,EDX IMUL EAX,EAX,05Ah SUB ECX,EAX MOV EAX,ECX MOV DATA,EAX L021: CMP DATA,40h JLE L024 JMP L026 L024: ADD DATA,10h JMP L021 L026: MOV EAX,DATA }
}
|
|
|
36
|
Programación / Ingeniería Inversa / Re: CrackMe03 by x4uth
|
en: 9 Junio 2006, 11:31 am
|
esa es la idea, no tengo que darle flag write con un alocar un pedaso de memoria basta, el problema es que hay instrucciones que usan mas bytes que otras y si no sabes que intruccion va a haber toncs no sabes cuantos bytes tienes que leer, si cortas una instruccion por la mitad la cagaste..
|
|
|
37
|
Programación / Ingeniería Inversa / Re: CrackMe03 by x4uth
|
en: 8 Junio 2006, 09:24 am
|
si bueno el tema no es con que metodo se leen los bytes, en ese CrackMe la intruccion que se salta esta escrita, el problema es que la instruccion varia segun las versiones del kernel, se podria identificar el kernel segun los bytes o incluso hacerle un checksum pero ad+ de ser un coñaso sigue sin ser compatible al 100%
|
|
|
38
|
Programación / Ingeniería Inversa / Re: CrackMe03 by x4uth
|
en: 7 Junio 2006, 09:25 am
|
muy bien , a si sacas un serial ahora.. por que salia error en 98 y algunos xp que no tenian el sp2 :
Bueno por que x4uth sumaba unos bytes para que se pasara el bp que ponia el ollydb a las librerias, y esas librerias por ejemplo el kernel3.dll son diferentes a las de 98 y xp sin sp2, bueno es un metodo anti bp hace tiempo hice un fuente con la misma tecnica en el foro rvlcn si, los bytes despues los recostruia en este caso manual, tenia pensado hacer un ReadProcessMemory de esos bytes y ejecutarlos en mi programa antes de saltar pero no se como distinguir el final de una instruccion xk si pillas una instruccion a la mitad te quedas=, alguna idea?
|
|
|
|
|
|
|