Здравствуйте, Alexmoon, Вы писали:
A>Здравствуйте, 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!!!
A>С типами в Паскале сам разберешся. Ну приблизительно вот так:
A>A>//только попробуй не забыть, что сигнатуры, которые ты будешь искать, должны по байтно быть в обратном порядке
A>//адрес смещения в адресном пространстве чужого процесса
A>DWORD lpBaseAddress = 0x289560;
A>//считываемый буффер
A>BYTE buffer[9] = {0};
A>//сигнатура, которую мы ищем для замены
A>BYTE sign [9] = {xx,xx,xx,xx,xx,xx,xx,xx,xx};
A>//новая последовательность байт, после патча
A>BYTE patch [9] = {xx,xx,xx,xx,xx,xx,xx,xx,xx};
A>HANDLE hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, dwProcessID);
A>ReadProcessMemory (hProcess, (LPCVOID)lpBaseAddress, buffer, 9, NULL);
A>if(!memcmp(sign, buffer, 9)) WriteProcessMemory(hProcess, (LPCVOID)lpBaseAddress, patch, 9, NULL);
A>else throw TEXT("the required signature is not retrieved");
A>
Большое спасибо, Alexmoon!!!
Я вчера не дождался ответа и сам разобрался по Вашей первой подсказке!
Все ПОЛУЧИЛОСЬ! Сделал именно так, как во второй подсказке!
Могу сообщить Кодт-у, чтот в моем случае никакого сдвига не оказалось, байты оказались по тому-же смещению, что и в exe-шнике.
Процесс открывал, как OpenProcess(PROCESS_ALL_ACCESS, ...