Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TROMPER GETPROCADDRESS


Information sur la source

Catégorie :Exécution Classé sous : dll, exe, virtuel, crochetage, import Niveau : Débutant Date de création : 01/09/2007 Date de mise à jour : 03/09/2007 20:34:07 Vu / téléchargé: 6 910 / 566

Note :
10 / 10 - par 5 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (37)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Bonjour,

Tout d'abord voici les qualités nécessaires afin de bien comprendre cette source :

- Savoir lire le langage vb
- Maîtriser la fonction "Declare"
- Savoir ce qu'est une "DLL"
- Connaitre le format de fichier "EXE" (ou "Portable Executable")
- Savoir ce qu'est un crochetage de fonction
- Avoir envie de lire la suite (cette qualité prend le dessus sur toutes les autres)

Pourquoi cette source :

Très bien alors maintenant que vous êtes avertis, on peut continuer. Cette source a debuté sur une étude du loader de windows XP. En effet la question etait "peut on ajouter dynamiquement des fonctions à un executable et les exporter avec GetProcAddress ?". Apres de longues heures de codage il s'avere que la reponse est "OUI". Donc concretement on demontre le fait qu'il est possible de transformer un EXE en DLL en runtime.

Mais que fait cette source :

Il faut vous imaginer le format de fichier EXE (qui est le même que celui des DLL) donc on va réecrire la memoire de l'EXE de telle sorte que le systeme croit que c'est une DLL (modification de l'entête et de la table d'exportation) et ainsi exporter des fonctions. On peut ainsi transformer l'executable en plugin ou bien encore re-router des fonctions d'une dll vers nos propres fonctions.

Que faut il penser de cette source :

- Si vous ne comprennez pas tout : Ne vous inquietez pas c'est normal car elle est issue de mon esprit tordu.
- Si vous trouvez que cette source est totalement inutile : Vous avez raison alors ne vous attardez pas dessus.
- Si vous vous appelez BruNews, Warning ou Renfield : alors prenez-la comme une dedicace personnelle.
- Si vous avez quand même reussi à lui trouver une utilité : Arretez la boisson ;)

 

Conclusion

Rien de plus...

Bonne pr@g
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

03 septembre 2007 20:34:07 :
Ajout des versions Excel 97 et Excel 2007

Commentaires et avis

signaler à un administrateur
Commentaire de moustachu le 01/09/2007 15:28:23

Salut,
Trop facile, ça fait dix ans que je fais ça déjà... bon ok, réponse 1 pour moi.
Ca ne t'embête pas si je note pas hein...

++moustachu

signaler à un administrateur
Commentaire de EBArtSoft le 01/09/2007 18:32:48 administrateur CS

Moustachu> Pour faire simple : imagines que tu puisses declarer une fonction et un module qui n'existe pas genre "Declare MaFonctionQuiExistePas Lib MonModuleQuiExistePas", puis qu'a partir de cette declaration tu puisses appeler n'importe quelle fonction qu'elle soit dans ton code ou dans une dll ou n'importe ou en memoire, ce serait bien non ?

Ben voila... ça fait ça (et bien plus encore) ! :p

signaler à un administrateur
Commentaire de Chatbour le 01/09/2007 18:46:58

Salut,

question débutante : est-ce c'est une invention ? une méthode qui existe déjà ?

bon franchement ça l'air malveillant ;)

je plaisante.. bravo !

signaler à un administrateur
Commentaire de moustachu le 01/09/2007 19:42:35

Ah oui ce serait bien... mais pourquoi ne pas appeler une fosnction qui existe dans un module qui existe ?? Ok je sors, mauvaise blague ;o)

Je vais quand même jeter un coup d'oeuil ! Ca a l'air fumant ton coup !

++
Moustachu

signaler à un administrateur
Commentaire de EBArtSoft le 01/09/2007 19:55:47 administrateur CS

Pourquoi ? ben par ce que ça existe deja et que c'est pas drole. Plus serieusement je ne connais aucune fonction en vb qui permette de transformer un exe en execution en dll. Si tu en trouve une je suis preneur.

@+

signaler à un administrateur
Commentaire de EBArtSoft le 01/09/2007 20:01:46 administrateur CS

J'explique : tu es dans ton programme exe puis tu appel mon objet VirtualDLL tu lui dit "tient crée moi une dll qui s'appel moustachu.dll et qui exporte une fonction moustachu1 et moustachu2"

