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

Windows Discussion :

Windows Seven - PE format - Exported Functions


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Juillet 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Juillet 2010
    Messages : 30
    Points : 29
    Points
    29
    Par défaut Windows Seven - PE format - Exported Functions
    J'ai écris un petit code qui liste les "exported functions" d'une dll Windows, seulement depuis Seven on trouve ce genre de fonction: api-ms-win-core-processthreads-l1-1-0.CreateRemoteThreadEx
    Cette fonction est enfaite une "forwarder" du coup il me faut allé dans api-ms-win-core-processthreads-l1-1-0.dll et lister cette dll à la recherche de CreateRemoteThreadEx. Mais le problème est que je n'obtiens pas la bonne adresse de la fonction, adresse que j'ai comparé avec LoadLibrary && GetProcAddress.
    J'ai ce problème que depuis Seven le code a été écrit sur Vista et les forwarders du type NTDLL.TpReleasePool sont très bien géré.
    Donc si quelqu'un a une idée...

    Le code: http://pastebin.com/gmcqfC9C

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Hello,

    En fait ton parsing de l'export table est correct, c'est simplement que certains changement de bas niveau ont eu lieu dans le découpage des fonctions sous Windows 7.

    Ton LoadLibrary() sur api-ms-win-core-processthreads-l1-1-0.dll charge en fait kernel32.dll. Du coup ta fonction pointe encore sur le forwarder de la fonction forwardée dans kernel32.dll

    Concrétement le code de CreateRemoteThreadEx dans api-ms-win-core-processthreads-l1-1-0.dll est une fonction vide. C'est le chargeur de Windows (Windows Loader) qui substitue api-ms-win-core-processthreads-l1-1-0.dll avec kernelbase.dll, ce qui fait que la DLL api-ms-win-core-processthreads-l1-1-0.dll n'est jamais chargée.

    Pour résumer, le 'vrai' code de kernel32!CreateRemoteThreadEx() se situe dans kernelbase!CreateRemoteThreadEx().

    C'est simple à voir sous Windbg:

    0:000> u kernel32!CreateRemoteThreadEx
    kernel32!CreateRemoteThreadEx:
    75261ed1 ff2560082675 jmp dword ptr [kernel32!_imp__CreateRemoteThreadEx (75260860)]
    75261ed7 90 nop
    75261ed8 90 nop
    75261ed9 90 nop
    75261eda 90 nop
    75261edb 90 nop

    0:000> dd 75260860 L1
    75260860 76a02ef3

    0:000> u 76a02ef3
    KERNELBASE!CreateRemoteThreadEx:
    76a02ef3 687c010000 push 17Ch
    76a02ef8 68e878a276 push offset KERNELBASE!BemFreeContract+0x3dc (76a278e8)
    76a02efd e8b2310200 call KERNELBASE!_SEH_prolog4_GS (76a260b4)
    76a02f02 8b4508 mov eax,dword ptr [ebp+8]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Juillet 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Juillet 2010
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    hello et merci pour ta réponse mais j'ai une autre petite question comment je peux le savoir depuis la dll ? pour réaliser mon code, c'est indiqué dans la dll qu'enfaite la fonction ce trouve dans telle dll ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Oui, c'est indiqué.
    Tu peux peut-être trouver quelques infos ici:
    http://blogs.msdn.com/oldnewthing/ar...27/680250.aspx mais ça parle assez peu des redirections.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Juillet 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Juillet 2010
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    sorry mais je ne trouve pas

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 274
    Points
    274
    Par défaut
    Comme la vrai adresse est substitué, je ne pense pas qu'avec une "analyse morte" ce soit possible.
    Quelqu'un aurait il des informations sur comment exactement le windows loader substitue ces deux adresses ?

    Comme on suppose que c'est en runtime, tu pourra observer l'adresse qu'en runtime.
    Neitsa te montre sous windbg qu'il est facile de voir le saut vers la vrai adresse.

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 274
    Points
    274
    Par défaut
    apres avoir regardé rapidement l'application d'opc0de.
    Il pourrait y avoir une solution crade, c'est à dire resolv la fonction CreateRemoteThreadEx de kernel32 par exemple.

    Ensuite, avec un pointeur sur la fonction, lire l'adresse qui est a address+2
    C'est a dire faire un read qu'on voit que les opcodes du jump sont :
    ff2560082675
    si on evite le ff25 qui sont les opcodes du jump, on peut read l'adresse qui nous interesse.
    Ensuite, en regardant a cette adresse, on peut optenir directement l'adresse de la fonction que l'on veut.

    Ceci est un peu crade, mais peut etre fait en quelques lignes de C ou d'assembleur.

    Mais en regardant dans la table d'import (pas de debugger sous la main) on peut pas avoir le meme resultat plus facilement ?
    Si au runtime les adresses sont changé, c'est soit dans la table d'import soit dans le code (j'opterais plus pour la table d'import).

    On pourrait donc en dumpant la table d'import y arriver plus facilement ?

Discussions similaires

  1. Comment formater windows seven?
    Par breat60 dans le forum Windows 7
    Réponses: 1
    Dernier message: 04/06/2009, 22h54
  2. window.addEvent is not a function et iCarousel
    Par arconobo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/02/2008, 15h18
  3. Réponses: 3
    Dernier message: 19/02/2008, 10h23
  4. Problème format export Excel
    Par guigui11 dans le forum ASP
    Réponses: 3
    Dernier message: 05/12/2006, 10h34
  5. [DB2] [Windows vers Iseries] Import/Export ?
    Par fweiner dans le forum DB2
    Réponses: 8
    Dernier message: 28/08/2006, 12h56

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