IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

[Débutant] Détourner un appel de fonction DLL dynamique


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut [Débutant] Détourner un appel de fonction DLL dynamique
    salut tout le monde, pour commencer je suis super debutant qui essaye de faire quelque chose de super compliqué et qui a besoin de super aide, alors j'ai une dll chargé dynamiquement dans un programme c++, je recupere l'adresse d'une fonction et je veux le detourner dans une autre fonction ce qui donne a peu près ce qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //loadlibrary
    //fonction=getprocaddress
    char *FunctionPointer=(char *)fonction;
     
    asm("LEA EDX, _FunctionPointer");//et la j'ai essayé differente instructions
    asm("MOV EDX,[EDX]");
    asm("MOV byte ptr [EDX],0xEA");
    et c'est la que ça foire, dans certaines instructions testée le programme plantais, dans d'autre il modifiais la valeur de FunctionPointer et dans d'autres je ne savais ce qui se passais..

    donc si quelque a une idée, elle est la bienvenue. merci d'avance
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  2. #2
    Inactif
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Il exite de méthodes éprouvées de re-routing. Plusieurs articles ont été écrits là-dessus et tu devrais pouvoir retrouver facilement via un moteur de recherche. Simplement, il est important de bien comprendre que détourner un système c'est aussi prendre en charge toute une série de mécanismes (que tu as de grande chance de ne pas connaître puisque tu désires utiliser le re-routing ...). Il est souvent nettement plus profitable de descendre en dessous du mécanisme qui te "dérange" pour te brancher de la manière la plus standard sur ce que l'OS te propose. Vu la syntaxe utilisée le SDK et le DDK devraient te simplifier le travail, ainsi que toute les groupes spécialisés sur google. Maintenant, si c'est de la surveillance ou du traçage d'applications, la méthode que tu désires utilisée n'est pas la bonne. Microsoft propose une série d'outils disponibles en téléchargement et intégrés dans les versions pro de Vista.

    @Plouchh

  3. #3
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    non non non, je ne veux pas detourner un système, c'est quand meme ma faute je n'ai pas donné d'explication, alors voila je vais le faire, j'ai un serveur proxy qui compresse les pages HTML a la methode de Huffmann, ce que je veux c'est hooker la fonction receive du systeme client afin de decompresser la page puis rebrancher sur elle, donc ce que je veux c'est ajouter une etape intermediaire dans le chemin habituel.
    j'ai jeté un coup d'oeil sur le DDK et ça a l'air de prendre beaucoup de temps, chose que je n'ai pas.

    alors une idée ou une suggestion ?
    merci pour ta reponse.
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  4. #4
    Inactif
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Pour ce que tu veux faire, le DDK n'est pas vraiment approprié, le SDK est plus indiqué. Si je comprends bien, tu veux "inclure" un module de traitement, (un filtre) dans la chaîne de réception de ton flux réseau ? L'assembleur n'est pas plus indiqué pour faire cela, à moins que toute ton application ne soit déjà en assembleur (ce dont je doute car tu n'aurais pas le problème que tu sioulèves). Plusieurs spécialistes réseau et flux html pourraient répondre à ta question relativement générale.
    Tu peux faire cela de plusieurs manières, via la création d'un composant COM par exemple...
    Plus ton application sera coopérative avec le système, plus elle sera maintenable facilement et supportera les évolutions de l'OS sans ré-écriture du code.

    Qui dit: Dieu n'existe pas, ne dis plus rien

  5. #5
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Windows fonctionne en mode protégé.
    Et ce qui est protégé, dans ce mode, c'est la mémoire.

    En mode protégé, le système n'autorise pas un programme à faire n'importe quoi avec la mémoire.
    En particulier, il ne permet pas qu'un programme écrive dans une zone de code.
    Surtout dans une DLL qui est une zone de code partagée entre plusieurs programmes.

    Par contre, Windows permet à un programme de détourner certains messages par une méthode utilisant les Hooks.
    Citation : A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic in the system and process certain types of messages before they reach the target window procedure.

    Pour les Hooks, voir la MSDN Library à l'adresse :
    http://msdn2.microsoft.com/en-us/library/ms632589.aspx

  6. #6
    Inactif
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Les crochets rendent difficiles les traitements à la volée et en temps réel.
    Si, pour la souris ce n'est pas trop perturbant, pour une moulinette dans une chaîne de traitement cela risque de poser d'énormes problèmes et je ne pense pas que sur la MSDN tu trouves quoi que ce soit qui faciliterait ce genre de déstabilisations... Microsoft se tirerait une balle dans le pied et ce n'est pas dans ses habitudes recensées...

    Le but est de se sustituer à un appel d'API connu (du moins, c'est ce que nous dit l'auteur du post):

    Soit il est connu par détention du source et dans ce cas, la simple réécriture de la partie de code concernée suffirait, ce n'est donc pas ce cas de figure.

    Soit il connaît le nom du module et le nom de l'offest dans le module dll concerné. Il me semble que nous sommes plutôt dans ce cas de figure là.

    Il paraît illusoire d'espérer que Microsoft donne les moyens de se substituer à un appel de dll (facilement.. ) ça craindrait pour plusieurs raisons évidentes !
    Cependant il existe un mécanisme de re-routing possible mais pas vraiment
    MSDN: http://research.microsoft.com/sn/detours/

    Mais, comme pour l'étude des SDK/DDK, un effort minimum est nécessaire.
    Ceux qui verraient ici un grââaaaal risquent de
    D'autres mécanismes existent si vous désirez développer des application "réellement" professionelles (quoi que tout soit possible, hélas, dans le monde professionel...).

    @Plouchh

  7. #7
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    salut,

    @Plouchh: je suis allez faire un tour su msdn(COM) et ça m'a un peu effrayer (cela prendrai beaucoup de temps pour le faire a mon avis), mais la avec 'detours' ? chapeau, c'est exactement ce qu'il me fallait (apres un bref, mais vraiment bref, aperçu), merci infiniment pour le lien.

    @Prof: je ne pense pas que les hooks me viendrai en aide, de plus je pense que les hooks sont des trucs d'interfaces (message queue), dans msdn ils sont presentés sous la rubrique 'windowing' de 'user interface'. merci quand meme pour la reponse.

    sujet clos (pour l'instant ).
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  8. #8
    Inactif
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Mes avertissements restent valables... donc...

Discussions similaires

  1. [Débutant] Appeler une fonction DLL C# depuis le C++ par API LOADLIBRARY
    Par yann458 dans le forum C#
    Réponses: 3
    Dernier message: 07/05/2013, 23h49
  2. vérification liaison RS232 avec VB6 avec appel au fonction .dll
    Par tatawissa dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 11/04/2013, 17h47
  3. Appel de Fonctions DLL
    Par mindover280 dans le forum VB.NET
    Réponses: 5
    Dernier message: 26/05/2008, 22h34
  4. Réponses: 9
    Dernier message: 20/03/2008, 18h19
  5. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo