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

Python Discussion :

Faire un scan d'Array Of Bytes pour trouver l'adresse de la fonction dans un EXE (windows)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut Faire un scan d'Array Of Bytes pour trouver l'adresse de la fonction dans un EXE (windows)
    Bonjour tout le monde!

    Je viens vers vous car j'ai besoin d'aide pour finaliser mon ambitieux petit projet.
    J'ai besoin de scanner la mémoire d'un processus ouvert (un .exe ouvert pour simplifier [Windows uniquement]) à la recherche de l'adresse mémoire correspondante à une matrice d'octets (AOB/Array Of Bytes).

    Concrètement c'est comme ce que fait des logiciels style Cheat Engine qui me permet de scanner la mémoire de
    Programme.exe afin d'y rechercher "41 0F B7 84 4B 0A 01 00 00" pour qu'il me trouve "Programme.exe+296E2EF"

    Cela fait quelques jours que je cherche sans succès, j'espère trouver la réponse qui me manque ici
    Merci pour votre temps!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par devilsnake88 Voir le message
    Cela fait quelques jours que je cherche sans succès, j'espère trouver la réponse qui me manque ici
    Vous avez déjà des outils windows pour faire çà.
    Si vous voulez coder çà par vous même, aller regarder la mémoire d'un process est une opération privilégiée sous le contrôle du système.
    Sur Windows vous avez ReadProcessMemory et savoir l'utiliser est plutôt un sujet sur les internes de Windows que de programmation Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    ...
    Oui je sais, je me sers déjà de ReadProcessMemory via github*com/vsantiago113/ReadWriteMemory.
    Je lis et écris déjà dans le processus, le problème c'est que je dois lire et écrire au bon endroit et à chaque redémarrages, les adresses changeant.
    J'ai déjà dû patcher la source github pour accepter les adresses en x64 mais rien à propos de sign/aob scan.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    Par défaut
    hello,
    as-tu essayé le module mem_edit ?
    ami calmant, J.P

  5. #5
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    ...
    Merci pour ton message mais si c'est possible avec mem_edit, je suis perdu car tout ce que j'ai essayé (je ne suis pas super doué en dev') n’aboutis à rien...
    Sporctivement.

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    Par défaut
    hello,
    les exemples du readme de mem_edit ne sont pas faciles à essayer. J'ai testé la bibliothèque avec comme processus le bloc-note (notepad.exe). Le code d'essai consiste à chercher la séquence d'octets coucou (que l'on rentre en édition au préalable dans notepad) dans la mémoire du processus et à la remplacer par poupou. Apparemment dans notepad lorsque l'on rentre des caractères, ils se retrouvent à plusieurs endroits dans la mémoire, mais la première adresse semble être celle qui sert pour l'affichage.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import ctypes
    from mem_edit import Process
    coucou = (ctypes.c_byte * 12)(0x63, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x75, 0x00)
    poupou = (ctypes.c_byte * 12)(0x70, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x70, 0x00, 0x6f, 0x00, 0x75, 0x00)
    pid = Process.get_pid_by_name('notepad.exe')
    with Process.open_process(pid) as p:
        addrs = p.search_all_memory(coucou)
        # on teste si il y  a une ou plusieurs réponses
        if len(addrs) >= 1:
            print('adresses trouvées:')
            for addr in addrs:
                # on affiche l'adresse en hexa
                print("adresse : " +  str(hex(addr)))
                # on affiche 32 octets (en décimal) à partir de la première adresse trouvée
                dump = p.read_memory(addr, (ctypes.c_byte * 32)())
                print(*dump)
            # on écrit poupou à la place de coucou à la première adresse
            p.write_memory(addrs[0], poupou)
        elif len(addrs) == 0:
            print("séquence d'octets non trouvée!")
    [python36]>>> INFO:mem_edit.windows:Checking name for pid 0
    INFO:mem_edit.windows:Checking name for pid 10572
    INFO:mem_edit.windows:Name was "notepad.exe"
    adresses trouvées:
    adresse : 0x14e272f1320
    99 0 111 0 117 0 99 0 111 0 117 0 32 0 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    adresse : 0x14e27331810
    99 0 111 0 117 0 99 0 111 0 117 0 32 0 0 0 0 0 0 0 0 0 0 0 30 43 -13 -104 0 47 0 -128
    En espérant que cela puisse t'aider.
    Ami calmant, J.P

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/06/2015, 19h13
  2. Réponses: 3
    Dernier message: 23/01/2012, 14h50
  3. Dichotomie pour trouver le minimum d'une fonction
    Par justin0203 dans le forum MATLAB
    Réponses: 4
    Dernier message: 16/01/2012, 12h20
  4. Problème pour trouver une adresse de cellule
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/09/2011, 17h02
  5. programme pour trouver l'adresse du port d'un élément
    Par nanou1983 dans le forum Windows Forms
    Réponses: 28
    Dernier message: 20/09/2007, 08h32

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