Cracks-Hacks
Il y a donc un simple test de flag, qui nous envoie chier. Quand vous arrivez sur le test
eax, eax en 00405C7D, sous SI, mettez 1 dans eax (r eax=1), et par enchantement, la version est enregistrée. Ne vous faites pas d'illusion, en redémarrant ACDSee la prochaine fois, vous verrez qu'elle n'est toujours pas enregistrée.
|
Nous savons que le call 004054C0 en 00405C75, a besoin de 2 paramètres placés sur la pile juste avant : c'est le push ecx qui contient le nom entré et le push eax qui contient le reg code. Si vous essayez de tracer cette routine, au début vous vous direz que c'est facile, puis après que c'est chiant, et enfin, vous irez prendre une aspirine, après vous être perdu dans le code
asm.
|
J'ai passé pas mal de temps à essayer de choper mon s/n, mais ça m'a assez pris la tête et j'ai préféré utiliser une méthode brutale.
|
En fait, ACDSee ne créé pas le bon s/n en fonction du nom et le compare au s/n entré, mais il fait la démarche inverse : il chope le s/n que vous avez entré, recompose une partie du nom avec, et le compare au nom entré.
|
C'est parti, accrochez-vous :
:00405C6B 8D44247C lea eax, dword ptr [esp+7C];eax = reg code
:00405C6F 8D4C243C lea ecx, dword ptr [esp+3C];ecx = nom
En esp+7c, on a le s/n et en esp+3c, on a le nom. Evidement, le nom, on s'en tape pas mal. C'est le s/n qu'on va modifier à chaque passage tel que s/n := s/n + 1. Il y a un problème qui se pose d'entrée :
esp+7c ne contient pas le s/n en tant que tel mais le code ASCII du s/n, donc il faudra écrire une routine en asm qui teste si le caractère est égale à ";" (code ASCII de ";" est 0x3A = 0x39+0x01 et 0x39 'est le caractère 9), et si il est égale à ";", on le remet à 0, et on incrémente le caractère à côté (par exple si on a "39", ça donnera "3;" après incrémentation du caractère à droite, et notre routine le transformera en "40" , OK ??).
|
l faut tout d'abord connaitre le nombre de caratères qui compose notre s/n : on va utiliser ecx comme compteur :
(1):
: mov ecx, 0000000A ; ecx = 0x0A = 10
: dec ecx ; ecx := ecx - 1
: mov al, byte ptr [esp+ecx+7C] ; cf ci-dessous
: cmp eax, 00000000
: je (1)
Détails :
s/n : 1 2 3 4 5 6 7 8 9 0
pointe en : [esp+7c] [esp+7d] etc .....
Or [esp+7d] = [esp+7c+1], d'où l'utilisation du compteur ecx [esp+7c+ecx].
On initialise ecx à 10 (9 en fait car on a un dec ecx juste après) pour que le compteur n'aille pas au-delà de 9 caractères ie 9'999'999'999 au max.
Evidemment, ce paramètre est modifiable.
Comme ça après ce premier algo, on a dans ecx le nombre de caractères qui composent notre s/n. Il reste plus qu'à l'incrémenter :
|
précédent
Retour
à l'accueil
suivant
©Copyright Wardog's House
|