Date de publication : mardi 20 juin 2006

Auteur : BeatriX

1. Outils - principe

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.

2. Préliminaires.

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 :

  • 1. La Submain débute en 4055AF.
  • 2. L'une des forms de ce projet est initialisée en 4038B4
  • 3. Cette même forme est équipée des routines Paint, Resize et Load dont nous connaissons les adresses.

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)

Page suivante

Valid XHTML 1.0 Strict

Valid CSS!