Crack:      RECHERCHER:  74 02 33 C0 5F 5E 5B
         REMPLACER PAR:  EB -- -- -- -- -- --


Programme  : ACDSee 32
Cathégorie : Viewer/Browser
PlateForme : Windows 95/NT
Date       : 11h, 27 juin 1998
Version    : v2.1	
Protection : Crack pour la Registration
Fichier    : Acdsee32.exe
Outils     : Soft-ice v2.0
Ou ça?     : CD n°26 de PcTeam / http://www.acdsystems.com
Temps passé: Quelques dizaines de minutes
Cours      : 06

- Menu Help / About / Register. Je met mon nom (Lucifer48) et j'entre un serial bidon
- CTRL + D je met un bpx hmemcpy, re CTRL + D
- Je click sur OK et ça revient sous soft-ice, j'appuie sur F5 (copie du nom en mémoire)
  et je trace via F10 jusqu'a l'affichage de la boîte tant attendue.

XXXX:00403808  B801000000    MOV  EAX,00000001
XXXX:0040380D  E90BFFFFFF    JMP  0040371D
XXXX:00403812  6A00          PUSH 00
XXXX:00403814  A1F4624900    MOV  EAX,[004962F4]
XXXX:00403819  50            PUSH EAX
XXXX:0040381A  689C634900    PUSH 0049639C
XXXX:00403820  FF15304B4A00  CALL [004A4B30]	<------- Méchante bôâte
XXXX:00403826  6882000000    PUSH 00000082

Remarque: si on fait un D 0049639C on aperçoit le texte du message:
"Your name and registration code do not match. Please check your name and code, then try again."
En regardant les lignes du dessus on voit un JMP, forcément si on a entré le bon serial, le
programme exécutera ce jump. On va donc remonter dans le code pour trouver un éventuel
Jx 00403812. (CTRL + UpArrow). On finit par trouver:

XXXX:00403795  50            PUSH EAX             ;notre serial
XXXX:00403796  51            PUSH ECX             ;notre nom
XXXX:00403797  E8E4F8FFFF    CALL 0040380        <---- Call à explorer
XXXX:0040379C  83C408        ADD  ESP,08
XXXX:0040379F  85C0          TEST EAX,EAX
XXXX:004037A1  7E6F          JLE  00403812       <---- Si on saute: mauvais serial
XXXX:004037A3  8D442438      LEA  EAX,[EBP+38]
XXXX:004037A7  8D4C2418      LEA  ECX,[EBP+38]

Je met un breakpoint bpx XXXX:00403795 et j'efface le bpx hmemcpy.
Je suis tenté d'essayer de remplacer JLE par JL. Après le call EAX est null, je tape donc
R EAX=1 et j'appuie sur F5, une belle boîte s'affiche mais je ne suis toujours pas enregistré
correctement. Il va faloir explorer ce call et s'assurer qu'en sortant du call (avant le RET),
EAX=1.
Explorons le CALL 0040380: heureusement pour nous il est assez court et en voilà la fin:
(avant on a testé si le nom est supérieur ou égal à 5 caractères)

XXXX:004030A5  56            PUSH ESI
XXXX:004030A6  6838634900    PUSH 00496338       <--- Pour les curieux, y'a un code: 294378973
XXXX:004030AB  E890250200    CALL 00425640       <--- Call à explorer
XXXX:004030B0  83C40C        ADD  ESP,0C
XXXX:004030B3  83F801        CMP  EAX,01
XXXX:004030B6  1BC0          SBB  EAX,EAX
XXXX:004030B8  5E            POP  ESI
XXXX:004030B9  40            INC  EAX
XXXX:004030BA  A350604900    MOV  [00496050],EAX
XXXX:004030BF  C3            RET

En sortant du CALL 00425640, EAX=0, après comme on peut le voir on compare s'il est égal à 1
et on stocke la valeur en mémoire.
Explorons le CALL 00425640:
On trace via F10, les premiers calls renvoient EAX<>0 (longueur du serial,nom...), on s'inquiète
pas et on continu (à mon avis on doit être dans la fabrication du bon serial),
on finit par arriver à la fin du call:

XXXX:004256DB  83D8FF        SBB  EAX,-01
XXXX:004256DE  85C0          TEST EAX,EAX
XXXX:004256E0  B801000000    MOV  EAX,00000001
XXXX:004256E5  7402          JZ   004256E9         <--- nous y voilà
XXXX:004256E7  33C0          XOR  EAX,EAX          <--- méchante instrucion
XXXX:004256E9  5F            POP  EDI
XXXX:004256EA  5E            POP  ESI
XXXX:004256EB  5B            POP  EBX
XXXX:004256EC  81C484000000  ADD  ESP,00000084
XXXX:004256F2  C3            RET

C'est donc ici que ce décide la valeur de EAX (0 ou 1), on remplace le JZ par un JMP et zou
ça marche on est bien totalement enregistré.
Remarque: il y a 1000 autres façons de cracker le soft mais j'essaye toujours dans la mesure du
possible de patcher le moins d'octets possible (on ne sait jamais).
N'importe quel serial est valable.