Heu, je te réponds sur un nouveau thread. Sinon, ça va encore être pommé au
fin fond d'un 2.156e
niveau de mes engueulos avec l'ami OA. D'ailleurs, lui qui aime la
"technique", ça devrait lui
plaire ta question...
Frederic Bonroy daigna s'adresser à moi en ces termes:
>Tiens, au lieu de t'acharner sur une boucle de décryptage ROT-13 essaie
>plutôt de me donner un coup de main.
M'acharner, m'acharner... Bon, j'avoue ça m'a pris 2 bonnes heures et demies
! Je n'ai d'ailleurs
pas encore d'avis définitif sur la chose :
a) écrit par un "pro" qui a essayé de noyer le poisson et les analystes ?
b) écrit par une buse qui n'est pas encore au courant des possibilités
d'optimisation ?
c) mixture générée par un compilateur soucieux, lui, des problèmes
d'optimisation ?
Bon, je me risque, je dis un mélange de a) et b)...
>Une idée pour réaliser sous Windows 9x/ME l'équivalent de
>CreateFileMapping avec SEC_IMAGE (disponible sous NT/2000/XP seulement)?
Heu, si je ne m'abuse, le seul intérêt de SEC_IMAGE est de prendre
DIRECTEMENT en compte les informations de mappage et de protection depuis le
fichier. Cela a donc pour résultat de charger le fichier exécutable en tant
que tel (et impose que le fichier passé soit un exécutable) et interdit donc
les autres options possibles. Le fait que SEC_IMAGE ne soit pas implémenté
sous 9x/Me provient de la différence entre les loaders de 9x/Me et celui de
NT.
Lorsque je m'amusais à ce genre de choses avec 9x, j'utilisais MapAndLoad()
de ImageHelp.dll. Mais, si j'ai bonne mémoire, la doc n'était pas très
fournie :o).
>Ma question n'est pas sans rapport avec les virus. En fait pour faire
>une analyse plus approfondie d'un fichier PE, notamment en matière
>d'émulation, il peut être utile d'avoir en mémoire son image
>"exécutable" (qui est généralement différente de son image sur disque à
>cause des alignements).
Entre autre. Mais en fait, c'est assez simple de s'y retrouver. Il te suffit
de suivre les divers "pointeurs" VA et RVA pour trouver tout ce que tu
cherches ou, dans ton cas, mettre en place une copie de l'image.
>Le problème sous Windows 9x c'est qu'il faut faire ça soi-même, du moins
>je ne connais pas d'autre solution. Veut dire: créer un file mapping
>"normal" pour avoir accès au fichier, réserver de la mémoire,
>décortiquer le PE et créer soi-même cette image exécutable.
Heu ça, c'est la technique bourinos quand même. Bon, c'est faisable, mais il
y a, toujours si j'ai bon souvenir, plus simple : MapAndLoad(). Si, si, tu
vas voir, c'est plus simple :-).
>Et là se pose le problème des RVA et de l'adresse de base. L'adresse de
>base est généralement 40000h.
Non, en fait elle est ce que tu veux. Celle que tu donnes est la
"preferred". Sous Windows NT elle est différente. En fait, c'est un peu
comme les DLLs, il y a la preferred, et si relogement il doit y avoir,
l'adresse de base peut changer. Enfin, pour les DLLs...
>Seulement voilà, quand on réserve de la
>mémoire (pour y inscrire l'image exécutable que l'on va ensuite examiner
>par émulation), l'adresse de base de cette zone n'est logiquement pas à
>40000h.
Bah oui, d'où le concept de VA et des RVAs.
>Alors quand on a une image exécutable prévue pour 40000h à une
>autre adresse, les mov par exemple travaillent avec des adresses
>complètement fausses.
Parce qu'il te faut les remapper.
>J'ai fait l'essai avec un simple PE prévu pour 40000h. J'ai modifié le
>champ de l'adresse de base (j'ai mis 70000h) avec un éditeur hexadécimal
>et évidemment le programme plantait lorsqu'une instruction tentait
>d'accéder à 42000h (qui était une variable dans la séction de données).
Évidemment ! Ce serait trop simple :-). N'oublies pas le problème des
relocations des sections. Regarde du côté du champ characteristics du
IMAGE_FILE_HEADER. Tiens, puisque je te parlais des DLLs, un excellent
article :
>Lors de l'émulation on pourrait, à chaque instruction accédant à la
>mémoire, déterminer son adresse virtuelle relative et à partir de cela
>calculer sa vraie adresse virtuelle mais ce serait compliqué et lent.
Si tu parles de fonctions d'API, à moins que tu ne passes systématiquement
par des GetProcAddress() (bonjour le délire), les fonctions sont importées
depuis des DLLs. Tu as leurs RVA dans les sections appropriées.
>Je débute un peu avec les PE, ça se trouve j'ai négligé quelque chose de
>fondamental.
Surtout de bien regarder toutes les fonctions de ImageHelp.dll. Pour ce qui
est du PE, cherche dans Google avec mon nom, j'ai donné 28 millions sur le
sujet dans le passé.
>Remarque, j'ai Windows 2000 là, donc pour commencer je pourrai utiliser
>SEC_IMAGE et faire des tests sous Windows 2000. Mais je préférerais un
>truc qui fonctionne sur tous les systèmes.
Ce sera pénible à écrire. Il y a des petites variations sans arrêt. Pour CE
par exemple, pour .NET. Et n'oublions pas Win64.
On Fri, 30 Jan 2004 02:38:34 +0100, Nicolas Brulez wrote:
Non ca doit pouvoir se faire. Donnes moi quelques jours, et je donnerai la présentation. J'ai écris un cours complet sur toutes les protections employées à l'époque pour la conférence, et tout est détaillé :)
Si tu pouvais la mettre sur le Web, ça rattraperait le fait que tu le l'ai jamais transmise au webmestre du SSTIC :)
Chief of Security The Armadillo Software Protection System
Félicitations !
Nicob
On Fri, 30 Jan 2004 02:38:34 +0100, Nicolas Brulez wrote:
Non ca doit pouvoir se faire. Donnes moi quelques jours, et je donnerai
la présentation. J'ai écris un cours complet sur toutes les protections
employées à l'époque pour la conférence, et tout est détaillé :)
Si tu pouvais la mettre sur le Web, ça rattraperait le fait que tu le
l'ai jamais transmise au webmestre du SSTIC :)
Chief of Security
The Armadillo Software Protection System
On Fri, 30 Jan 2004 02:38:34 +0100, Nicolas Brulez wrote:
Non ca doit pouvoir se faire. Donnes moi quelques jours, et je donnerai la présentation. J'ai écris un cours complet sur toutes les protections employées à l'époque pour la conférence, et tout est détaillé :)
Si tu pouvais la mettre sur le Web, ça rattraperait le fait que tu le l'ai jamais transmise au webmestre du SSTIC :)
Chief of Security The Armadillo Software Protection System
Félicitations !
Nicob
Nicolas Brulez
Si tu pouvais la mettre sur le Web, ça rattraperait le fait que tu le l'ai jamais transmise au webmestre du SSTIC :) Oui ca sera fait d'ici quelques jours. Ils ont tout les documents, mais
j'ai préféré ne rien publier pour le moment pour diverses raisons.
Félicitations ! Merci :)
-- Nicolas Brulez
Chief of Security The Armadillo Software Protection System http://www.siliconrealms.com/armadillo.shtml
Si tu pouvais la mettre sur le Web, ça rattraperait le fait que tu le
l'ai jamais transmise au webmestre du SSTIC :)
Oui ca sera fait d'ici quelques jours. Ils ont tout les documents, mais
j'ai préféré ne rien publier pour le moment pour diverses raisons.
Félicitations !
Merci :)
--
Nicolas Brulez
Chief of Security
The Armadillo Software Protection System
http://www.siliconrealms.com/armadillo.shtml
Si tu pouvais la mettre sur le Web, ça rattraperait le fait que tu le l'ai jamais transmise au webmestre du SSTIC :) Oui ca sera fait d'ici quelques jours. Ils ont tout les documents, mais
j'ai préféré ne rien publier pour le moment pour diverses raisons.
Félicitations ! Merci :)
-- Nicolas Brulez
Chief of Security The Armadillo Software Protection System http://www.siliconrealms.com/armadillo.shtml
Frederic Bonroy
AMcD wrote:
Pour les VA et les RVA il n'y a pas de problèmes. C'est la manière dont c'est réalisé *en pratique* qui est un peu obscure, c'est tout. Honnêtement, je trouve très peu élégante la méthode de relocation si elle consiste à modifier ici et là l'image en mémoire. Je sais qu'il n'y a pas 36 solutions, mais cette méthode n'est pas élégante pour autant.
C'est pourtant une méthode classique. De COFF à ELF à DOS à PE, etc.
Oui mais ça ne marche pas quand il n'y a pas de relocations dans un fichier .exe. C'est possible parce que généralement il n'y a pas de problèmes pour place un fichier .exe à son adresse de base préférée.
Donc, du point de vue de l'émulation, on est bien obligé de faire ça de façon dynamique. Je ne vois pas d'autre solution.
AMcD wrote:
Pour les VA et les RVA il n'y a pas de problèmes. C'est la manière
dont
c'est réalisé *en pratique* qui est un peu obscure, c'est tout.
Honnêtement, je trouve très peu élégante la méthode de relocation si
elle consiste à modifier ici et là l'image en mémoire. Je sais qu'il
n'y
a pas 36 solutions, mais cette méthode n'est pas élégante pour autant.
C'est pourtant une méthode classique. De COFF à ELF à DOS à PE, etc.
Oui mais ça ne marche pas quand il n'y a pas de relocations dans un
fichier .exe. C'est possible parce que généralement il n'y a pas de
problèmes pour place un fichier .exe à son adresse de base préférée.
Donc, du point de vue de l'émulation, on est bien obligé de faire ça de
façon dynamique. Je ne vois pas d'autre solution.
Pour les VA et les RVA il n'y a pas de problèmes. C'est la manière dont c'est réalisé *en pratique* qui est un peu obscure, c'est tout. Honnêtement, je trouve très peu élégante la méthode de relocation si elle consiste à modifier ici et là l'image en mémoire. Je sais qu'il n'y a pas 36 solutions, mais cette méthode n'est pas élégante pour autant.
C'est pourtant une méthode classique. De COFF à ELF à DOS à PE, etc.
Oui mais ça ne marche pas quand il n'y a pas de relocations dans un fichier .exe. C'est possible parce que généralement il n'y a pas de problèmes pour place un fichier .exe à son adresse de base préférée.
Donc, du point de vue de l'émulation, on est bien obligé de faire ça de façon dynamique. Je ne vois pas d'autre solution.
Nicolas Brulez
Oui mais ça ne marche pas quand il n'y a pas de relocations dans un fichier .exe. C'est possible parce que généralement il n'y a pas de problèmes pour place un fichier .exe à son adresse de base préférée.
Donc, du point de vue de l'émulation, on est bien obligé de faire ça de façon dynamique. Je ne vois pas d'autre solution.
Tu en es ou dans ton projet ? Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple émulateur, c'est ca?
-- Nicolas Brulez
Chief of Security The Armadillo Software Protection System http://www.siliconrealms.com/armadillo.shtml
Oui mais ça ne marche pas quand il n'y a pas de relocations dans un
fichier .exe. C'est possible parce que généralement il n'y a pas de
problèmes pour place un fichier .exe à son adresse de base préférée.
Donc, du point de vue de l'émulation, on est bien obligé de faire ça de
façon dynamique. Je ne vois pas d'autre solution.
Tu en es ou dans ton projet ?
Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple
émulateur, c'est ca?
--
Nicolas Brulez
Chief of Security
The Armadillo Software Protection System
http://www.siliconrealms.com/armadillo.shtml
Oui mais ça ne marche pas quand il n'y a pas de relocations dans un fichier .exe. C'est possible parce que généralement il n'y a pas de problèmes pour place un fichier .exe à son adresse de base préférée.
Donc, du point de vue de l'émulation, on est bien obligé de faire ça de façon dynamique. Je ne vois pas d'autre solution.
Tu en es ou dans ton projet ? Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple émulateur, c'est ca?
-- Nicolas Brulez
Chief of Security The Armadillo Software Protection System http://www.siliconrealms.com/armadillo.shtml
Frederic Bonroy
Tu en es ou dans ton projet ? Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple émulateur, c'est ca?
En fait le but n'est - évidemment - pas de faire un véritable émulateur de la mort qui tue. Un émulateur qui connait toutes les instructions utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Et si j'ai envie, pourquoi pas rajouter des instructions permettant la décompression d'un programme compacté avec UPX. Mais ce n'est que de l'utopie.
C'est surtout le principe qui m'intéresse afin d'approfondir un peu mes connaissances des virus PE.
Tu en es ou dans ton projet ?
Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple
émulateur, c'est ca?
En fait le but n'est - évidemment - pas de faire un véritable émulateur
de la mort qui tue. Un émulateur qui connait toutes les instructions
utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Et si j'ai envie, pourquoi pas rajouter des instructions permettant la
décompression d'un programme compacté avec UPX. Mais ce n'est que de
l'utopie.
C'est surtout le principe qui m'intéresse afin d'approfondir un peu mes
connaissances des virus PE.
Tu en es ou dans ton projet ? Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple émulateur, c'est ca?
En fait le but n'est - évidemment - pas de faire un véritable émulateur de la mort qui tue. Un émulateur qui connait toutes les instructions utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Et si j'ai envie, pourquoi pas rajouter des instructions permettant la décompression d'un programme compacté avec UPX. Mais ce n'est que de l'utopie.
C'est surtout le principe qui m'intéresse afin d'approfondir un peu mes connaissances des virus PE.
Frederic Bonroy
J'ai écrit:
En fait le but n'est - évidemment - pas de faire un véritable émulateur de la mort qui tue. Un émulateur qui connait toutes les instructions utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Ceci dit, si quelqu'un connait par hasard un virus PE crypté pas trop compliqué...
J'ai écrit:
En fait le but n'est - évidemment - pas de faire un véritable émulateur
de la mort qui tue. Un émulateur qui connait toutes les instructions
utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Ceci dit, si quelqu'un connait par hasard un virus PE crypté pas trop
compliqué...
En fait le but n'est - évidemment - pas de faire un véritable émulateur de la mort qui tue. Un émulateur qui connait toutes les instructions utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Ceci dit, si quelqu'un connait par hasard un virus PE crypté pas trop compliqué...
Frederic Bonroy
Heu, si je ne m'abuse, le seul intérêt de SEC_IMAGE est de prendre DIRECTEMENT en compte les informations de mappage et de protection depuis le fichier. Cela a donc pour résultat de charger le fichier exécutable en tant que tel (et impose que le fichier passé soit un exécutable) et interdit donc les autres options possibles. Le fait que SEC_IMAGE ne soit pas implémenté sous 9x/Me provient de la différence entre les loaders de 9x/Me et celui de NT.
Je viens d'essayer SEC_IMAGE sous Windows 2000 (SP4), il change bien l'alignement de 512 à 4096 octets, logique, mais il ne fait pas de relocations.
Il est vrai que je ne sais pas interpréter ceci, qui se trouve dans .reloc:
Bref, SEC_IMAGE ne me servira pas à grand chose en fait.
Heu, si je ne m'abuse, le seul intérêt de SEC_IMAGE est de prendre
DIRECTEMENT en compte les informations de mappage et de protection depuis le
fichier. Cela a donc pour résultat de charger le fichier exécutable en tant
que tel (et impose que le fichier passé soit un exécutable) et interdit donc
les autres options possibles. Le fait que SEC_IMAGE ne soit pas implémenté
sous 9x/Me provient de la différence entre les loaders de 9x/Me et celui de
NT.
Je viens d'essayer SEC_IMAGE sous Windows 2000 (SP4), il change bien
l'alignement de 512 à 4096 octets, logique, mais il ne fait pas de
relocations.
Il est vrai que je ne sais pas interpréter ceci, qui se trouve dans .reloc:
Heu, si je ne m'abuse, le seul intérêt de SEC_IMAGE est de prendre DIRECTEMENT en compte les informations de mappage et de protection depuis le fichier. Cela a donc pour résultat de charger le fichier exécutable en tant que tel (et impose que le fichier passé soit un exécutable) et interdit donc les autres options possibles. Le fait que SEC_IMAGE ne soit pas implémenté sous 9x/Me provient de la différence entre les loaders de 9x/Me et celui de NT.
Je viens d'essayer SEC_IMAGE sous Windows 2000 (SP4), il change bien l'alignement de 512 à 4096 octets, logique, mais il ne fait pas de relocations.
Il est vrai que je ne sais pas interpréter ceci, qui se trouve dans .reloc:
Bref, SEC_IMAGE ne me servira pas à grand chose en fait.
LaDDL
Frederic Bonroy wrote:
Tu en es ou dans ton projet ? Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple émulateur, c'est ca?
En fait le but n'est - évidemment - pas de faire un véritable émulateur de la mort qui tue. Un émulateur qui connait toutes les instructions utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Et si j'ai envie, pourquoi pas rajouter des instructions permettant la décompression d'un programme compacté avec UPX. Mais ce n'est que de l'utopie.
C'est surtout le principe qui m'intéresse afin d'approfondir un peu mes connaissances des virus PE.
Bonsoir Fred,
Il se trouve que nous avons eu avec des codeurs cette même discussion l'année dernière sur un forum. Adresses-moi un mail en supprimant dans les champs de mon adresse email HIT-THE-DIRT et je te forwarderai l'url & le thread en question.
++
Frederic Bonroy wrote:
Tu en es ou dans ton projet ?
Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple
émulateur, c'est ca?
En fait le but n'est - évidemment - pas de faire un véritable émulateur
de la mort qui tue. Un émulateur qui connait toutes les instructions
utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Et si j'ai envie, pourquoi pas rajouter des instructions permettant la
décompression d'un programme compacté avec UPX. Mais ce n'est que de
l'utopie.
C'est surtout le principe qui m'intéresse afin d'approfondir un peu mes
connaissances des virus PE.
Bonsoir Fred,
Il se trouve que nous avons eu avec des codeurs cette même discussion
l'année dernière sur un forum.
Adresses-moi un mail en supprimant dans les champs de mon adresse email
HIT-THE-DIRT et je te forwarderai l'url & le thread en question.
Tu en es ou dans ton projet ? Tu fais quoi exactement ? j'ai pas suivis le début.
De l'analyse heuristique ? et tu voudrais programmer un simple émulateur, c'est ca?
En fait le but n'est - évidemment - pas de faire un véritable émulateur de la mort qui tue. Un émulateur qui connait toutes les instructions utilisées dans la boucle de décryptage d'un virus simple devrait suffir.
Et si j'ai envie, pourquoi pas rajouter des instructions permettant la décompression d'un programme compacté avec UPX. Mais ce n'est que de l'utopie.
C'est surtout le principe qui m'intéresse afin d'approfondir un peu mes connaissances des virus PE.
Bonsoir Fred,
Il se trouve que nous avons eu avec des codeurs cette même discussion l'année dernière sur un forum. Adresses-moi un mail en supprimant dans les champs de mon adresse email HIT-THE-DIRT et je te forwarderai l'url & le thread en question.
++
Frederic Bonroy
Lorsque je m'amusais à ce genre de choses avec 9x, j'utilisais MapAndLoad() de ImageHelp.dll. Mais, si j'ai bonne mémoire, la doc n'était pas très fournie :o).
Bref, pas forcément fiable. Et je ne sais pas encore ce que ça donne quand je modifie l'image en mémoire. UnMapAndLoad sauvegarde-t-il les changements sur le disque? Même chose pour SEC_IMAGE, j'en ai bien peur... Remarque, je n'ai pas encore essayé mais si tu connais la réponse d'avance... ;-)
Pour l'instant je me sers de MapAndLoad mais j'ai comme l'impression qu'il vaut mieux songer à une autre solution.
(Tu vas voir, le plus difficile dans tout ça, ce sera le format PE. J'envisage pour l'instant pas de problèmes particuliers avec l'émulation même. M'agace.)
Lorsque je m'amusais à ce genre de choses avec 9x, j'utilisais MapAndLoad()
de ImageHelp.dll. Mais, si j'ai bonne mémoire, la doc n'était pas très
fournie :o).
Bref, pas forcément fiable. Et je ne sais pas encore ce que ça donne
quand je modifie l'image en mémoire. UnMapAndLoad sauvegarde-t-il les
changements sur le disque? Même chose pour SEC_IMAGE, j'en ai bien
peur... Remarque, je n'ai pas encore essayé mais si tu connais la
réponse d'avance... ;-)
Pour l'instant je me sers de MapAndLoad mais j'ai comme l'impression
qu'il vaut mieux songer à une autre solution.
(Tu vas voir, le plus difficile dans tout ça, ce sera le format PE.
J'envisage pour l'instant pas de problèmes particuliers avec l'émulation
même. M'agace.)
Lorsque je m'amusais à ce genre de choses avec 9x, j'utilisais MapAndLoad() de ImageHelp.dll. Mais, si j'ai bonne mémoire, la doc n'était pas très fournie :o).
Bref, pas forcément fiable. Et je ne sais pas encore ce que ça donne quand je modifie l'image en mémoire. UnMapAndLoad sauvegarde-t-il les changements sur le disque? Même chose pour SEC_IMAGE, j'en ai bien peur... Remarque, je n'ai pas encore essayé mais si tu connais la réponse d'avance... ;-)
Pour l'instant je me sers de MapAndLoad mais j'ai comme l'impression qu'il vaut mieux songer à une autre solution.
(Tu vas voir, le plus difficile dans tout ça, ce sera le format PE. J'envisage pour l'instant pas de problèmes particuliers avec l'émulation même. M'agace.)