Bien figure toi qu'il le fait et en plus le systeme va croire que ton exe est la dll en question. Apres pour ce qui est des application comme je le dit dans l'intro... j'en vois pas trop. Mais au moins c'est possible.

@+

signaler à un administrateur
Commentaire de moustachu le 02/09/2007 10:48:45

Je commence à comprendre...merci pour les éclaircissements. "Il est trop fort" comme dirait Schwarzy dans "Toto Story"(http://www.youtube.com/watch?v=gyN2qB7N-hY).

Je vais décortiquer tout ça !

++
Moustachu

signaler à un administrateur
Commentaire de windob le 02/09/2007 15:44:10

En effet ça peut etre tres utile pour contrer un firewall !
Comme en général les regles sont crées pour les applis communes comme IE et/ou Firefox, tu peux acceder a internet sans que le firewall ne pose de question mais ce n'est qu'un exemple.

Appart ça je ne vois pas bien dans quelles conditions pourrait servir ton code mais il est interressant de connaitre cette astuce !

Sinon je trouve ça intéressant de pouvoir faire des choses en général réservées aux langages bas niveau en vb :D !

signaler à un administrateur
Commentaire de MadM@tt le 02/09/2007 23:47:29

arf je me suis encore trompé, je suis sur asmfr au lieu de vbfrance non ? :D
vu que j'ai pas trop trop compris (mais grace à tes explications ça me parle un peu plus), je vais me contenter de dire : ben c'est cool, maintenant on peut le faire :D

Mais alors, en gros, on transforme notre exe (en mémoire) en DLL..? Ou alors on crée une DLL en mémoire en plus de notre EXE ? Et la DLL est réutilisable par seulement notre exe, ou n'importe quel autre EXE ?

J'ai parcouru le code et ça m'a aidé à comprendre, effectivement c'est interessant en soit.
(par contre j'ai été pris d'un bon fou rire quand j'ai lu le module VirtualDLLProc.cls :D)

Félicitations en tout cas pour ce travail !

signaler à un administrateur
Commentaire de GEDDi le 03/09/2007 11:47:26

Bonjour,

J'ai repris le code sous Excel 2002, juste changé App.hInstance par Application.hInstance, ça se 'compile' bien mais j'ai une erreur 53 (fichier introuvable) quand il tente d'acceder à 'ouais et alors ?', enfin à ce qui semblerait etre une dll virtuelle...

Bref, ça ne fonctionne pas :/
Pourrais-tu donner les prérequis de fichiers physiquement présents pour que ton code fonctionne s'il te plait ?

Merci

signaler à un administrateur
Commentaire de PCPT le 03/09/2007 19:36:51 administrateur CS

GEDDi -> VBA non compilable, donc pas "d'exe" à trouver et à transformer virtuellement en DLL.
aucun fichier autre que ceux présents dans le ZIP.

EB -> j'ai tenté avec un appel à un exe externe (en VB, avec une fonction bidon en module standart), sans succès.
"appel introuvable dans le point d'entrée machin" ou qqc du genre

sauf erreur de ma part (possible), même question que MadM@tt ??

beau boulot!
(BruNews va encore t'arracher les yeux :D)
++

signaler à un administrateur
Commentaire de EBArtSoft le 03/09/2007 20:43:16 administrateur CS

MadM@tt >

1. On transforme l'EXE en DLL (export de fonction) le systeme le reconnait comme tel avec GetProcAddress.

2. Ne fonctionne que pour le processus courant.

3. VirtualDLLProc.cls une classe c'est bien plus pratique pif paf tu crées une collection et tu te fais pas ch%*!

GEDDi > Voir exemples excel dans le zip.

PCPT >

1. Marche pour VBA avec 2 lignes de code à changer

2. Même reponse (2) que MadM@tt (Serait possible de transformer un exe hors process avec Read/WriteProcessMemory mais pas possible de partager des pointeurs entre les process)

@+

signaler à un administrateur
Commentaire de BruNews le 03/09/2007 21:15:59 administrateur CS

Réjouissons nous qu'il y ait un tout fou comme EB sur vbfrance, ça nous change des textbox numériques et autres fadaises du genre.

signaler à un administrateur
Commentaire de GEDDi le 04/09/2007 09:23:00

Hello,

Merci EBArtSoft !
En fait je viens de comprendre ton code :)
Et je me rappelais juste que ce que tu viens de faire est une vraie performance sous VB !
Car en C, ce code là est faisable en quelques lignes, c'est d'ailleurs un moteur similaire basé sur des FARPROC / GetProcAddress que j'ai implémenté dans mon langage de programmation (FBSL pour les connaisseurs, un hybride entre VB, PHP, JS)
Cependant merci pour ta perf sous VB/VBA!
Ca mérite simplement un 10/10 !

signaler à un administrateur
Commentaire de GEDDi le 04/09/2007 09:29:40

Hello,

Juste pour infos, voici ce qui est faisable avec mon langage et un petit moteur en C à base de FARPROC et de GetProcAddress :

#Option Strict
#AppType Console
Dim %hInstance, %fp, %iRet
hInstance = LoadLibraRY( "user32" )
  fp = GetProcAddress( hInstance, "MessageBoxA" )
  iRet = CallWindowProc( fp, Me, "Hello FBSL!", "Yooooooo!", MB_OK )
  Print "MessageBox code return is == " & iRet
FreeLibrary( hInstance )
Pause

:)

signaler à un administrateur
Commentaire de EBArtSoft le 04/09/2007 12:47:38 administrateur CS

GEDDi> Merci pour ton soutient. Dans le cas present ce n'est pas tout a fait ce que tu expliques car il ne sagit pas d'appeler une fonction de dll grace a son pointeur mais plutot de créer l'illusion qu'il existe une dll a l'emplacement de notre exe en mode execution (car a la compilation il est tres simple d'ajouter des fonctions).

