Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Очевидны вопросы: не пострадает ли игра после статьи, не нахлынут ли читеры и багоюзеры?
в данный конкретный момент в игре онлайн всего 19 человек
решил совместить хакерство и прокачку «честного» персонажа
Было бы веселее
убивать людей одной командой, получать админские права
… вот только клиент понятия не имеет, к чему этот OK относится, ведь он ничего не посылал,…
procedure AutoAttackCall(targetWid : dword); stdcall;
var
Address: pointer;
begin
// адрес нужной нам функции
Address := Pointer(AutoAttackAddress);
asm
pushad
// готовим "окружение" для нашего вызова
mov esi, dword ptr [BASE_ADDRESS]
mov esi, dword ptr [esi + PW_ROLE_BASE_OFFSET]
// кладём в стек параметры для функции
push $0
push $80000000
push targetWid
mov ecx, esi
// вызываем
call Address
popad
end;
end;
procedure THostPlayer.StartAutoAttack(targetWID : dword);
begin
InjectFunc(@AutoAttackCall, @targetWID, SizeOf(targetWID));
end;
procedure TProcess.InjectFunc(Func: Pointer; aParams: Pointer; aParamsSize: DWORD);
var
hThread: THandle;
lpNumberOfBytes: cardinal;
lpThreadId: DWORD;
ThreadAddr, ParamAddr: Pointer;
begin
if self.processHandle<>0 then
begin
// ---- Выделим место в памяти процесса и запишем туда нашу функцию
ThreadAddr := VirtualAllocEx(self.processHandle, 0, 256, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(self.processHandle, ThreadAddr, Func, 256, lpNumberOfBytes);
// ---- Также запишем параметры к ней
ParamAddr := VirtualAllocEx(self.processHandle, 0, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(self.processHandle, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);
// ---- Создадим поток, в котором это всё будет выполняться
hThread := CreateRemoteThread(self.processHandle, 0, 0, ThreadAddr, ParamAddr, 0, lpThreadId);
// ---- Ожидаем, пока функция отработает
WaitForSingleObject(hThread, INFINITE);
// ---- Подчищаем за собой
CloseHandle(hThread);
VirtualFreeEx(self.processHandle, ParamAddr, 0, MEM_RELEASE);
VirtualFreeEx(self.processHandle, ThreadAddr, 0, MEM_RELEASE);
end
end;
если админы живые, что же они ее не пилят?
Какими чувствами руководствуются, администрируя полу-живую игру?
Мини-исследование, улучшение и бот для игры Shadow Worlds