Re[3]: Как, зная ID процесса, получить адрес в памяти, и про
От: Alexmoon Украина  
Дата: 12.06.03 12:18
Оценка:
Здравствуйте, Sasha_M, Вы писали:

A>>HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE, ..., dwProcessID);

A>>WriteProcessMemory(hProcess, ...);

S_M>Огромное спасибо за ответ!

S_M>Теперь можно немножко подробнее, если у Вас есть время.
S_M>Я пишу на Delphi. Переменная hProcess наверное типа THandle. Я знаю смещение в exe-шнике нужного кода (например $289560 от начала (длина 9 байт)). Как прочитать этот код (с помощью ReadProcessMemory чтотбы убедиться) и как его заменить?
S_M>Еще раз благодарю за ответ, уважаемый Alexmoon!!!

С типами в Паскале сам разберешся. Ну приблизительно вот так:

//только попробуй не забыть, что сигнатуры, которые ты будешь искать, должны по байтно быть в обратном порядке

//адрес смещения в адресном пространстве чужого процесса
DWORD lpBaseAddress = 0x289560;
//считываемый буффер
BYTE  buffer[9] = {0};
//сигнатура, которую мы ищем для замены
BYTE  sign  [9] = {xx,xx,xx,xx,xx,xx,xx,xx,xx};
//новая последовательность байт, после патча
BYTE  patch [9] = {xx,xx,xx,xx,xx,xx,xx,xx,xx};

HANDLE hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, dwProcessID);
ReadProcessMemory            (hProcess, (LPCVOID)lpBaseAddress, buffer, 9, NULL);
if(!memcmp(sign, buffer, 9)) WriteProcessMemory(hProcess, (LPCVOID)lpBaseAddress, patch,  9, NULL);
else throw TEXT("the required signature is not retrieved");
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.