begin process at 2008 07 19 08:46:05
1 212 721 membres
60 nouveaux aujourd'hui
14 165 membres club

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é: 5 610 / 491

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

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

03 septembre 2007 20:34:07 :
Ajout des versions Excel 97 et Excel 2007
  • 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

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS