- Que faire quand il n'y a pas de SDR ?
Question qui revient souvent sur le forum...
SDR = String data references, les chaînes de caractères contenant le message "Good boy" ou "Bad boy".
1) Vérifiez si le programme est packé (protégé par un packer / compresseur / crytpeur) avec PEID ou STUDPE :
(EDIT: PEiD et StudPE étant un peu "anciens" et plus maintenus à jour, vous pouvez également utiliser ProtectionID et RDG packer detector:
ProtectionID: _http://protectionid.owns.it/
RDG Packer detector: _http://www.rdgsoft.8k.com/ )
StuPE détecte ici Neolite 2.0 :

PEID détecte un UPX :

1-1) Deux possibilités s'offre à vous :
A) Le programme n'est pas packé :
les strings sont peut être encryptées dans le programme ou contruites à l'éxecution du programme. Elles sont peut être présentes dans une DLL ou encore dans un fichier externe mais pas forcément dans l'exécutable principal (les possibilités sont multiples...). Allez au paragraphe 2.
B) Le programme est packé :
Il faut bien sur l'unpacker, soit avec un outil spécialement fait pour LA version du packer que PEID ou StudPE vous auront donnés, ou bien faire un unpack manuel (pour lequel vous trouverez des tutoriaux sur le web, cherchez bien AVEC le numéro du packer précisément ! par exemple PE compact 1.0 est très différent de PE compact 2.3).
Une fois unpacké, reconstruisez les imports, ici point de salut en dehors d'Imprec (import reconstructor ) et PEVirgin sauf si vous savez le faire manuellement...
Vous verrez alors peut être des SDR une fois le prog unpacké si ce n'est pas le cas lisez 1-1-A)
2) Programme unpacké ou non packé mais pas de SDR...
2-A ) Méthode des APIs :
Breaker sur les APIs devrait être la première chose à faire. Si c'est une MessageBox qui vous annonce l'erreur, on peut poser un breakpoint sur l'API MessageBox et ce sur tous ses CALLs.
Olly : CTRL + N pour faire apparaitre la fenêtre des noms :

Choisissez l'API qui convient (ici MessageBox, on click gauche dessus) puis faites un click droit sur cette ligne et "View Call Tree" :

Clic droit dans cette fenêtre et "Set Breakpoint on every call" : vous vennez de poser un BP sur toutes les CALL MessageBox du programme.

Parfois les compilateurs (ou les programmeurs) font des sauts vers les APIs ou les procédures plutôt que des CALLs.
Faites CTRL + N, et au lieu de "view call tree" faites "Find references to import" puis "Set breakpoint on every command" : cela pose un BP sur les CALLs mais aussi sur les JMPs qui pointe vers l'APIs ou la procédure.

Ensuite vous n'avez plus qu'a faire ce qu'il faut pour trouvez ce qui vous amène à cette API (dans notre cas MessageBox mais ca peut être toute autre API)
2-B) Méthode de la pile
Il se passe bien quelque chose (apparition d'une MessagBox, ouverture d'un fichier,apparition d'un nag, etc.) mais je ne vois pas l'API en question...
C'est surement que l'API est utilisé au travers d'une redirection ou d'une indirection (pointeur sur pointeur), ou extraite à l'exécution.
Le mieux est encore ici d'utiliser la "méthode de la pile"
Dans ce cas là exécuter le programme, attendez que la messagebox (toujours un exemple cela peut être n'importe quoi d'autres) et mettez en pause le débuggeur (Olly: F12).
Allez sur la fenêtre des registres, click gauche sur ESP, et click droit > "follow in stack".
Regardez la fenêtre de pile : A ce moment là vous êtes qque part dans NTDLL...

N'oubliez pas que chaque procédure sur la pile est entourée à gauche d'une ligne noire qui la délimite (entourée en bleu ici). Ne vous intéressez qu'aux "RETURN TO" qui se trouve en haut des procédures (entourés en vert foncé ici, car il arrive qu'on en voit plusieurs à l'intérieur des limites) !

Descendez jusqu'a retrouver le nom de l'API sur la pile (nécessite de descendre beaucoup la plupart du temps).
Ici je viens de trouver l'appel à MessageBox :

Faites un clik gauche sur la ligne (voir ci dessus) et puis un click droit et "Follow in dissasembler". Vous atterissez sur la ligne située sous le CALL de l'API dans le fenêtre de code !
Posez un BP sur cette ligne (notez bien sur la concordance des adresses sur la pile et dans le désassembleur) et faites F9 pour exécuter.

D'ici vous devrez trouver ce qui vous à amené à cette messagebox....
Si (et si seulement) vous voulez ajouter des compléments merci de les poster à la suite de ce message, je les intégrerais dans ce post, avec le crédit qui va bien

Mici !