SUJET |
Crack de
MapDesigner 2.0 pro |
TYPE DE PROTECTION |
Crypted ASPack, nag-screen, save
désactivé |
OUTILS UTILISES |
UnAspack, procdump,W32dasm85, SoftIce, Hiew |
Intro :
Ce crack requiert quelques bases
en cracking mais le niveau reste assez faible et est idéal pour s’initier aux
programmes cryptés.
Car oui ce programme est crypté et c’est vraiment la
seul difficulté pour le cracker et c’est ce qui donne l’intérêt de ce cours car
sinon le schema de protection du programme est tout ce qu’il ya de plus
classique (une variable detemine si l’on est enregistré et cette varaible est
testé à differents endroits).
Je vous conseille de lires les
cours de Christal et Teeji sur les exe crypte et packed, pour ma part je me
suis largement inspire de celui de Teeji que je salut bien bas
Tout d’abord il est hors de
question de décrypté ce prog de le cracker et puis basta….
Le but ici est de créer un patch
qui permettra de cracker la version originale (crypté).
Voici comment s’exécute un
programme crypté :
-
L’entry-point pointe vers les
instructions qui vont servir à décrypter le prog
-
Le programme se décrypte et se charge en mémoire
-
Une fois totalement
décrypté, il saute vers les routines normales d’exécution du prog
Rem : Un entry-point, point d'entrée en français, est une adresse
virtuel relative correspondant à l'adresse de la première instruction que le
programme doit exécuter. Cette adresse est inscrite dans le PE-Header de
l'exécutable.
Phase 1 / Decryptage
D’abord comment sait-on que le programme est
crypté ?
Il y’a plusieurs symptômes :
-
quand on désassemble le
prog avec W32Dasm celui ci ne contient aucune ressources, ni import, ni strings
datas references
On pourrait chercher les bytes a patcher
uniquement sous softice qui lui lit le prog en memoire donc décrypté, mais on
va se servir de W32Dasm et de ses précieuses datas string références mais pour
cela va falloir les decryptés et les rendre lisibles….
On a le nom du crypteur, suffit de prendre son
decrypteur et voilà le boulot…. La plupart des crypteurs possèdent leur
descripteur que vous pourrez trouvez aisément sur des sites de cracks outillés.
On décrypte le prog à l’aide de
UnAspack et on obtient un zoli exécutable de 1140 ko décrypté contre 421
(crypté).
Sous proc-dump on va éditer les caractéristiques des sections
afin de rendre les ressources lisibles.( c’est ce qui empêche W32Dasm d’obtenir
le code, les strings datas références, les imports ,etc.. )
-
on lance ProcDump
Phase 2 / Le Crack
Voilà, Maintenant on
prend W32Dasm85 je dis bien 85 car c’est la seul version qui ne soit réellement
efficace en ce qui qui concerne les Strings Datas References.
Si vous essayé avec une version plus recentes vous n’en trouverez que tres peu et aucune
interressante tandis que sous la version 85 ou 6 vous aurez droit à une belle
liste ou vous pourrez trouver pas mal de strings dont une particulierement
interressante : [unregistered version] : Le pitit mot dans la barre
de titre…
On click sur cette
string et on obtient 2 references : Voici la premiere
On voit que celle ci est appelé par un jump
à l’adresse 4D533F, on va voir a cette adresse et on obtient ceci :
Ici on voit clairement qu’une adresse mémoire :
4E1128 (qui représente une variable de type boolean) est comparé avec 00 et si
la variable = 00 on saute vers la routine du code qui nous déclare unregistered.
On va effectuer une recherche sur cette variable : 4E1128 , on obtient plusieurs
références, Ce qui nous intéresse c’est les endroit ou cette variable sera
initialisé donc avec les instructions MOV. On obtient 4 references dont une ou
elle initialisé avec 01 et trois ou elle est initialisé avec 00
Sachant que 00 nous envois vers unregistered , il
va falloir modifié ces trois adresses afin que la variable soit initialisé avec
01.
On réalise cette opreation sous Hiew :
-
on fais F4 puis Decode
-
F3 pour edit et F2 pour
passer en mode assembleur
On lance le programme, et la on est registered,
Le nag-screen à sauté et l’on peut sauvegarder alors que cette option n’etait
pas active.
Et voilà le programme est cracké.
Phase 3 / Realiser le pacth
Maintenant comment faire pour realisé un patch
qui pourrait modifié l’exe crypté et non pas celui décrypté ( ce qui serait
trop simple )
La on à plusieurs choix , si vous parvenez a trouver le même crypteur utilisé
que pour l’original de ce programme, il vous suffira de re-crypté votre
version cracké et ainsi de comparé la
version non-cracké avec la version cracké (les deux cryptés sous le même
cryptage : ASPack 2.00) afin de determiner les offset à modifié anisi ke leur valeur.
N’ayant pas trouvé cette version d’ASPack et comme ca serait aussi trop simple
on va procéder autrement :
-
on va rechercher un endroit
inutilisé dans l‘executable (crypté) afin de pouvoir y ajouter des instructions
-
on va rechercher sous
SoftIce le moment (l’adresse) ou au demmarrage le programme s’est totalement
decrypté en mémoire
-
on va placer un jump à cette
adresse qui sautera vers des instructions que nous allons ajouté dans l’espace
libre
-
on va ecrire nos
instructions qui modifieront le programme qui sera alors sous la forme decrypté
-
à la fin de celles-ci on
replacera un jump qui retournera au code normal afin de suivre le deroulement
du prog
Rechercher un endroit inutilisé :
Pour cela on se sert d’un éditeur hexadecimal
classique, comme HexWorkShop.
On ouvre le programme (crypté je rappelle) et on cherche un espace inutilisé assez
grands pour contenir quelques lignes de code ; Les endroits libres sont les séries
de 00 dans le fichier.
On note l’adresse ou commence cette suite de 00, c’est la que l’on va ajouter
nos instructions.
Pour ce tutorial j’ai pris choisi l’offset 69070
.
Rechercher sous SoftIce le moment (l’adresse) ou le prog a fini de
se décrypter
C’est la partie la plus longue et la plus
subtile.
En effet, le programme va se décrypté en mémoire et une fois cela accomplie il
va sauter vers son déroulement normal.
C’est ce moment matérialisé par une adresse que l’on doit trouvé, pour cela l’expérience
et une bonne analyse sont les seules armes dont vous disposez.
Le programme se decypte par une suite d’instructions
qui ont été ajoutés lors de son cryptage. Ce sont en fait une ou plusieurs
boucles qui vont parcourir le listing en y remplaçant les valeurs Hexa crypté par
elle qui represente le listing original decrypté . Une fois le listing
totalement décrypté on sort de la boucle et on saute vers le debut du programme
qui va s’executer normalement.
Par l’intermédiaire du Loader de soft-ice on
lance la programme, On atterrit à l’endroit ou le decryptage va commencé on à
plus qu’a tracer avec F10 jusqu'à trouvé
le saut qui détermine la fin du décryptage.
Il y’a pas mal de signes, différents selon le
type de cryptage, qui nous aident à
repéré le début et la fin de cette séquence de décryptage :
Bien sur il y’a beaucoup de variantes mais ce n’est
pas le but de ce tutorial de faire un listing de toutes les techniques employé.
Pour Résumer en gros et faire une généralité la plupart commence par sauvegarder
tous les registres sur la pile par l’instruction PUSHAD , ensuite on parcours des boucles facilement identifiables
puisque les instructions se répètent plusieurs fois, et on fini par restaurer
les registres par l’instruction POPAD et
tout de suite après on saute vers le déroulement classique du prog.
C’est
exactement ce que fais ce Programme :
Le loader break sur la premiere instruction qui
est PUSHAD.
Il parcours ensuites quelques boucles (j’ai pas compté mais 2 ou 3)
Apres il restaure les registres avec
POPAD
Et saute vers le debut des instructions de d’execution du prog
On note cette adresse ainsi que l’adresse ou sautera
le jump :
005314F4 jnz 005314FE
Placer un jump à cette adresse afin de sauter vers nos instructions
Sous Hiew cette instruction est sous cette forme la (les adresses ont
été convertis) : .005314F4 jne .00067EFE (c’est cette adresse converti k’il faudra indiké)
On remplace donc celle-ci par :
005314FA jmp 69070 // 69070 étant l’offset
ou commencera nos instructions
Ecrire nos instructions qui modifieront le programme qui sera alors sous
la forme decrypté
Toujours sous Hiew on se rend à l’offset 69070
Et on tape nos instructions qui vont modifier les
3 adresses que nous avons relevé pour réaliser le crack :
MOV al,01
// place dans al
la valeur 01 (la bonne valeur qui nous met registred héhé)
MOV [4D2D5A],al // remplace l’adresse
4D2D5A le 00 par le contenu de al => 01
MOV [4D2D63],al
MOV [4D2D6C],al
JMP 67EFE // Saute vers le deroulement normal
du prog
Y oila, on test et c Registered,
Ne reste plus avec l’aide d’un patcheur de créer un
Patch en comparant le fichier original et celui que nous venons de faire Et
nous aurons realiser un Vrai patch qui modifiera bien l’exécutable crypté.
Sur ce, la pratique pour ce genre de crack est primordiale
et c’est par l’exeprience que vous aurez de plus en plus de faciliter à contourner
ce genre de protection qui à tendance a se généralisé.