На выходных попросили сделать безоткатку BM3-скиллов, wallhack (хождение сквозь препятствия) и обход защиты от кликеров для официального сервера cabal.zzima.com, т.к. все текущие версии волхака и все кликеры палились их защитой gameguard и собственно она вышибала клиента из игры после 1 минуты беготни с WH. А кликеры вообще не могут аттачиться к игре. Беспалевный волхак и дамагхак я реализовал, подробнее тут и тут - из игры не вышибает. Обход защиты кликеров тоже сделал, за этим в скайп - rfcheats. Параллельно сделал пару бесплатных примочек, которые помогут вам лучше изучить защиту "nProtect gameguard" и собственно обойти её. Обход (или взлом) gameguard актуален для игр Карос онлайн, Кабал онлайн, Седьмой элемент, Forsaken World, MU Online и думаю многих других.
Начну с того, что в Windows 7 GameGuard аттачит свой модуль npggNT.des (Usermode Filtering Library Rev 738) ко всем процессам системы, который в свою очередь хукает ряд функций в целевых программах не давая им видеть процесс игры и аттачиться к ней. В Windows XP это реализовано драйвером и снимается легко тем же самым RKU unhooker. Тут ничего интересного нет, для обхода в Windows 7/8 я сделал следующие вещи:
Total DLL Injector 1.4 - новая версия видит в списке задач игровой клиент. То есть позволяет инжектить в игру свои DLL-ки в любой момент, даже после входа в игру.
nProtect gameguard unhider - до запуска игры вы можете приаттачить эту DLL к любой программе, которой требуется видеть процесс игры. Это может быть Cheat Engine, OllyDbg, ArtMoney, API-шпионы, Proccess Explorer, кликеры и так далее. После загрузки игры, она будет видна нужной вам программе. При этом ваша программа сможет к ней аттачиться.
Всё это для Windows 7.
Теперь о вещах посложнее. Почитав забугорные форумы, я понял, что иностранцы сами до сих пор не научились снимать внутри-игровые хуки GG. О них и поговорим. GameGuard хукает следующий ряд функций:
SendMessageA
DispatchMessageW
SendInput
PostMessageA
PostMessageW
GetPixel
GetWindowThreadProcessId
ZwQuerySystemInformation
CreateProcessInernalW
ReadProcessMemory
OpenProcess
ZwDeviceIoControlFile
ZwSuspendThread
ZwTerminateProcess
VirtualProtect
WriteProcessMemory
ReadProcessMemory
И это вероятно даже не всё. При этом, хукаются также функции уровнем ниже (Native API), что весьма напрягает. Целью хуков является не допущение их использования внедрёнными DLL, а также тупо палево подгружаемых читов. Кстати, о палеве. Некоторые функции (например, ReadProcessMemory) отрабатывают, но инфа об этом оседает в логах GG, которые лежат по пути: Cabal\Data\UserData
Для их расшифровки можете скачать этот файл, поместить в эту же папку и запустить. После чего появится файл decrypted_dlog.txt, в котором лежит список палевных DLL. Кстати, в нём только названия и среди них оказался drweb32.dll Так что читы можно скрывать под видом антивирей.
Вернёмся к хукам. Тут начинается самое интересное, GameGuard устанавливает для всех загруженных системных и защитных DLL-ок права доступа PAGE_EXECUTE_WRITECOPY на секцию кода, соответственно не сменив права обратно на PAGE_EXECUTE_READWRITE, при попытке снятия хука ваш процесс потухнет. Соль в том, что при этом игра хукает следующие функции:
VirtualProtect
ZwProtectVirtualMemory
NtProtectVirtualMemory
Таким образом получается замкнутый круг - вы не можете снять хук с VirtualProtect, потому что нет соответствующих прав, которые вы не можете изменить из-за хука VirtualProtect

Я сварганил вот такой вариант:
 |
Цитата: |
 |
|
|
|
|
|
|
|
bool UnsetProtection(void* addr) {
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery((void*)addr, &mbi, sizeof( mbi ) );
DWORD ZwProtectVirtualMemoryAddr = (DWORD)GetProcAddress(GetModuleHandle("ntdll.dll") ,"ZwProtectVirtualMemory");
DWORD CurProcHandle = (DWORD)GetCurrentProcess();
if(ZwProtectVirtualMemoryAddr == 0) {
MessageBox(0, "ZwProtectVirtualMemory address not found", "Error", MB_ICONERROR);
return false;
}
_asm
{
mov esi, ZwProtectVirtualMemoryAddr
add esi, 5
push [mbi.Protect]
push 0x40
push mbi.RegionSize
push mbi.BaseAddress
push CurProcHandle
mov eax,4d
call esi
}
return true;
} |
|
 |
|
 |
|
Он выполняет затёртую хуком инструкцию, после чего вызывает ZwProtectVirtualMemory+5, тем самым перепрыгивая через хук геймгварда.
Если не хочется ковыряться со снятием защиты с остальных функций, могу предложить вариант попроще, где за вас уже всё сделали.