Bonjour à tous,
Je débute en C et j'ai besoin d'aide.
Je m'explique j'aimerais modifier des bytes en mémoire dans un module qui est lui meme chargé dynamiquement par un executable.
Exemple : main.exe se lance puis a un moment donné fait appel a 1.dll qui se charge.
Mon but est de modifier 1.dll en mémoire, je veut lui écrire 1 (un) byte.
Mon problème est que je ne sais pas comment m'y prendre, je sais comment faire cela sur un executable, mais pas sur
un module chargé par un executable.
Je vous joint le code que j'ai pu faire en pechant a droite et a gauche.

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 <tchar.h>
#include <stdio.h>
#include <psapi.h>
#include <commctrl.h>
#include <Winuser.h> 



void main( )
{
    HWND hWnd; // Strucure pour l'handle de la fenetre
    DWORD processID; // Dword du PID
    HMODULE hMods[1024];
    HANDLE hProcess; 
    DWORD cbNeeded;
    unsigned int i;
    char *dll = "iecustom.dll"; // Module a patcher

     
    char *hTitle = "Internet Explorer 7 Beta 2 Setup"; // Titre de la fenetre....
    hWnd = FindWindow(NULL, hTitle); // Recupere l'handle de la fenetre...
    
    GetWindowThreadProcessId(hWnd,&processID); // Recupere le PID en fonction de l'handle...   
    
    printf( "\nWindow ID: %u\n", hWnd );
    // Print the process identifier.

    printf( "\nProcess ID: %u\n", processID );

    // Get a list of all the modules in this process.

    hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                            PROCESS_VM_READ,
                            FALSE, processID );
    if (NULL == hProcess)
        return;

    if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
    {
        for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ ) // Pour chaque modules...
        {
            TCHAR szModName[MAX_PATH];

            if ( GetModuleBaseName( hProcess, hMods[i], szModName, sizeof(szModName)/sizeof(TCHAR)))
            {
                // Print the module name and handle value.
                if (strcmp(szModName,dll) == 0) // Si le module est bien le bon...
                {
                _tprintf( TEXT("Found : \t%s (0x%08X)\n"), szModName, hMods[i] ); // On l'affiche & on patche.

                DWORD address = 0xC825AB; // Offset a patcher

                unsigned char patch[1] = {0xEB}; // Byte a remplacer (jmp)

                if(    WriteProcessMemory (hMods[i],(void*)address, &patch, sizeof(patch), NULL)) { 
                    
                    printf( "\nWell done"); }

                break; // On arrete la boucle...
                }

            }
        }
    }
    CloseHandle( hProcess );
}
Je suis perdu !
Un peu d'aide s'il vous plais