QUAKER.

MyMahj 1.1 FR. (jeu de mahjong)

Logicel PC n°6 Déc98/Janv99.

 

Nous laisserons de côté la recherche du sérial :ce n'est pas le but du jeu.Voici un bon exemple (facile) où l'on va utiliser Softice , W32dasm et un zeste d'hexadécimal .Bref : excellent pour les débutants

Bien....on démarre le prog....

1°: Un zoli nag au démarrage qui nous prévient ...."Les pires foudres de l'enfer vont s'abattre sur vous si vous ne cotisez pas" (sous titrage : Ce programme est SHAREWARE....etc ).

2°: Pendant le jeu , à intervalles réguliers , apparition d'un nag de rappel .

Vous notez sur un bout de papier les phrases utilisées dans les nags.

 Vous ouvrez le prog avec W32dasm.

 On constate qu'il le décompile "file" par "file" ce qui nous indique que c'est un prog 16 Bits

et donc que l'on ne pourra pas le débugger sous W32dasm .

 Vous visualisez dans les "String Data Ref" si y'a kekchoz d'intéressant :

"Version enregistr"

"Ce programme est SHAREWARE"--->Cela ne vous rappelle rien...????

 

 Double click sur l'expression pour atterrir à son emplacement dans le prog.

 On regarde aux alentours (généralement au dessus) si il n'y a pas un saut conditionnel quelconque .

 Pour "Version enregistr" :

 

:0001.816F - 754C - jne 81BD--->(Saut conditionnel : saut si non égalité)

*Possible StringData From Data Seg 002 ->"-Version Enregistr"

:0001.8171 - BF1C1F - mov edi, 1F1C --->(début de la routine :Version enregistr)

:0001................

 

Pas besoin d'être devin pour savoir que le saut va s'effectuer et que l'on va se retrouver en 81BD vite fait bien fait .

 Pour "Ce programme est SHAREWARE" :

Là : idem, nous avons un saut juste au dessus .

 

:0001.8205 - 0F84B700 - je 82C0---> (Saut conditionnel : Saut si égalité)

:0001.8209 - 8DBE0AFE - lea EDI, [bp+FE0A]

*Possible StringData From Data Seg 002->"Ce programme est SHAREWARE; Il peut"

:0001.820D - BE361F - mov si, 1F36

:0001.....................

 

Même raisonnement que pour le précèdent : Le saut doit s'effectuer (enfin....peut-être.....)

 

 Après avoir relever les adresses mémoire des deux sauts (816F et 8205) , vous ouvrez Softice.

 Vous démarrez le debugging et vous arrivez sous l'écran Dos de Softice avec le prog MyMahj chargé. (affichage de : MyMahj11 (01))

 Evidement vous ne pourrez pas poser un BPX avec comme seul paramètre : BPX 816F.

816F est l'adresse mémoire , il vous faut en plus l'emplacement du code segment (CS) qui est différent d'un ordinateur à l'autre .Vous verrez le votre tout simplement sous Softice : Ce sont les quatres premier chiffres des lignes d'instruction . Exemple pour le mien : 0177:816F . Le code segment 0177 est propre à la configuration de mon micro et sera vraisemblablement différent sur le votre. Donc vous poserez le premier BPX sous la forme par exemple : BPX 0177:816F.

(Nota : le 0001 que vous voyez sous W32DASM est propre à W32DASM : N'en tenez pas compte)

 

"VERSION ENREGISTR"

N'oubliez pas de rentrez : "Code on" pour visualiser et noter le code en hexa pour la modification réelle sous éditeur hexa.

 Donc on commence par le premier : BPX xxxx:816F---->Valid (xxxx : votre code segment)

 Touche F5 pour lancer le prog.

 Le prog démarre --->s'arrete sur le BPX---->retour sous Softice.

 Vous voilà devant la ligne xxxx:816F.(surlignée en blanc)

 Touche A--->Valid.

 Entrez la nouvelle instruction pour empécher le saut.(soit JE ou deux NOP)

 Valid---->Echap

 Désactiver le BPX.(BD 01 ou BD*)

 Touche F5 pour relancer le prog.

 Examinons le résultat.....Boooofff........ Toujours les nags.

Ah si.....quand même.....: Il est maintenant inscrit en haut :Version enregistrée à "Please registered". C'est tout...??????...Et Oui ! Bon on met ça de côté .

 On supprime le BPX (BC01 ou BC*)et on passe à la suite (sortez du prog.)

 

"CE PROGRAMME EST SHAREWARE"

 Rechargez le prog et on pose un BPX sur la ligne xxxx:8205----Valid.

 F5----->retour sous Softice

 Modifier l'instruction cette fois-ci pour forcer le saut.(soit JMP soit JNE).

 F5......Et là.....QUE DALLE ! ....DES NEFLES......ZERO POINTE-->Sortie du prog !

 Pas de panique--->Relancez le prog sous Softice--->retour sous DOS (bykoz BPX)---------------->remettez l'instruction originale : je 82C0. Et tout rentre dans l'ordre.

 On va essayé aut'choz. Un BPX sur une API : MESSAGEBOX (MESSAGEBOXA pour un prog 32 bits :à titre d'info).

 On vire le BPX xxxx:8205.

 On pose : BPX messagebox---->Valid.

 Relance du prog---->Bing....retour sous DOS à la ligne : xxxx:82A5.

 On regarde ce qu'il y a dessus...Tiens...Tiens.... un saut conditionnel à xxxx:8294.

 On pose un BPX dessus---->relance du prog---->retour sous Softice---->modif de l'instruction (forcer le saut). Desactiver les BPX.---->F5......

 C'était le bon ! Plus de nag au démarrage .

 

LE NAG QUI APPARAIT PENDANT LE JEU.

Bien kesskisspass : On a un nag qui apparaît apparemment à intervalle régulier.

Et on a une horloge (Spécial Thanks à l'auteur) en haut à droite qui nous rappelle le temps passé et qu'est ce que l'on remarque....hein....je pose la question.....alors..... j'attends.....

On remarque que l'apparition du nag se fait à : 30 secondes ; 1mn et 30 secondes ; 2mn et 30 secondes...etc....etc....Donc on peut penser que le "30" a une quelconque influence sur l'apparition du nag.....Vous me suivez.??????

 Retour sous W32DASM.

 Donc on vérifie si il n'y a pas une compaison (cmp) ou un test avec... avec... 30 mais attention nous ne travaillons pas en décimal mais en hexadécimal .

 Il faut donc rechercher une comparaison avec 1E (représentation hexa de 30 ).

 Vous desassembez sous W32DASM le prog--->Search---->Find Text--->entrez : 001E

 Et Oooooh....Miracle il y en une et une seule : (comparaison)

 0001:7B2F - 66833EA6191E cmp dword ptr [19A6], 0000001E

 On se jette sur le saut conditionnel en dessous : on note !

0001: 7B35 - 750B - jne 7B42

 Retour sous softice.

 BPX sur xxxx:7B35---->Valid---->F5---->retour sous DOS

 Forcez le saut (jmp) .Desactivez le BPX car le prog passe continuellement sur cette comparaison.

 Et voilà : plus de nag.......

EPILOGUE.

Il ne vous reste plus, sous un éditeur hexa quelconque, qu'a modifier les octets coupables.

Profitez en pour remplacer "Please register" par votre nom.

THE END (sniff...).

 RETOUR