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