Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
namespace EasyAntiCheat.Game.Launcher
{
internal static class Program
{
private static void CopyOldOutputLog()
{
if (!File.Exists("AwesomeGame_Data/output_log.txt"))
{
return;
}
if (File.Exists("AwesomeGame_Data/output_log.last"))
{
File.Delete("AwesomeGame_Data/output_log.last");
}
File.Copy("AwesomeGame_Data/output_log.txt", "AwesomeGame_Data/output_log.last");
}
private static void Main(string[] args)
{
Program.CopyOldOutputLog();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Loader loader = new Loader(12, "AwesomeGame.exe", null);
loader.Options.Installer.Allow = true;
loader.Options.Arguments = string.Join(" ", args);
loader.Progress += new EventHandler<LoadProgressEventArgs>(Program.OnLaunchProgress);
loader.Completed += new EventHandler<LoadCompletedEventArgs>(Program.OnLaunchCompleted);
loader.BeginLoad();
while (!loader.HasCompleted())
{
Thread.Sleep(100);
}
}
private static void OnLaunchCompleted(object sender, LoadCompletedEventArgs eventArgs)
{
if (eventArgs.Status == LoadExitCode.Success)
{
return;
}
MessageBox.Show(string.Format("AwesomeGame Launcher Error: {0} - {1}", eventArgs.Status, eventArgs.Message));
}
private static void OnLaunchProgress(object sender, LoadProgressEventArgs eventArgs)
{
}
}
}
ADD EAX, 3SUB EAX,-2
INC EAXPUSH EAX
XOR EAX,EAX
MOV EAX,2
INC EAX
ADD EAX,DWORD PTR SS:[ESP]
ADD ESP,4
полезный код
jmp lb
мусорные инструкции, рандомный набор, всё равно не выполняются
lb:
полезный код
Хотя вас всё равно можно отследить по безусловному переходу в начале функции который указывает за пределы модуля в котором эта функция расположена.
4. Защита игровой памяти от чтения/записи
Данным функционалом обладает набирающая популярность в Steam защита Easy Anti Cheat. В Windows запускается сервис EasyAntiCheat, который защищает память игры от чтения и записи. Если же сервис не запущен, то игра отказывается соединяться с сервером и хотелось бы услышать размышления хабрасообщества на этот счет.
RocketDo D:\Programs\RocketDock\RocketDock.dll
libgit23 C:\Program Files\TortoiseGit\bin\libgit232.dll
zlib132 C:\Program Files\TortoiseGit\bin\zlib132.dll
gitdll32 C:\Program Files\TortoiseGit\bin\gitdll32.dll
Tortoi_1 C:\Program Files\TortoiseGit\bin\TortoiseGit32.dll
Tortoise C:\Program Files (x86)\Common Files\TortoiseOverlays\TortoiseOverlays.dll
"call " + GetAnyGameObjectFunctionPointer,
"push " + argument3Pointer,
"push " + argument2Pointer,
"push " + argument1Pointer,
"push " + argument0Pointer,
"mov ecx, eax",
"call " + DoAnythingFunctionPointer,
"retn"
x64 очень легко получить из x86, пару бессонных ночей и готовоно этих бессонных ночей можно избежать, как говорится, in the first place. ;)
Просто попробуйте сами, прочитать из памяти не убивая Windows-сервис.Очевидно сервис использует какие-то дополнительные трюки, вроде инжекта или драйвер.
Определенно нам необходимо внедрить код в процесс игры, который и будет ей управлять. Для это можно модифицировать сам исполняемый файл (это очень легко сделать, но и легко определить и получить бан) или внедрить DLL (это тоже определяется очень просто), но это все не для нас. Наш подход — это внедрение кода, в главный поток процесса, получающего управление и возвращающего его обратно.если я правильно понял, тут идёт речь о коде чита, а не только о перехватчике управления.
Очевидно сервис использует какие-то дополнительные трюки, вроде инжекта или драйвер.
если я правильно понял, тут идёт речь о коде чита, а не только о перехватчике управления.
К таму же не совсем понятно почему именно используется трюк с перехватом управления из EndScene(), реализация требует регулярного перехвата управления?
К таму же не совсем понятно почему именно используется трюк с перехватом управления из EndScene()Конкретно в WoW основная причина того, почему требуется перехват
EndScene, связана не с пересчётом мира, а в том, что EndScene вызывается из «основного» потока игры. А все или большинство функций, представляющих интерес (передвижение, каст фаерболов, Lua) потоконебезопасны — будучи вызванными из других потоков, они либо просто не сработают, либо приведут к крэшу всей игры.
Пишем бота для MMORPG с ассемблером и дренейками. Часть 2