Securite

xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005 - 8 mars 2004 à 21:07
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005 - 11 mars 2004 à 11:47
voila j'ai fusioner deux exe le premier c le mien et le 2eme c un autre[n'importe le quel ] voila je veut dire a mon prog quand il finira son execution il lancera l'autre sans qu'il le copier sur mon disk dur puis il execute
merci
Xarier@hotmail.com
http://www.membres.lycos.fr/dev3d/

8 réponses

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
8 mars 2004 à 22:03
je pense que tu seras obligé de le copier sur le disque dur !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
8 mars 2004 à 23:35
Je cherche à faire la même chose que toi dans le principe, c'est à dire lancer un exécutable qui est déjà en mémoire vive sans le redescendre sur le disque-dur...

ça à l'air très difficile à faire, mais c'est dorcément réalisble...
Il faut en gros aller chercher ce qui se cache derrière l'API CreateProcess...

C'est difficile à faire car si se serait facile, se serait ultra simple de faire un virus vite fait...
;)

WriteProcessMemory permet d'écrire dans la zone mémoire (espace d'adressage virtuelle) d'un process.

Ce qui est chiant, c'est qu'il faut balancer juste le code machine de l'exécutable (en commençant par le point d'entrée de l'exe) dans le process et ensuite faire exécuter le thread par le processeur.

Bref, c'est très très chaud... mais je veux y arriver...

Je continue mes recherches... Cherche aussi de ton coté et tiens moi au courant...

A+

Jock
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
9 mars 2004 à 12:03
Ok c ta des new please dit le moi :)
Xarier@hotmail.com
http://www.membres.lycos.fr/dev3d/
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
9 mars 2004 à 21:41
C est vrai que ce serais tres interessant comme technique, mais le probleme de mettre le code direct en memoire c est que du coup les adresses risquent de ne plus etre valables!! Le format PE (format des executables windows) est tres complexe et un certains nombre de choses sont faites avant l execution de main() par le noyau. A mon avis c est tres loins d etre gagne...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
9 mars 2004 à 22:12
A mon avis, il est essentiel de bien maitriser 3 choses :

- Comme tu le dis MetalDwarf, le format des exécutable PE (Win32), c'est à dire, bien comprendre sa structure (en-tête et les différentes sections : code, data, pile, ...)

- La mémoire virtuelle (cependant, il n'y a pas à s'inquiéter au niveau des adressages, car c'est le VMM Virutal Memory Manadger de Windows qui gère la résolution d'adressage entre l'espace d'adressage virtuel du processus et la mémoire physique, c'est à dire la RAM ou le fichier de SWAP).
Il faut juste se baser sur l'adresse ImageBase contenue dans l'en-tête de l'exécutable.

- Les processus Windows (pour lancer l'exécutable en fournissant l'entry point) afin que le processeur puisse exécuter le code.

Il faut faire ce que fait l'API CreateProcess (elle crée un process à partir d'un fichier exécutable).
C'est pas de la tarte, mais c'est tout à fait réalisable...

C'est excellent pour apprendre pleins de choses sur Windows, à un nivreau proche du noyau, car on va faire ce que les API ne nous permettent pas de faire...
Il faudra peut être faire un peu d'assembleur au moment de passer l'entry point au processus actif Windows. :(

Jock
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
10 mars 2004 à 12:47
je crois que j'ai trouvé comment faire mais j'ai pas encore essayer pas manque de temps
il faut mettre un code asm
le jmp et puis l'adresse de l'entete de l'exe je crois que ca va marché testé svp est repondé moi
Xarier@hotmail.com
http://www.membres.lycos.fr/dev3d/
0
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
10 mars 2004 à 13:32
Quand tu auras le temps, tu essayeras...

C'est très très loin d'être aussi simple que cela...
Le processeur fonctionne avec des adresses de la mémoire vive (RAM) via le bus de données et le bus d'adresse.

Les adresses qu'il y a dans un exe PE (format de des exe Win32) sont des adresses virtuelles. C'est Windows via le VMM (Virutal Memory Manager) qui s'occupe du mécanisme de pagination à la demande et surtout du mapping (c'est à dire qui fait correspondre une adresse virtuelle avec une adresse physique de la RAM ou du fichier d'échange SWAP).

Les adresses présentent dans l'exe sont, je le répète une dernière fois, des adresses virtuelles qui font parties de l'espace d'adressage du processus (l'exe une fois lançé).
Chaque processus a un espace de 2Go de mémoire (il y a 2 Go reservé pour le Kernel Windows et des zones de 64Ko reservé pour les pointeurs NULL et les pointeurs invalides).

Le VMM s'occupe de charger l'exécutable dans des PAGES (1 page virutelle = 4Ko). Ces pages sont ensuite chargé en mémoire vive (ou dans le SWAP) dans des PAGES PHYSIQUES DE 4KO en fonction des besoins du processus.

Donc dire qu'il suffit de faire un jump sur l'entry point de l'exe
est un peu trop facile...

Jock
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
11 mars 2004 à 11:47
c un proguer en asm qui ma dit que lui il lui a suffi de faire un jmp est voila !!!!!
Xarier@hotmail.com
http://www.membres.lycos.fr/dev3d/
0
Rejoignez-nous