PiXator
Messages postés16Date d'inscriptionlundi 27 mai 2002StatutMembreDernière intervention12 novembre 2004 13 nov. 2004 à 11:30
la raison est que au lancement du prog le 0x75 n'est pas initialiser
tant que on n'a pas un 0x75 on attent et on reesaye
cs_thebigbang
Messages postés196Date d'inscriptionvendredi 21 décembre 2001StatutMembreDernière intervention25 juillet 2006 15 nov. 2003 à 19:41
J'ai oublié:
Pourquoi as tu mis un while ? il me parait inutile
A la limite tu vérifies si tu vas écrire au bon endroit avec un if, mais pourquoi une boucle ? De toutes facons, soit tu vas écrire au bon endroit et dans ce cas, la boucle n'est exec qu'une fois. Et si tu n'es pas au bon endroit, ca remplacerait le prochaine JNZ
Mais je ne connais pas tout en la matière, peut être qu'il y a une raison, et j'aimerais bien la connaitre
Ciao
Bigbang
cs_thebigbang
Messages postés196Date d'inscriptionvendredi 21 décembre 2001StatutMembreDernière intervention25 juillet 2006 15 nov. 2003 à 19:25
Il a su quelle adresse modifiée en désassemblant le crackme (avec w32dasm par exemple)
Mais moi j'ai essayé, et ca ne marche pas. On a ca :
:0040109D 85C0 test eax, eax
:0040109F 7522 jne 004010C3
:004010A1 6A40 push 00000040
* Possible StringData Ref from Data Obj ->"Registered program"
|
:004010A3 6880514000 push 00405180
* Possible StringData Ref from Data Obj ->"Correct registration key !
Thank "
->"you !"
|
:004010A8 6858514000 push 00405158
:004010AD 50 push eax
Ce qu'il se passe, c'est que EAX sert à la fois :
- de vérification du pass. 0 si le bon pass, 1 si le pas bon. Donc le TEST/JNZ saute sur le bad boy si EAX=1
- et a besoin d'être a zéro pour l'affichage de la messagebox
Donc dans la source du memory patcher, ce n'est pas simplement en remplacant le JNZ par un JE qui va nous arranger. Il y a des crackmes où il suffit de faire ca, mais ici, lê même EAX est utilisé dans l'appel à MessageBox. Pour voir que ça ne marche pas, il faut se placer dans le cas où le JNZ a été remplacé par un JE et avec un pass faux ie EAX=1.
Dans ce cas, désarme ZF, on ne saute pas mais EAX=1 ! Donc erreur dans l'affichage de la MessageBox
Une solution serait non pas de patcher le JNZ en JE mais le TEST EAX, EAX en XOR EAX, EAX. Dans ce cas, EAX=0, ZF=1 et le JNZ ne fais pas sauter.
Ciao
Bigbang
PS : Dans Win32dasm, les strings ref nous donne direct le bon pass
13 nov. 2004 à 11:30
tant que on n'a pas un 0x75 on attent et on reesaye
15 nov. 2003 à 19:41
Pourquoi as tu mis un while ? il me parait inutile
A la limite tu vérifies si tu vas écrire au bon endroit avec un if, mais pourquoi une boucle ? De toutes facons, soit tu vas écrire au bon endroit et dans ce cas, la boucle n'est exec qu'une fois. Et si tu n'es pas au bon endroit, ca remplacerait le prochaine JNZ
Mais je ne connais pas tout en la matière, peut être qu'il y a une raison, et j'aimerais bien la connaitre
Ciao
Bigbang
15 nov. 2003 à 19:25
Mais moi j'ai essayé, et ca ne marche pas. On a ca :
:0040109D 85C0 test eax, eax
:0040109F 7522 jne 004010C3
:004010A1 6A40 push 00000040
* Possible StringData Ref from Data Obj ->"Registered program"
|
:004010A3 6880514000 push 00405180
* Possible StringData Ref from Data Obj ->"Correct registration key !
Thank "
->"you !"
|
:004010A8 6858514000 push 00405158
:004010AD 50 push eax
* Reference To: USER32.MessageBoxA, Ord:01BEh
|
:004010AE FF159C404000 Call dword ptr [0040409C]
Ce qu'il se passe, c'est que EAX sert à la fois :
- de vérification du pass. 0 si le bon pass, 1 si le pas bon. Donc le TEST/JNZ saute sur le bad boy si EAX=1
- et a besoin d'être a zéro pour l'affichage de la messagebox
Donc dans la source du memory patcher, ce n'est pas simplement en remplacant le JNZ par un JE qui va nous arranger. Il y a des crackmes où il suffit de faire ca, mais ici, lê même EAX est utilisé dans l'appel à MessageBox. Pour voir que ça ne marche pas, il faut se placer dans le cas où le JNZ a été remplacé par un JE et avec un pass faux ie EAX=1.
Dans ce cas, désarme ZF, on ne saute pas mais EAX=1 ! Donc erreur dans l'affichage de la MessageBox
Une solution serait non pas de patcher le JNZ en JE mais le TEST EAX, EAX en XOR EAX, EAX. Dans ce cas, EAX=0, ZF=1 et le JNZ ne fais pas sauter.
Ciao
Bigbang
PS : Dans Win32dasm, les strings ref nous donne direct le bon pass
17 oct. 2003 à 20:34
8 juil. 2003 à 15:38
je modifirait ca le mois prochain (g un forfait de 10 h cé just)
g pu d'heures :-)
5 juil. 2003 à 18:35
Serait-il possible de declarer toutes les variables en haut du block, et non en plein milieu, c'est illisible !