Page 1 sur 3

Que faire quand il n'y a pas de SDR ? Réponse ici !

MessagePosté: 14 Juillet 2005, 16:01
par Neitsa
En complément du post à Lise :

- 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 :

Image

PEID détecte un UPX :

Image

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 :

Image

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

Image

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.

Image

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.


Image


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...

Image

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) !

Image

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 :

Image


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.

Image

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 :D

Mici !

MessagePosté: 24 Août 2005, 12:26
par LuvKiller
joli boulo merci pour ces infos

MessagePosté: 10 Décembre 2005, 01:44
par ElKasser
Bravoooooooooooo Neitsa...good job!.
Seulement pour e mots ke t'utilise "la pile", moi je préfère le mots "mémoire".. :D

MessagePosté: 10 Décembre 2005, 09:51
par ++Meat
Comment sait-on qu'il s'agit d'une pile si on l'appelle "mémoire" ? ;)

MessagePosté: 10 Décembre 2005, 10:21
par Arch Enemy
joli jolo :D
je te felicite :D

MessagePosté: 10 Décembre 2005, 23:20
par ElKasser
la pile c "the stack" en english, en français en l'appel aussi condensateur, car il se charge et acumule les données (sous forme electrique). La mémoire c le mm concept!, c seulement les mots qui parfois diverge et voile la compréhension!.. :wink:

MessagePosté: 10 Décembre 2005, 23:33
par ++Meat
Ca revient à dire qu'il ne faut pas utiliser le mot "frigo" mais "objet electrique blanc refrigirant son contenu" (à peu près hein :P). Bref on va pas flooder pour rien, mais quand même :)

MessagePosté: 06 Juin 2006, 20:43
par Invité
la pile c "the stack" en english, en français en l'appel aussi condensateur, car il se charge et acumule les données (sous forme electrique). La mémoire c le mm concept!, c seulement les mots qui parfois diverge et voile la compréhension!..


En fait, on appelle "pile" la mémoire surtout parce qu'il est plus simple après de comprendre ce que désignent les termes FIFO (First In First Out) et LIFO (Last In Last Out) qui sont les deux méthodes principales d'empilage quand on veut utiliser l'allocation de mémoire dynamique.
De plus la pile est réservée aux données, elle ne contiendra pas de code, l'appellation mémoire est donc également moins précise.

MessagePosté: 06 Juin 2006, 22:01
par Silkut
Anonymous a écrit:
la pile c "the stack" en english, en français en l'appel aussi condensateur, car il se charge et acumule les données (sous forme electrique). La mémoire c le mm concept!, c seulement les mots qui parfois diverge et voile la compréhension!..


En fait, on appelle "pile" la mémoire surtout parce qu'il est plus simple après de comprendre ce que désignent les termes FIFO (First In First Out) et LIFO (Last In Last Out) qui sont les deux méthodes principales d'empilage quand on veut utiliser l'allocation de mémoire dynamique.
De plus la pile est réservée aux données, elle ne contiendra pas de code, l'appellation mémoire est donc également moins précise.


petit grain de sel: LIFO ou LILO ?
LIFO donne Last In First Out :?:

MessagePosté: 08 Octobre 2007, 22:50
par sb2401
salut;

Après avoir effectuer la procedure de neitsa;je bloque au niveau :

-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) .

j'ai effectivement du mal a comprendre!!

aider moi.

MessagePosté: 09 Octobre 2007, 12:21
par Deamon
il faut que tu regardes ce qui a fait qu'on arrive sur cette API donc voir d'où viennent les éventuels sauts ou CALL qui pointent vers ce bout de code.

MessagePosté: 10 Octobre 2007, 21:12
par sb2401
salut DAEMON?;

J'ai regardé donc comme tu me l'as indiquer se qu'effectue le prog juste avant d'afficher la messagebox d'erreur et voila ce que j'obtient :

-le premier jump et le suivant:

0049DFE3 . 73 06 JNB SHORT avgsetup.0049DFEB

donc a partir de la il faut que je vois se qui se passe à cette adresse si j'ai bien compris??

a+

MessagePosté: 10 Octobre 2007, 21:18
par ben
essaye ca : http://www.deamoncrack.host.sk/ :wink:
et stp évite de poster dans les post-it.
ta déja ouvert 2 autres post dessus :...: :evil:

MessagePosté: 10 Octobre 2007, 21:25
par sb2401
salut ben et merci de répondre!

Le lein que tu m'as fournis n'est pas valide error 403 forbiden!!

Peut m'en donner un autre?

a+

MessagePosté: 04 Mars 2008, 17:21
par daniel2206
j'ai eu le meme pbleme avec hdd life thank you