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++ Discussion :

Affichage adresse de lecture DEBUGGER


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Points : 14
    Points
    14
    Par défaut Affichage adresse de lecture DEBUGGER
    Bonjour, j'aimerai afficher toutes les adresses mémoire de lecture similaire a cheat engine dans mon debugger. ainsi que le code assembleur à coté de celle-ci exemple 3F 00 2F 20

    Je dois mettre quoi dans mon printf ou si y a d'autre truc à changer ?????

    j'ai mis un exemple en pièce jointe

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <Windows.h>
    #include <string>
    #include <iostream>
    #include <vector>
    int main(){
    STARTUPINFO         si = {0};
    PROCESS_INFORMATION pi = {0};
    si.cb = sizeof(si);
    char filename[]= "Notepad.exe";
    auto result = CreateProcess(filename, NULL, NULL, NULL, FALSE, DEBUG_PROCESS, NULL, NULL, &si, &pi);
    DEBUG_EVENT debugEvent = { 0 };
    bool continueDebugging = true;
    while (continueDebugging) {
    if(WaitForDebugEvent(&debugEvent, INFINITE)){
    printf("DBG: Exception: %x, Addr: %p, FirstChance: %d\n", debugEvent.u.Exception.ExceptionRecord.ExceptionCode,
    debugEvent.u.Exception.ExceptionRecord.ExceptionAddress, debugEvent.u.Exception.dwFirstChance);
     
     
    std::cout << "Event " << debugEvent.u.CreateThread.lpThreadLocalBase << std::endl;
    std::cout << std::hex << "New Thread - " << debugEvent.dwThreadId;
     
    std::cout << std::hex << "Assembler read address - " << ?????? ;
     
     
     
    auto continueStatus = DBG_CONTINUE;
    ContinueDebugEvent(debugEvent.dwProcessId, debugEvent.dwThreadId, continueStatus);
        }
    }
    std::cout << "Done." << std::endl;
    std::string s;
    std::getline(std::cin, s);
    return 0;
    }
    Images attachées Images attachées  

  2. #2
    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
    Je ne comprends pas la question.
    Ne faudrait-il pas d'abord tester la nature du Debug Event, pluôt que supposer à chaque fois que c'est une exception?
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Oui justement, j'aimerai afficher autre chose que les exceptions. Mais je trouve aucune source sur internet.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Plutot que chercher un code sur Internet, es-tu allé voir la documentation de DebugEvent? Elle décrit surement la structure, les champs, leurs valeurs.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    ternel j'ai cherché depuis pas mal de temps et y a vraiment rien du tous.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Comment as-tu réussi cet exploit quand le premier résultat google pour DEBUG_EVENT est la page msdn qui détaille tous les champs. ?
    Et notamment 10s de lecture montre que le u est une union et donc ton utilisation de Exception est une supposition fausse.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Bousk j'ai tous essayé et rien n'affiche toutes les lectures des adresses. y a des affichage mais ils en manques...
    Honnêtement je sais pas comment ils ont fait avec Cheat Engine.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Marche toujours pas

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #include <Windows.h>
    #include <iostream>
     
     
    using namespace std;
    int main(){
     
    DWORD_PTR address = 0x7FF607979711;
    STARTUPINFO         si = {0};
    PROCESS_INFORMATION pi = {0};
    si.cb = sizeof(si);
    char filename[]= "Notepad.exe";
    auto result = CreateProcess(filename, NULL, NULL, NULL, FALSE, DEBUG_PROCESS, NULL, NULL, &si, &pi);
    DEBUG_EVENT debugEvent = { 0 };
    bool continueDebugging = true;
     
     
    CONTEXT ctx = {0};
    ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS | CONTEXT_INTEGER;
     
     
     
    HWND hwnd = NULL;
    DWORD processid;
    HANDLE hThread = NULL;
     
    hwnd = FindWindowA(NULL, "Notepad");
    GetWindowThreadProcessId(hwnd, &processid);
    hThread = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processid);
     
     
    // hThread with enough permissions
    SetThreadContext(hThread, &ctx); 
     
     
     
    while (true)
    {
        if (WaitForDebugEvent(&debugEvent, INFINITE) == 0)
     
        if (debugEvent.dwDebugEventCode == EXCEPTION_DEBUG_EVENT &&
            debugEvent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_SINGLE_STEP) // EXCEPTION_BREAKPOINT
        {
            CONTEXT newCtx = {0};
            newCtx.ContextFlags = CONTEXT_ALL;
            GetThreadContext(hThread, &newCtx);
     
            if (debugEvent.u.Exception.ExceptionRecord.ExceptionAddress == (LPVOID)address)
            {
                newCtx.Dr0 = newCtx.Dr6 = newCtx.Dr7 = 0;
                newCtx.EFlags |= (1 << 8);
                std::cout << "No good." << std::endl;            
            }else{
                newCtx.Dr0 = address;
                newCtx.Dr7 = 0x7FF607979711;
                newCtx.EFlags &= ~(1 << 8);
                std::cout << "Good." << std::endl;
            }
            SetThreadContext(hThread, &newCtx);
        }
        ContinueDebugEvent(debugEvent.dwProcessId, debugEvent.dwThreadId, DBG_CONTINUE);
    }
    std::cout << "Ok" << std::endl;
    std::string s;
    std::getline(std::cin, s);
    return 0;
    }

  9. #9
    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
    Pourquoi ré-ouvres tu le processus alors que tu as déjà un handle retourné par CreateProcess()? Notepad n'est pas single-instance.
    Aussi, quels sont les retours (succès, erreurs) des fonctions?

    Ah aussi...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hThread = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processid)
    Rien qui te choque ici?
    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.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    C'est un code brouillon j'ai testé plusieurs choses. Peux-tu me dire comment afficher toutes les adresses executés ?

  11. #11
    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
    Si j'ai bien compris les adresses tu les as grâce au DEBUG_EVENT. Mais ce que tu veux faire, c'est afficher ce qui y est contenu? (genre, pour trouver quelles instructions accèdent à la mémoire, les décoder pour obtenir l'adresse, etc.?)

    Si oui, il va falloir du ReadProcessMemory().

    PS: Si tu cherches juste à afficher, pourquoi modifies-tu le contexte?
    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.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Points : 14
    Points
    14
    Par défaut
    Ok mais comment dois-je l'utiliser dans ce cas là ?????

Discussions similaires

  1. Script Affichage adresse Ip + nom de machine
    Par yugo8894 dans le forum VBScript
    Réponses: 5
    Dernier message: 05/04/2014, 17h55
  2. Affichage adresse cellule dans boite de dialogue
    Par Soya113 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 31/05/2012, 20h25
  3. [WD15] Affichage Adresse Email
    Par GCASPIC10 dans le forum WinDev
    Réponses: 7
    Dernier message: 19/07/2010, 11h03
  4. Problème d'affichage a la lecture d'un fichier
    Par curite dans le forum C++/CLI
    Réponses: 0
    Dernier message: 07/04/2010, 08h35
  5. Mettre un carnet d'adresse en lecture seule
    Par leya59 dans le forum Thunderbird
    Réponses: 0
    Dernier message: 21/08/2008, 10h01

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