En C le resultat est le même (je vais d'ailleur surement poster la source) et c'est bien plus simple à realiser car on a un acces direct a la memoire et on evite le crochetage de dll dans l'ide.

Bonne pr@g

signaler à un administrateur
Commentaire de cacalex le 05/09/2007 15:35:00

Juste wow...

J'vais faire tout plein de tests avec ça :)

signaler à un administrateur
Commentaire de Warny le 06/09/2007 17:26:35

Salut,
Dans la pratique, ça permettrai pas de faire la même chose que les fonction delegate du .NET ?
Toujours est-il que tes prises de tête me laisse régulièrement sur le c... bravo

signaler à un administrateur
Commentaire de Afyn le 08/09/2007 12:49:48

Il est trop fort ... (mais pas comme  Schwarzy Moustachu... comme Cindy)



Heu ... ben Oui Cindy Trop Fort

Yop

Afyn
NAvedac

signaler à un administrateur
Commentaire de EBArtSoft le 08/09/2007 13:19:14 administrateur CS

"Mon Toulousaing Préferé" > Cindy Trop Forte, bougre de pingouin ;p

Et vive les pattes fraiches !

signaler à un administrateur
Commentaire de Afyn le 08/09/2007 17:41:24

Les pattes fraîches ... mais sans poils ... pas comme les portuguaises... qui au lieux d'être bien foutues ... sont
souvent bien touffues ... (rien à voir avec le crochettage de fonction
mais bon)

Allez ... touffue tout flâmme ... (proverbe grec)

Afyn
Navedac

signaler à un administrateur
Commentaire de Valentino le 12/09/2007 16:12:45

Salut EBArtSoft,
Tu nous aurais pas refait un "rundll32.exe" ? lol
Bravo pour le contournement ;o)

@+

signaler à un administrateur
Commentaire de EBArtSoft le 13/09/2007 18:48:21 administrateur CS

Valentino > Rien a voir avec rundll32 qui est bcp plus simple a faire puis qu'il sagit de charger la dll et d'appeler la fonction (en 3 lignes de code tu te fais un rundll32).

signaler à un administrateur
Commentaire de draluorg le 06/12/2007 14:27:52

Plop

Encore un code de ouf! :)

Est-ce imaginable d'utiliser cette methode avec CreateRemonteThread ? (je crains de connaitre deja la reponse mais avec toi on sait jamais...)

En tout cas chapeau!

++

signaler à un administrateur
Commentaire de EBArtSoft le 06/12/2007 18:57:30 administrateur CS

Oui c'est possible mais on tombe inevitablement sur les limitations de VB en matiere de partage de memoire et de virtual machine.

@+

signaler à un administrateur
Commentaire de draluorg le 06/12/2007 19:12:50

