Solution pour le crackme
LABO#1 de Kaine
-=¤ Lionel d'Hauenens ¤=-


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... ;)

Lionel d'Hauenens
 

 
Labo - Association Loi 1901 - 04200 PEIPIN - France

Désengagement : Laboskopia se désengage de toute responsabilité quand à l’utilisation ou le mauvais usage qui peut être fait des informations contenues dans son site. Les renseignements contenus dans la publication des Bulletins peuvent changer et évoluer. L'utilisation de ces renseignements constitue l'acceptation des conditions. Toutes utilisations de ces informations se fait au risque de l'utilisateur.