logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Reverse Engineering >> A l'aide Newtopic | Reply
poster txt
JCD
Inscrit le 24-09-2006
Posté le 24-09-2006 18:19

Bonjour,

Dans le cadre de mon apprentissage, je cherche à étudier le programme suivant :
http://membres.lycos.fr/essai1essai2/programme.zip

Il s'agit d'un décrypteur d'images écrit en delphi 5 (il a été utilisé il y a 5 ans et depuis, la société qui l'exploitait a fermé).J'aimerais trouver la façon de procéder pour obtenir le code d'accès mais pour le moment, je suis bloqué. Je n'arrive pas à cerner où se trouve la routine de vérification et où apparait le code en clair.

Pour devancer les réflexions de certains, je cherche à apprendre et non à me rincer l'oeil : en effet, j'ai déjà le code d'accès à la gallerie(7FJ776). Je veux juste comprendre la manière d'obtenir ce code.

Merci d'avance à tout ceux qui voudront bien m'aider.
(j'utilise ollydbg et dede)
profil | edit | quote
Kharneth
Inscrit le 22-07-2004
Posté le 30-09-2006 23:48

Salut!

Etant donné que le programme n'est pas compressé ou crypté, tu peux commencer par regarder des chaînes de caractères intéressantes en testant différents serials (ou absence de serials).
Le problème avec Delphi, c'est que la fonction ShowMessage(string) n'utilise pas l'api MessageBoxA.

Ensuite, pour y voir plus clair dans olly, tu peux exporter un fichier MAP depuis DeDe (onglet Export puis fichier MAP) et l'importer dans olly à l'aide d'un plugin (mapconv ou godup). Tu verras ainsi les noms des fonctions delphi. Notamment la fonction TControl.GetText équivalent d'un GetWindowText pour récupérer le contenu du champ texte contenant le serial.

Il est également possible d'utiliser les signatures de IDA avec le Plugin Godup, mais je trouve que le fichier MAP généré par DeDe est plus complet.
_________________________

profil | Website | edit | quote
waganono
Inscrit le 14-06-2005
Posté le 01-10-2006 17:03

Salut

Tu peux aussi utiliser PEExplorer et son option "disassembler" qui reconnait à merveille le delphi et le nom de toutes les formes, méthodes (VCL method),...c'est très pratique pour obtenir l'adresse de la fonction exécutée lors d'un click sur un bouton,...et ainsi poser un BP dessus.
profil | edit | quote
JCD
Inscrit le 24-09-2006
Posté le 07-10-2006 10:21

Merci beaucoup pour vos réponses.

J'ai testé vos différentes solutions mais le problème, c'est que, lorsque je trace les procédures sous Ollydbg, je vois bien le serial que j'ai tapé mais il n'est jamais comparé au bon serial. Le bon serial n'est jamais affiché (pourtant j'ai regardé dans tous les registres).

Merci de bien vouloir m'éclairer.
profil | edit | quote
Kharneth
Inscrit le 22-07-2004
Posté le 07-10-2006 14:58

Le serial n'apparait pas obligatoirement.

Un exemple très simple:
Nom[i] xor 66 == serial[i] xor 99
est équivalent à
Nom[i] xor FF == Serial[i]
Mais le serial n'apparait jamais en clair.

Donc, il faut que tu retrouves les différentes opérations appliquées au nom et au serial en posant par exemple des BPM sur les caractères.

Il ne suffit pas de surveiller les registres en espérant voir apparaitre le serial, hein.
Il faut analyser le code...

[ Ce Message a été édité par: Kharneth le 2006-10-07 15:00 ]
profil | Website | edit | quote
JCD
Inscrit le 24-09-2006
Posté le 07-10-2006 20:31

Le problème, c'est que je ne sais pas trop où débute le travail de vérification du serial (il n'y a pas de nom d'utilisateur, il n'y a que le serial).
Aurais-tu la gentilesse de me donner un indice ;-) ?
profil | edit | quote
Kharneth
Inscrit le 22-07-2004
Posté le 08-10-2006 15:21

Je t'ai déjà donné un indice dans mon premier message :
Quote:
tu peux commencer par regarder des chaînes de caractères intéressantes en testant différents serials (ou absence de serials).