Eh veux tu dire oui si on ne fait pas appel a la VM dans la fonction appelée ?

Je vais faire quelques test a l'occasion, ce serait bien si on pouvait utiliser quelques api dans un autre process sans devoir faire une dll en C... (bien que j'aurais surement plus vite fait de faire ma dll en C mais bon c'est moins fun)

++

signaler à un administrateur
Commentaire de EBArtSoft le 06/12/2007 22:49:39 administrateur CS

Il existe deja sur le net des codes pour faire du safe thread en vb mais c'est clair que le VB 6 n'est pas fait pour ça.

signaler à un administrateur
Commentaire de Afyn le 07/12/2007 17:28:36

Tu vis toujours ?

Afyn
Navedac

signaler à un administrateur
Commentaire de GEDDi le 07/12/2007 19:41:49

Hi !

A essayer avec FBSL, comme il est codé en C et qu'il supporte les Threads :)

@+

Gerome GUILLEMIN
http://www.fbsl.net

signaler à un administrateur
Commentaire de BruNews le 07/12/2007 23:01:50 administrateur CS

Directement en C c'est bien aussi.

signaler à un administrateur
Commentaire de EBArtSoft le 08/12/2007 11:53:42 administrateur CS

J'allais pas le dire !

;)

signaler à un administrateur
Commentaire de Afyn le 08/12/2007 13:31:55

C'est quoi le C ?

Afyn - Navedac

signaler à un administrateur
Commentaire de EBArtSoft le 08/12/2007 22:17:59 administrateur CS

La troisieme lettre de l'alphabet et accessoirement... la troisieme lettre de l'alphabet.

signaler à un administrateur
Commentaire de PCPT le 08/12/2007 22:43:11 administrateur CS

c'est quoi l'alphabet ?

signaler à un administrateur
Commentaire de BruNews le 09/12/2007 00:08:16 administrateur CS

#define C ('c' - 32)

signaler à un administrateur
Commentaire de EBArtSoft le 09/12/2007 11:49:55 administrateur CS

Bon les enfants on est pas sur IRCfr ici ;)

(enfin presque)

signaler à un administrateur
Commentaire de ad vitam aeternam le 29/12/2007 16:59:40

Salut!

En fait si je comprends bien on peut faire un programme qui s'auto-réécrit?

Par exemple donc, un programme qui "apprend" en auto changeant un jeu d'instruction?

Moi je trouve celà vraiment intéressant!

Bonne continuation!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

.EXE et VB5FR.DLL [ par hpfx ] Comment faire pour se debarraser de VB5FR.DLLJ'aimerais faire un .EXE qui ne necessite que le runtime : MsVbVm5.DLL (ou qqchose comme ca) mais en tou ActiveX.exe et ActiveX.dll [ par Philtous ] Salut à vous, J'aimerais savoir si c'est possible de me donner un exemple simple (facile à comprendre) d'un ActiveX.exe ou .dll en VB.Merci,Philippe compiler un source en EXE [ par Patrice ] Bonjour à tous,Je sais qu'on peut compiler un source avec Visual Basic mais quand on met ce EXEsur un autre Ordinateur le programme ne peut fonctionne Dépendances EXE, OCX, DLL [ par Amstel ] Existe t-il un logiciel qui permette de connaitre les dépendances d'un EXE, d'un OCX ou d'une DLL ? transformer une feuille en mdichild [ par Corwyn ] J'aimerais afficher une feuille qui fait partie d'une dll activex ou d'un exe activex (a) à partir d'un projet vb exe normal.Mon exe vb est une feuill Mon exe ne s'ouvre pas (pas de DLL) [ par jeg ] Lorsque j'envoie mon exe sur Internet ou sur certains ordi, il ne s'ouvre pas, il manque une DLL.Helpmerci Un seul EXE, comme au bon vieux temps ! [ par rimbaud ] Bonjour à tous, bravo milles fois pour ce site !Une question simple, et récurente sur ce forum : une réponse certainement complexe:je désire programer debuger une dll activeX [ par bidules ] Salut,Comment faire pour debuger une activeX?moi je fais, ds proprité du projet, demarrer un exe.Ds l'exe j'ai mis la reference de la dll compilé.Ensu Dll.. Dans un Exe ??! [ par Fry ] Yo les MEcs... je voudrait si cela peut mettre des Dll . dans un Exe.. et si cela se peut .. de me dire comment :)


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.