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 :

Lecture mémoire avec ReadProcessMemory


Sujet :

Windows

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut Lecture mémoire avec ReadProcessMemory
    Salut!

    j'essaye de récupérer l'adresse d'une variable (dont je connait la valeur) d'un autre programme.

    jusque ici j'arrive a récupérer les droit de debug, faire mon OpenProcess et ReadProcessMemory, bref ça marche. Mon problème c'est la rapidité de l'exécution, actuellement je cherche ma variable dans toute la mémoire, je pense bien que c'est pas la bonne solution... mais comment réduire la plage de mémoire dans laquelle chercher? y'a t'il d'autre moyen d'accélérer le processus (niveau algo par exemple)?

    merci!

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par bebaijhi Voir le message
    mais comment réduire la plage de mémoire dans laquelle chercher? y'a t'il d'autre moyen d'accélérer le processus (niveau algo par exemple)?
    Peut-être via la Debug Help Library, en tentant de récupérer les symboles de l'exécutable ?
    Même s'ils n'existent pas, cela pourrait te donner une plage d'adresses de données (et non pas de code, donc) qui te permettraient de limiter ta recherche.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    je vais essayer de regarder ça, ça a l'air encore bien compliqué avec mes connaissances et jvais avoir pas mal de notion a comprendre encore!

    merci

  4. #4
    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
    Bonjour,

    Si les symboles sont disponibles, la solution de Mac LAK est la bonne. S'ils ne sont pas dispos, c'est devient plus problématique.

    Le plus simple est de faire un peu de reverse sur le binaire et de voir où ce situe l'init de la variable, puis récupérer sa valeur via un debugger. Dans ce cas là, qu'elle soit globale, dans le tas, ou même locale à une fonction, tu pourra l'obtenir.

    Dans ce cas, il faut juste faire un petit debugger minimal, mettre un breakpoint à l'instant ou la variable est initialisée, mettre le thread en pause et récupérer le CONTEXT du thread.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    Ok, j'ai pas encore eu le temps de regarder, et je sais donc pas encore ce qu'est un symbole...

    J'ai déjà récupérer l'adresse d'une variable souhaitée grâce a cheat engine, un logiciel fait pour modifier la valeur de certaines variable de jeux. après plusieurs test, l'adresse change a chaque essai, je me suis donc dit que ce n'etait pas une variable globale.
    Mais je me pose une question, une variable globale d'un logiciel aura toujours la même adresse?? si ? non? ou aura t'elle une adresse relative a une autre adresse (qui définit le début du programme par exemple) ou alors une adresse complètement aléatoire?
    En gros, si j'arrive a récupérer l'adresse d'une variable, cette adresse sera t'elle encore bonne la fois que j'exécuterai le programme?

    Merci de votre aide!

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Généralement, cette adresse est fixe, si c'est une variable globale.
    Mais tout bon programmeur n'utilise pas de variables globales.

    De plus, si c'est tout de même une variable globale, elle peut être dans une dll qui peut avoir une adresse de chargement qui change au gré des collisions de chargement de dll. Des options des systèmes, qui sont peut-être devenu le comportement par défaut, permet de rendre aléatoire les adresses de chargement des DLL.

    Et là, c'est sans tenir compte des anti-virus, logiciels et composants de cryptage et de protections et d'offuscations qui ne sont là que pour vous empêcher de faire ça.

    Oui, je sais, "c'est trop injuste".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de lecture mémoire avec SDL_GL_SwapBuffers
    Par Chen norris dans le forum SDL
    Réponses: 2
    Dernier message: 12/09/2007, 00h16
  2. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  3. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  4. lecture balises avec des <
    Par petitelulu dans le forum XML/XSL et SOAP
    Réponses: 11
    Dernier message: 03/09/2003, 09h31
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

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