Bien que la recherche de chaînes de caractères ne soit pas une méthode miracle, elle peut donner de bons résultats sur des programmes non cryptés / compressés.

D'une manière générale, il est bon de recueillir un maximum d'informations sur sa cible. Par exemple, dans le cadre d'une protection, consulter le site officiel et manipuler le programme est un bon début.

Pour la cible qui nous intéresse, on peut taper toute sorte de code pour tester le comportement du programme, chiffres, lettres, rien, etc. On obtient des messages qu'il suffit de chercher sous OllyDbg pour tomber sur une zone de code intéressante.

Ensuite, on remonte le code jusqu'à arriver sur la partie de récupération du serial.

[ Ce Message a été édité par: Kharneth le 2006-10-08 15:22 ]
profil | Website | edit | quote
waganono
Inscrit le 14-06-2005
Posté le 08-10-2006 19:03

Il y a aussi eventuellement une technique qui pourrait marcher, rentre par exemple un couple N/S bidon (tout en ayant ouvert le binaire dans olly), valide le, en général il y a un message d'erreur (en général, je n'ai pas testé pour ton cas).

Une fois ce message d'erreur obtenu, mets le prog en pause dans Olly et examine les éventuels appels (adresses de fonctions et adresses de retour) qui ont été placé sur la pile (Appuie sur K pour Call Stack). Prends surtout en compte les derniers appels qui se trouvent à l'intérieur du module que tu étudies (xxxxx.exe le plus souvent).
Ce n'est pas une méthode miracle mais ça aide souvent, n'examine pas que les appels mais aussi les eventuelles traces qui restent en mémoire du serial par exemple et plein d'autres choses...

Après comme te disait Kharneth essaie de remonter en arrière jusqu'à la bonne routine, patience et longueur de temps font bon ménage...
profil | edit | quote
Kharneth
Inscrit le 22-07-2004
Posté le 09-10-2006 13:56

Effectivement, c'est une technique qui peut donner de bons résultats également, mais pour un prog Delphi, c'est plus délicat. Il faut connaitre les particularités de ce compilateur pour éviter d'être perdu.

Comme je le disais dans mon premier message, l'api MessageBoxA n'est pas utilisée. A la place, la VCL crée une boite de dialogue de toute pièce avec gestion des messages et tout le tremblement. La fonctionn couramment employée est ShowMessage().

Donc après avoir importé les noms des fonctions de la VCL avec une des méthodes décrites précédemment (GodUp, Ida, dede, etc.), il ne te reste plus qu'à chercher un appel à ShowMessage. Une fois trouvé, tu seras en plein dans la fonction de vérification.
_________________________

profil | Website | edit | quote
JCD
Inscrit le 24-09-2006
Posté le 09-10-2006 16:43

Merci pour toutes ces réponses.
Je ne suis pas très expérimenté mais j'ai essayé d'étudier le programme comme me l'avait conseillé Kharneth.

J'ai essayé de ne rien rentré et j'obtiens le message Saisissez une clé valide, ce qui m'amène à l'adresse 004DE140F dans le programme.
J'ai essayé ensuite d'entré un code et j'ai obtenu le message Nos clés ne contiennent jamais de Zéro, O, i et L et le programme m'ammène en 004DE347.
Enfin, j'ai essayé avec un code respectant les conditions ci-dessus et j'obtiens le message Cette clé est invalide.

En regardant au dessus de ce message sous Dede, je vois
004DBD62 call 00454E20
004DBD67 jmp 004DBD73 (jmp si on n'affiche pas le message)

Donc je pense que la routine de vérification se trouve dans la procédure call 00454E20. Le problème, c'est que je ne parviens pas à détecter les lignes intéressantes (au moins celle qui compare la premiere partie du bon serial)
profil | edit | quote
Newtopic | Reply

Online : abubafiy, axipakoqa, ayobufuderole, Grantcix, icaizutixeq, imujaced, ivapiwuvovigu, iwineyir, Joshualayex, JustinLal, leinf1Row, Lypdafew, oyexefeno, ozoumuzekiwu, seqexomokxu, uloduzajip, umayocalawibu, unucayf, WalterDreta, WilliamTrowl et 52 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page