begin process at 2010 03 19 23:48:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

c, c++ et asm

 > 

execution de code dans DS


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

execution de code dans DS

mardi 23 août 2005 à 00:21:33 | execution de code dans DS

Arnaud16022

Membre Club
hello ...
question importante - pour moi -
y a-t-il moyen d executer du code contenu dans le Data Segment ?
je veux dire....
je cree unn pointeur . celui ci pointera vers uune zone du data segment ( si il y a moyen l allouer de la mem dans CS suis preneur)
on alloue ded la memoire et on copie colle a partir du disque un code assemblé/linké .
en faisant dans le prog principal un call sur le pointeur, le code copié devrqit etre executé;
je ne parle ici pas des compilcatons / pbs de ce systeme, je veux juste savoir une chose:

est-ce possible ?

je ne pense pas, etant donne qu apres l'execution d une instruction, un registre est incrementé.... enfin j en sais rien

si non :

est-il possible d'allouer de la mem dans le Code Segment ? la encore, je doute ... enfin ... prions le Seigneur.
Audaces fortuna juvat , non ?
++
ad

_______________________
Omnia vincit labor improbus
mardi 23 août 2005 à 09:16:34 | Re : execution de code dans DS

Nasman

Je ne suis pas spécialiste de trucs aussi pointus mais peut-être que je pourrais faire avancer le schmillblick.
Le code que tu devrais insérer est-il de longueur fixe ? Dans ce cas on peut imaginer modifier les infos du header du programme (de quel type de fichier s'agit-il, 16 bits, 32 bits, PE ?) pour laisser de la place au programme à insérer.
L' insertion devrait pouvoir s'effectuer dans la zone des données mais l'exécution est plus problématique. Il faudrait définir la section des données comme readable, writable (normal) mais aussi executable. Ceci doit pouvoir être modifié avec un éditeur hexa en changeant les octets régissant les droits d'accès aux sections.
Tu devrais choisir entre:
Insérer le code dans la section code : dans ce cas la section code doit être writable

Insérer le code dans la section data : dans ce cas la section data doit être exécutable

Pour voir mieux la faisabilité de la chose je pense que le format du fichier exécutable doit être pris en compte.
.com (1 seule section CS=DS) peut-être plus facile à gérer
.exe 16 bits (peut-être qu'un call far permet de "sauter" dans la section data mais je ne sais pas si on peut la rendre exécutable)
.exe 32 bits (je pense que plus de possibilités sont offertes mais il faut savoir modifier les accès aux sections).

mardi 23 août 2005 à 09:16:48 | Re : execution de code dans DS

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
SOUS WINDOWS:
Voir 3eme param de VirtualProtect (positionner le flag PAGE_EXECUTE).
VirtualAlloc idem.

ciao...
BruNews, MVP VC++
mardi 23 août 2005 à 13:37:34 | Re : execution de code dans DS

Arnaud16022

Membre Club
heu ...alors:
"Le code que tu devrais insérer est-il de longueur fixe" oui , d une certaine facon, mais cette taille n'est connue qu apres la compilation du prog.

" Tu devrais choisir entre:
Insérer le code dans la section code : dans ce cas la section code doit être writable
Insérer le code dans la section data : dans ce cas la section data doit être exécutable"

bah oui et justement ma question c est : comment on fait ca ? en C++ je veux dire, ou si c est pas possible en asm

pour les far jumps j'y avais deja pense mais la ya des segfaults ( selon Funto)

pour VirtualProtect  et VirtualAlloc  je ne sais pas ce que c est.
petite precision: c'est pour Windows;  le portage pour Nux est prevu mais l'AT&T, c'est chiant. ca attendra que la version win marche.

_______________________
Omnia vincit labor improbus
mardi 23 août 2005 à 15:01:10 | Re : execution de code dans DS

BruNews

Administrateur CodeS-SourceS
VirtualAlloc y en a plein mes sources, t'auras pas de malaise pour en trouver. Faut passer par cette fonction pour allouer de la mémoire correctement alignée.
En plus de MSDN, faut lire Richter et tu sauras tout, pas compliqué du tout.
VirtualProtect change les drapeaux de page mémoire, encore plus simple.

ciao...
BruNews, MVP VC++
mardi 23 août 2005 à 15:29:19 | Re : execution de code dans DS

Arnaud16022

Membre Club
hum suis allé voir sur MSDN pour VirtualAlloc, ya meme un exemple de code pour ca, le seul pb c est qu'ils utilisent des termes d'anglais que je ne connais pas lol

bon alors en gros, pur etre sur:
J'utilise VirtualAlloc un peu comme malloc, en utilisant le flag PAGE_EXECUTE ( a propos, pk pas PAGE_EXECUTE_READWRITE ? il faut bien que j'y ecrive dans cette mem.... )
ensuite j'y copie mon code, lequel commence, en asm, par un label et se finit par un ret
dans le prog je fais, en asm, un call sur le pointeur que m'a donné VirtualAlloc, et qd le code est executé ca revient comme un grand au prog principal, puisqu'il n'y a qu'a depiler l'adresse... non ? ya une couille qqpart ou c'est cesé marcher ?
moi en tout cas j'essaye comme ca.
merci beaucoup
++
ad

_______________________
Omnia vincit labor improbus
mardi 23 août 2005 à 15:43:54 | Re : execution de code dans DS

BruNews

Administrateur CodeS-SourceS
PAGE_EXECUTE_READWRITE devrait aller.
J'utiliserais le JMP que je mettrais sur stack et le dépilerais pour retour depuis ce code mais tu peux tester ta version, les 2 peuvent s'admettre si elles sont correctement codées (l'asm que tu dois mettre a l'adresse allouée).

ciao...
BruNews, MVP VC++
mercredi 24 août 2005 à 08:56:51 | Re : execution de code dans DS

patatalo

Membre Club Administrateur CodeS-SourceS
salut, un petit exemple d'injection et execution de code dans un process. http://www.asmfr.com/code.aspx?id=19632 dans empty.asm, tu trouvera un code qui lance un process en le bloquant. il alloue un bloc memoire(EXEC/READ/WRITE) dans le process cible. le code infiltre.asm est initialisé et inséré dans ce bloc memoire. on modifie le contexte de thread afin de pointer eip sur le bloc memoire. on relance le thread qui execute infiltre.asm. @++
mercredi 24 août 2005 à 10:29:05 | Re : execution de code dans DS

Arnaud16022

Membre Club
ah oui mais la ya comme qui dirait un gros pb:
c'est que ca dépasse de fort loin mes maigres connaissances en asm lol
admettons que je veuille mettre en memoire ce code:

segment .text
    global _asm_main
_asm_main:
    enter 0,0
    pusha 
    mov eax,0
    popa
    leave
    ret

on peut pas dire que ce soit méga sophistiqué comme code. bon jle compile (nasm -f win32 test.asm), jle linke (ld test.obj -o test.exe --entry _asm_main, ld est le linker de dev-c++), et je me retrouve avec un exe de 3Ko...ce qui me semble deja enorme comparé au code.
maintenant si je le chager avec le desassembleur de VC6, impossible de retrouver ce code dans tout ce fourbi ...par contre ya partout du code bizarre et inconnu.

ceci dit, j'ai essayé ton prog sur mon test.exe (modifié avec une boucle infinie) ca marche bien ton truc ^^

++
ad


_______________________
Omnia vincit labor improbus
mercredi 24 août 2005 à 11:56:06 | Re : execution de code dans DS

patatalo

Membre Club Administrateur CodeS-SourceS
re,

3Ko est une bonne taille car tu doit ajouter le pe header.

@++

1 2

Cette discussion est classée dans : moyen, code, execution, ds, segment


Répondre à ce message

Sujets en rapport avec ce message

utilisation des variables [ par moffer ] Bonjour à tous.J'ai besoin de recopier ma variable chaine au segment 0b800 pour l'afficher, sans utiliser les interruptions. (c'est pour ensuite la fa DLL et Code Segment [ par Taron31 ] Bonjour, j'ai une question peut-être un peu étrange : en effet, je voudrais savoir si tout le code d'une DLL (par exemple NtDll.dll) est situé dans un question de sécurité [ par deck_bsd ] Yop,Voila j'ai apris récemment que le flag IF (int flag) quand il est à 0 stop toutes les interruptions matériels , donc la clock fonctionne plus , le Boot et heure [ par henri12 ] je fais un essai de changement de l heure avec l interruption 21h sous le boot l heure n est pas changerpourquoi.286C   ;Code de bootsecteur permettan ebx et interface C/C++ [ par kaervas ] Bonjour, pourquoi ne pas modifier la valeur du registre %ebx dans une interface en C/C++? En effet, j'ai code plusieurs fonctions dans des .o, que j'u Peut-on générer du code pour 68hc16 avec Visual Studio... [ par search47 ] J'utilise Visual Studio .NET (C#)Est-il possible d'utiliser ce même éditeur pour compiler du C pour un 68hc16 (ou autre) et générer le fichier binaire [nasm] ligne de commande [ par Kevin68 ] Bonjour :),Je suis débutant en assembleur, j'utilise nasm sous linux.J'ai cherché partout un exemple de code source qui me permettrait de récupérer le Pour assembler un code [ par neo1012 ] Salut,Une fois que vous avez ecrit un source en ASM, avec quoi et comment vous l'assemblez ? Probleme avec NASM et ALINK [ par epineurien ] Bonjour ! Voilà ma question : Je commence à utiliser NASM mais j'ai quelques problemes avec le linker ; Alink. Avec ce code (issu de la doc. de NASM Cherchez l'erreur [ par neo1012 ] Salut, J'ai commencé l'ASM il n'y a pas longtemps, et hier j'ai fait mom premier programme: jmp string code: pop ecx mov bl,1 mov dl,23 ;mov al,4 i


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,435 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales