Addenum pour Flo'
par Alsindor

         B on...alors je vais vous présenter ici une autre approche que celle de Cayock pour le programme Flo'. L'inconvénient de cette méthode c'est qu'elle ne permet pas de contourner la limitation du nom des images!!

Pourquoi avoir écrit cet addenum alors me diez-vous...?Et bien parcequ'il présente une face cachée de Flo' et que peut être ce texte éveillera la curiosité de personnes qui arriveront jusqu'au bout...

Tout commence quand on examine Flo' avec un éditeur de resources, Restorator est l'outil idéal pour cà. Un petit regard du côté des "dialogs", et là on s'apperçoit qu'il existe une boîte de dialogue qui permet de s'enregistrer !!!

Je pense que vous devinez tout de suite où je veux en venir...;-)

Mon but est donc de faire apparaître cette boîte afin de s'attaquer à la routine du SERIAL.
Malheureusement... même avec un serial qui semble bon le programme ne se "débloque" pas... :(

L'intéret de ce texte encore une fois?? Et bien de vous montrer comment on fait apparaître une boîte de dialogue cachée...

Donc...nous sommes dans Restorator. On note le numéro de la resource qui correspond à la boîte d'enregistrement (=le numéro 172).
Puis on désassemble Flo.exe avec WDASM, le boutton "DLG Menu" est activé, cela veut donc dire que WDASM à trouvé des Dialogs.
Quand on clique dessus, il nous affiche donc la liste de toutes les références des boîtes de dialogue qu'il a trouvé.
Petite remarque, la numérotation est en héxa...Ah..il va falloir convertir ce que nous a donné Restorator en héxa. Donc 172 (décimal) donne 0AC (hexa).
On cherche ce numéro dans la liste....Il s'y trouve...:-)
On double clique dessus WDASM nous indique où il a répéré cette référence.
On arrive sur un truc du style:

* Possible Reference to Dialog: DialogID_00AC
                                  |
:00445F55 68AC000000              push 000000AC
:00445F5A 8B4DF0                  mov ecx, dword ptr [ebp-10]
:00445F5D E8ADC40100              call 0046240F
:00445F62 C745FC00000000          mov [ebp-04], 00000000
:00445F69 8B4DF0                  mov ecx, dword ptr [ebp-10]

On double clique...il n'y a que cette location...Bon, c'est déjà ca.
On remonte un peu pour voir d'où on vient pour arriver en :00445F55.
Il se trouve qu'il y a un CALL en :0044587F qui fait appel à cette portion de code.

On se positionne donc en :0044587F. Mais là on tombe sur une routine qui fait appel à des 
fonctions étranges...Telles que GetCurrentDirectoryA, CreateFileA, readFileA  
ou encore CloseHandle. Il y a une référence à un fichier: FLO.DAT. 

Tiens, on va donc relancer FLO.EXE avec Filemon, mais rien ne montre que FLO.EXE 
cherche un fichier qui s'appel FLO.DAT...:(
Bon, on va alors continuer notre analyse du DEAD LISING...
Lorsqu'on remonte dans WDASM, on se trouve en :00445785 avec un PUSH EBP 
et rien au-dessus pas de référence. 

Donc, c'est que cette partie de code doit être accédée par un appel du type 
CALL [adr] où adr=00445785. Ceci est impossible à trouver sous WDASM of course.

Comment accéder alors à cette routine? Et bien on va forcer le prg à pointer 
vers cette adresse et pour cela on va détourner le menu ABOUT FLO'...

On clique donc sur 'ABOUT FLO...' puis CTRL-D, TASK, HWND FLO
BMSG le_premier_chiffre WM_COMMAND,F5, on clique sur le boutton OK
SI break, plusieurs F12 plus tard on se retrouve en :00462637,
juste en-dessous d'un EndDialog. 

On continue d'appuyer sur F12, on arrive en :00404611, encore un petit coup de F12, 
et là on arrive en :0046195D...et qu'est ce qu'il y a juste au-dessus??
un zoli CALL [EBP+14]....Exactement ce qu'il nous fallait....On pose vite un BP dessus...

On efface le Breakpoint sur le BMSG, on reclique sur ABOUT FLO', 
et là ca break au CALL [EBP+14] on édite en mémoire (ed ebp+14, ed car cela permet 
de ne pas avoir à se prendre la tête avec les inversions des poids forts/poids faibles)
on remplace 004044E3 par 00445785 (notre adresse du début de la routine). 
Puis on va tracer pour voir ce qu'il s'y passe...

Le Call GetCurrentDirectoryA en :004457B2 permet de récupérer le chemin
actuel, donc là où est installé FLO', puis le CALL 0045677E permet de faire 
une fusion entre le chemin récupéré et le nom de fichier FLO.DAT. 
A la sortie du CALL on a donc un truc du style: C:\FLO\FLO.DAT

Puis, on essaye de lire dans le fichier FLO.DAT par la fonction CreateFileA
(il y a un PUSH 80000000 => GENERIC_READ)s'il n'y a pas d'erreurs, alors on essaye de lire 
dans le fichier avec ReadFile les 4 premiers octets. 
On ferme le fichier (CloseHandle) Puis on compare les octets lus avec une 
valeur par défaut qui est: E006F3B8.

Voici comment créer un fichier FLO.DAT contenant les bons octets...
Sous DOS, placez-vous dans le répertoire FLO' puis tapez:
COPY CON FLO.DAT(entrée)
1234(touche F6)(entrée)
Editez le nouveau fichier créé avec un éditeur hexa, puis remplacez 1234 par (en mode hexa)
B8 F3 06 E0  Sauvegardez le tout, et c'est bon.
Vous venez de créer votre fichier FLO.DAT

Donc, recliquez sur 'ABOUT FLO...' changez EBP+14 en 00445785 et zou !!
LA boîte de dialogue apparait...:-)

On écrit n'importe quoi....
BPX GetDlgItemTextA et BPX GetWindowTextA
C'est le 2eme qui break 4 fois je crois...On trace jusqu'à obtenir la boîte de dialogue...
C'est un CALL en :004461ED qui m'informe que mon numéro de série n'est pas bon.
Juste au-dessus, il y a un TEST... :-)
Un petit BP...on relance...r fl z quand on se trouve sur le JNZ et Hop!
Ca passe...Malheureusement, la command PLACE n'accepte toujours pas n'importe quoi 
comme image..:(

Peut être est-ce du au sérial...Avec un regard un peu plus attentif sur les strings
on remarque un truc étrange...1000001217....Tiens, et si c'était le sérial ??
On relance, infos bidons puis 1000001217 pour le sérial...Hop!! Ca passe aussi... :-)
Mais....encore une fois...rien ne se débloque....:(

Voilà...donc...c'est là où j'en suis....Je ne continuerai pas car ce soft m'énerve...
Je trouve que c'est frustrant...Mais bon...c'est la vie...
Après tout, rien ne me prouve que ce soft peut être débridé...

Donc, si cela vous dit de continuer je vous en prie, SURTOUT ne vous privez pas...
J'en serais très heureux....En attendant vos contributions / remarques etc....

Have Phun...
<-[ ALSINDOR ]->

alsindor(arobase)yahoo(point)com