Date de publication : mardi 20 juin 2006
Auteur : BeatriX
AntiHack est un binaire codé en Visual Basic 6.0. Pour cette raison, il pose une réelle difficulté d'analyse. Néanmoins, nous disposons actuellement de tools très performants pour nous aider à comprendre le fonctionnement de tels binaires.
Je ne citerai ici que les deux qui me semblent vraiment utiles : P32Dasm qui permet de récupérer les adresses des méthodes attachées à un objet.VB Decompiler lite qui permet de récupérer les routines utiles employées dans un tel binaire.
Dans le principe, AntiHack calcule un hash MD5 sur le mot de passe entré (un peu modifié) et le compare à un hash MD5 hardcodé. Ceci peut se représenter de la façon suivante :
Si MD5(mot de passe) == MD5_hardcodé ALORS Good boy
Autant dire que ce challenge est difficile parce qu'il nécessite de BruteForcer un hash MD5 pour récupérer le message d'origine. Je ne vais d'ailleurs pas ici tenter cette expérience (on doit probablement obtenir quelquechose en utilisant des Rainbow Tables mais je ne dispose pas de ce genre de tables). Je vais donc étudier ce binaire pour proposer un patch pour qu'il accepte tous les mots de passe entrés.
Commençons le travail en utilisant les outils P32Dasm 2.3 et VB Decompiler lite.
C:\AntiHack.exe - VB Decompiler lite Compiled to Native Code SubMain Address: 4055AF Object: Label1 Function Form__4039C3 Address: 4039C3 Function Form__403CC9 Address: 403CC9 Function Form__403A86 Address: 403A86 Function Form__4038B4 Address: 4038B4 Object: ModProc Object: Modstr Object: ModFunction Object: ModVerif Object: Seb Function RegisterA_40672D Address: 40672D Function RegisterB_4067E1 Address: 4067E1 Function RegisterC_406895 Address: 406895 Function RegisterD_406949 Address: 406949 Function DSTHS_4069FD Address: 4069FD Function unknown_406D66 Address: 406D66 Function GetValues_407384 Address: 407384 Function unknown_40751C Address: 40751C Function SEBa_4078EE Address: 4078EE Function SEBb_409ACD Address: 409ACD Function SEBd_406BD1 Address: 406BD1 Function unknown_406F49 Address: 406F49 Function unknown_407BE3 Address: 407BE3 Function unknown_4096AA Address: 4096AA Function unknown_4097FF Address: 4097FF Function unknown_4098B5 Address: 4098B5 Function unknown_40996D Address: 40996D Function LLtR_409A1A Address: 409A1A Function unknown_409BF0 Address: 409BF0 Function unknown_409CBE Address: 409CBE Function unknown_409DE0 Address: 409DE0 Function unknown_409E81 Address: 409E81
Nous constatons qu'à l'objet label1 est attaché 4 routines commençant en 4039C3, 403CC9, 403A86 et 4038B4.Nous remarquons également l'existence d'un module Seb.cls qui est composé de nombreuses routines et notamment RegisterA, RegisterB, RegisterC, RegisterD, DSTHS, GetValues. Enfin, nous disposons de la routine d'initialisation du projet VB (SubMain) qui débute en 4055AF.
Reprenons le même travail d'analyse avec P32Dasm :
File: C:\AntiHack.exe P32Dasm v2.3 VB6 Application detected ... NCode Seb Events: 1. RegisterA 2. RegisterB 3. RegisterC 4. RegisterD 5. DSTHS 7. GetValues 9. SEBa 10. SEBb 11. SEBd 18. LLtR Label1 004038B4 1.1 Form.Initialize() 004039C3 1.2 Form.Load() 00403A86 1.3 Form.Paint() 00403CC9 1.4 Form.Resize() File processed OK.
Nous retrouvons les routines attachées au label1 mais là, nous disposons des événements associés à chaque routine. Form.initialize, Form.Load, Form.Paint et Form.Resize. En revanche, nous n'avons pas les adresses des routines du module Seb alors que précédemment, le listing était plus complet.
Au final, nous disposons pour l'analyse des informations suivantes :
Pensons également au module Seb qui dispose d'une grande quantité de routines. Si on effectue une petite recherche sous google avec "RegisterA VB6" on tombe vite sur une implémentation VB6 d'un MD5. DSTHS signifie DigestStrToHexStr et se trouve être la routine principale pour le calcul d'un Hash MD5.
Copyright (C)- FRET (2006)