PDA

Просмотр полной версии : Как написать SpeedHack_F.A.Q


Den1S
13.03.2009, 14:52
Мне проще писать на С++, для делфей придется переделывать.
и так, начнем.
создайте таймер, поставьте время обновления около 100мс и в процедуре срабатывания таймера напишите такой код, ниже идет объяснение кода.
HWND wnd = FindWindow("D3D Window",NULL);
if (wnd)
{
DWORD ProcessId;
GetWindowThreadProcessId(wnd,&ProcessId);
HANDLE hdl = OpenProcess(PROCESS_ALL_ACCESS,0,ProcessId);
if (hdl)
{
DWORD a=0x00000000;
DWORD b;
ReadProcessMemory(hdl,(LPVOID)a,&b,4,0);
b=b+000;
WriteProcessMemory(hdl, (LPVOID)b, (LPVOID)&Speed, 4, 0);
CloseHandle(hdl);
}
}
HWND wnd = FindWindow("D3D Window",NULL);
В этой строке мы ищем окно, я ищу не по заголовку, а по типу окна, это удобней, если у вас загружено несколько клиентов игры, но если хотите искать по заголовку, то нужно будет написать HWND wnd = FindWindow(NULL,"RF Online");

if (wnd)
Ну тут думаю все понятно, идет проверка на результат, если окно найдено, то выполняем следующий текст, если не найдено, то ничего не выполняем

{
DWORD ProcessId;
GetWindowThreadProcessId(wnd,&ProcessId);
ищем процесс найденного окна

HANDLE hdl = OpenProcess(PROCESS_ALL_ACCESS,0,ProcessId);
открываем процесс со всеми правами (так нехорошо конечно, но так проще)

if (hdl)
и как обычно, проверка, смогли ли мы открыть процесс со всеми правами, если смогли, выполняем код, если нет, то ничего не выполняем.

{
DWORD a=0x00000000; //этой переменной присваеваем адрес указателя,

DWORD b;
ReadProcessMemory(hdl,(LPVOID)a,&b,4,0);
Читаем значение, которое хранится в адсесе "а" в переменную "b"

b=b+000;
прибавляем к прочитанному значению смещение.

WriteProcessMemory(hdl, (LPVOID)b, (LPVOID)&Speed, 4, 0);
записываем в получившийся адрес "b" значение скорости, хранящееся в переменной Speed, не забываем, что переменная Speed вещественное число.

CloseHandle(hdl);
и не забываем закрыть открытый нами процесс.
}
}
(с)hideki