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

C++/CLI Discussion :

Dump RAM & simulation touche clavier


Sujet :

C++/CLI

  1. #1
    Futur Membre du Club
    Profil pro
    Etudiant
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Dump RAM & simulation touche clavier
    Bonjour / bonsoir,


    Je viens tout doucement sur les forums suite à mes recherches nombreuses (trop ou mauvaise) sur un problème que j'ai depuis pas mal de jour (heures devant le pc ). Je suis actuellement en train de réaliser un petit programme doit me permettre de faire 2 choses. Simuler des appuis de touches claviers et lire une partie de la mémoire d'un processus. Je me suis donc penché sur le C++ et la winAPI . Gros poissons bien compliqué.

    Dans un premier temps, mon programme peut simuler les appuis de touches claviers (en cliquant sur un bouton, une recherche du process, un focus, un envoi est réalisé). J'utilise FindWindow, SetForegroundWindow et keybd_event. Cette partie là fonctionne très bien sauf si je décide de ne plus focus mon process.... Du coup première petite question, est-il possible d'injecter dans un process / dans une fenêtre non focus, l'appui du touche clavier. Je suis passer par PostMessage, mais sans succès. Y a-t-il un autre moyen ?

    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
     
        HWND myWindow; uint keyCode;
        const TCHAR str[11] = TEXT("MonProcessChercher");
        LPCTSTR h =(const TCHAR *)str;
     
        myWindow = ::FindWindow(NULL,h);
        if(myWindow == NULL)
            qDebug() << "failed to find";
     
        if(!SetForegroundWindow(myWindow))
            qDebug() << "Unsucessful  foreground window";
     
        keyCode = VK_CONTROL;
        keybd_event(VK_CONTROL, 0x9D, 0, 0); 
        keybd_event(0x2E, 0x2E, 0, 0);		
        ::Sleep(1);
        keybd_event(VK_CONTROL, 0x9D, KEYEVENTF_KEYUP, 0);
        keybd_event(0x2E, 0x2E, KEYEVENTF_KEYUP, 0);
    Mon deuxième problème est légèrement plus compliquer (ou pas). J'arrive à trouver mon processus, et à récupérer l'adresse mémoire "basse". Je la compare avec OllyDbg et je trouve une adresse identique. Par contre, et c'est là que je me paume un peu, sur OllyDbg, on peut voir les différentes Adresse, taille, section, "contains",... Je souhaiterai pouvoir faire la même chose avec mon programme mais pour mon processus.

    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
     
        hwnd = FindWindow(NULL,L"MonProcessChercher");
        if(!hwnd)
            qDebug() << "not found!";
     
        // Get Process
        GetWindowThreadProcessId(hwnd, &pid); // Get the process id and place it in the PID
        HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); // Get permission to Read & Write
        if(!phandle)
            qDebug() << "Could not get handle !";
     
        DWORD_PTR base = GetModuleBase(pid);
     
        qDebug() << " nouvelle base :" << QString::number(base,16);
     
        ReadProcessMemory(phandle,(void*)base,&value,sizeof(double),0); // read what is in "address" and store it in "value"
        ReadProcessMemory(phandle,(void*)base,&myValue,sizeof(myValue),0);
    Comment peut-on déterminer la taille que prend une application (adresse "basse" et adresse "haute"), comment peut-on la "parser",comme par exemple OllyDbg, pour retrouver les différentes sections tel que les Data, Ressources, Relocations...


    Je sais que je demande beaucoup de choses et que je fournis peu ... Je comprendrai aussi très bien si des personnes me redirige vers un sujet déjà existant ou des tutos "bien fait" à sur ces sujets. J'ai pas mal cherché et j'ai eu un peu de mal à trouver (je cherche peut-être mal aussi mais c'est une autre histoire).

    D'avance merci pour vos réponses et votre aide.
    Naevis.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    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 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Le rapport avec le C++/CLI, domaine de ce forum ?

    Tu sais, pour faire des bots, il doit exister des SDK de hackers, pas besoin de réinventer la roue.

    est-il possible d'injecter dans un process / dans une fenêtre non focus, l'appui du touche clavier.
    Oui, mais rien de générique, c'est fonction des frameworks utilisés.

    on peut voir les différentes Adresse, taille, section, "contains",... Je souhaiterai pouvoir faire la même chose avec mon programme mais pour mon processus.
    Il faut être plus précis dans vos questions.
    On n'a pas forcement envie d'installer OllyDbg, juste pour répondre à des questions flous.
    "mon processus", c'est votre programme ou votre "cible" ?

    la taille que prend une application (adresse "basse" et adresse "haute")
    C'est quoi "la taille" ???
    Un processus prend tout l'espace qu'il peut adresser (4GB en 32 bits, tout plein en 64bits), voir plus avec les extensions matérielles.

    comment peut-on la "parser"
    https://msdn.microsoft.com/fr-fr/lib...or=-2147217396

    pour retrouver les différentes sections tel que les Data, Ressources, Relocations...
    https://msdn.microsoft.com/fr-fr/lib...or=-2147217396

  3. #3
    Futur Membre du Club
    Profil pro
    Etudiant
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour bacelar,

    Tout d'abord merci pour votre réponse et les deux liens proposés que je vais analyser et voir si cela correspond à mon problème. En effet, je me suis peut-être tromper de section C++ /CLI. J'aurai dû le poster dans la partie C++... Erreur de ma part. Est-il possible de le déplacer dans un endroit plus générique ?

    Oui l'idée est de créer un "bot". Mais plus pour un simulateur de vol. le but est de réaliser un pilote automatique (qui n'est de base pas intégrer dans le simulateur). Du coup, j'essaie de faire un programme tier pouvant réaliser cette fonction et donc via des simulations de touches claviers pour régler / vérifier différents paramètres qui seront lu via la mémoire (coordonnées, altitude, vitesse, etc).

    Via le second code présenter, je récupère l'adresse basse du simulateur présent dans la RAM (GetModuleBase(pid)).
    OllyDbg me retourne ce type d'information :
    Address Size Owner Section Contains Type Access Initial Access
    04470000 00001000 Simulateur PE header Img 01001002 R RWE CopyOnWr
    04471000 00625000 Simulateur .text Code Img 01001020 R E RWE CopyOnWr
    04a96000 000a5000 Simulateur .rdata Imports,exports Img 01001002 R RWE CopyOnWr
    04b3b000 07b72000 .data Data Img 01001008 RW CopyOnWr RWE
    0c6ad000 00001000 Simulateur _RDATA Img 01001002 R RWECopyOnWr
    0c6ae000 000b6000 Simulateur .rsrc Resources Img 01001002 R RWECopyOnWr
    0c764000 0005a000 Simulateur .reloc Relocations Img 01001002 R RWECopyOnWr

    Via la fonction précédemment cité (GetModuleBase(pid)), je récupère l'adresse 04470000. Là où je coince depuis un moment, c'est de récupérer la dernière adresse, c764000, ainsi que sa taille (size). J'ai fais plusieurs recherches et j'ai trouvé ce matin ceci : https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx. Je ne sais pas ci c'est une bonne piste pour mon problème.

    En faite, je souhaite pouvoir récupérer une partie de la mémoire pour pouvoir l'analyser et agir en conséquence sur mon pilote auto.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    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 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Avant de passer des semaines juste pour faire marchouiller un truc qui fonctionnera que sur votre machine, tant que votre anti-virus sera trop con pour faire son taf et tant qu'il n'y aura pas de mise à jour du simulateur.
    Avez-vous vérifié que le développeur du simulateur n'offre pas un SDK ou des outils dédiés de customisation ?

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 377
    Points
    20 377
    Par défaut
    Citation Envoyé par Naevis Voir le message
    Oui l'idée est de créer un "bot". Mais plus pour un simulateur de vol. le but est de réaliser un pilote automatique (qui n'est de base pas intégrer dans le simulateur)..
    quel simulateur ?
    Il n'y a pas de SDK ?
    Pour peu que celui-ci utilise DirectInput une composante de Direct X (qui n'évolue plus ) eh bien les API win32 risquent de ne pas fonctionner

  6. #6
    Futur Membre du Club
    Profil pro
    Etudiant
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Cher bacelar,

    De nouveau merci pour votre réponse par contre :
    juste pour faire marchouiller un truc qui fonctionnera que sur votre machine, tant que votre anti-virus sera trop con pour faire son taf et tant qu'il n'y aura pas de mise à jour du simulateur.
    Cela est d'une aide à marche réduite

    Cher Mat.M,

    Merci pour votre réponse.

    Ensuite, il existe un fichier *.h donnant accès à des éléments de mémoires partagés et certain éléments dont j'ai besoin ne sont hélas pas présent et donc je me tourne vers la mémoire "non partagée" pour essayer de trouver les informations..
    Pas mal de personnes ont développé des applications mais ce que je réalise est assez spécifique et peu voir personne ne l'a réalisé.

    Pour la partie DirectInput, oui les touches sont configurés de la sorte (Hotas, MFD,etc.). Du coup, à la réflexion faite, est-ce pour cela que je doive passer par le keybd_event() avec un focus sur la fenêtre cible ? Et que donc Post_Message() ne peut fonctionner. Si oui, je peux le laisser comme ça. Je laisserai donc cette partie comme cela, en essayant d'améliorer quelques points (j'ai quelques idées d'évolution à ce sujet).

    EDIT :
    Après lecture des liens donné plus haut, et quelques recherches sur le sujet, j'ai pu répondre à mon problème pour la lecture de la mémoire. Une solution simple a été mise en place pour la partie keybd_event.

    Merci pour l'aide.

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

Discussions similaires

  1. Simuler touche clavier PrintScreen
    Par Valarauko dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 25/01/2010, 09h49
  2. Simuler Touche Clavier
    Par jcharles dans le forum Débuter
    Réponses: 11
    Dernier message: 23/04/2009, 14h35
  3. Simuler touche clavier
    Par Razor620 dans le forum C++
    Réponses: 2
    Dernier message: 15/04/2009, 13h30
  4. Simuler touche clavier
    Par damien27000 dans le forum Linux
    Réponses: 2
    Dernier message: 24/07/2007, 13h56
  5. Simulation touche clavier
    Par tigana dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 05/05/2006, 12h00

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