Lors de la rencontre du 17 avril
2006, Kaine nous avait pondu deux crackmes fort sympathiques.
Ces crackmes ont été codés dans
le seul et unique but de nous permettre d'illustrer
certaines situations.
Le crackme LABO#1 était annoncé
comme ceci par son auteur :
================================================================
LABO#1
================================================================
- Patcher simplement
le binaire :)
- Eviter de me taper dessus si quelqu'un trouve
le bon pass :p
Kaine
================================================================
|
Regardons donc la routine
start de LABO#1
:
.text:00401000
.text:00401005
.text:00401007
.text:00401009
.text:0040100E
.text:00401013
.text:00401018
.text:0040101A
.text:0040101C
.text:0040101E
.text:00401023
.text:00401028
.text:0040102A
.text:0040102F
label_bad:
.text:00401031
.text:00401033
.text:00401038
.text:0040103D
.text:0040103F
label_sortie:
.text:00401044
.text:00401046
|
public start
start proc near
call Traitement_Licence
test eax, eax
jz short label_bad
push offset Resultat_Licence_Utilisateur
push offset Mask_Verification_KEY
call lstrcmpA
test eax, eax
jnz short label_bad
push 0
push offset Titre_MessageBox
push offset Texte_GOOD
push 0
call MessageBoxA
jmp short label_sortie
; ---------------------------------------------------
push 0
push offset Titre_MessageBox
push offset Texte_BAD
push 0
call MessageBoxA
push 0
call ExitProcess
start endp
.
.
.
|
En regardant de plus prêt le
code de LABO#1, on se rend tout de suite compte qu'il
n'y a strictement rien de difficile. Un seul octet
de modifié et le tour est joué. :)
Cependant, il faut se rappeler que
ce crackme a été développé
afin de permettre d'illustrer certaines situations.
Patcher reste un exercice simple mais trouver la clé
valide devient beaucoup plus ardu ! En effet, la routine
Traitement_Licence réserve
bien des surprises avec au programme :
- code cca
- junk code
- code polymorphe
- VM
Comme vous pouvez le voir, Kaine a vraiment mis le
paquet dans la routine Traitement_Licence.
A travers cet exercice, l'auteur
a tout simplement voulu illustrer le fait qu'il ne
sert à rien de blinder une routine (Traitement_Licence)
alors que la porte de derrière reste grande
ouverte (patch très facile).
Je me suis donc penché sur
la routine qui traite la licence en travaillant uniquement
avec du script IDA. Le script s'occupe de tout nettoyer
et de désassembler la VM. J'ai volontairement
intégré dans le script des messages
demandant à l'utilisateur l'autorisation d'appliquer
chaque action. Ceci afin de permettre à ceux
qui le désirent de faire un nettoyage partiel
dans le but d'étudier du code précis.
Si toutefois, vous désirez
manipuler le script plusieurs fois de suite en appliquant
différentes formules, je vous conseille de
relancer complètement de désassemblage
de l'exécutable.
Ce problème est indépendant de ma volonté.
Je n'ai pas réussi à trouver la fonction
qui permette d'annuler la modification d'octet dans
le listing. ;p
Le script a été développé
sous IDA v4.3 freeware
et devrait fonctionner sur les versions antérieures.
Pour ceux qui n'ont jamais travaillé
sous IDA, j'espère que ce travail vous donnera
un aperçu des possibilités énormes
que propose le développement de scripts. J'espère
aussi qu'il vous donnera envie d'y mettre le nez dedans.
Vous verrez...ça sent bonnnnn :)
Amusez-vous bien :)
Suite à la découverte de la clé
valide, je voulais signaler qu'une plainte a été
déposée contre l'auteur pour diffamation
et déformation :D de la vérité.
L'affaire est en cours... ;)