Здравствуйте, 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");