Как работает CheatEngine скорость взлома?
Cheat Engine поставляется с функцией, называемой speed hack, которая в основном может замедлить или увеличить скорость игры. Собственно, не только игры, если есть программное обеспечение с тиканием часов, это также может ускорить это. Как это работает? Я могу себе представить, что есть некоторые внутренние часы, на которых эти вещи работают, но не уверены, как это происходит на низком уровне.
Хотя эта функция работала над большинством игр, которые я пробовал, она также не удалась для многих, например, для NFS Most wanted. Зачем? Есть ли какой-либо другой механизм, на котором работают эти игры, или это просто анти-чит?
Ответы
Ответ 1
Cheat Engines Старый Speedhack:
- Запускает приложение в потоке с очень высоким приоритетом
- Использует тайм-аут для ускорения игры.
- Когда вызывается функция, ей будет задан эмулированный таймер, который ускоряется
Cheat Engines Новый Speedhack:
- Когда в программу вводится программа DLL версии Cheat Engine, она изменяется на скорость, выбранную на панели Cheat Engine.
- Устанавливает базовую ссылку текущего времени
- return time = basetime + ((currenttime-basetime) * скорость
Обнаружение:
- Оба метода легко обнаружить, отправив пакет со временем каждые пару секунд для проверки сервером
- В игре может быть обнаружена вставка dll
Источник:
http://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack
Ответ 2
Спустя три года, я думаю, я достаточно знаю, чтобы ответить на мой собственный вопрос.:)
Компьютерная программа обычно связывается с ядром с использованием предопределенных функций, называемых системными вызовами. Каждая ОС имеет различный набор вызовов, но часто они выполняют аналогичные функции, такие как: распределение памяти, чтение и запись файлов или обработка процессов. Согласно этой странице, в ядре Windows NT существует около 480+ системных вызовов.
Для любых целей, связанных с оборудованием, программы обычно прибегают к системным вызовам, потому что то, что ОС делает лучше всего, и одна из этих вещей - это время знать. Компьютерные игры часто должны отображать 60 кадров в секунду, и чтобы это произошло, им нужно вызвать функцию рендеринга каждый 16.6мс. В Windows обычно используется GetTickCount() ", который возвращает количество миллисекунд, прошедших с момента выхода Windows (" Если нет миллисекунд прошло, так как последнее количество тиков больше 16 мс, отрисуйте новый кадр, и дальше продолжайте. ").
SpeedHacking, в общем, работает, вводя код в запущенный процесс и взламывая функции синхронизации, чтобы вернуть ускоренные/замедленные "тики", чтобы изменить скорость выполнения программы.
Хотя я не могу быть уверен, как именно CE достиг этого (исходный код довольно трудно понять), но другой программист снял аналогичную вещь (видео) на Linux. В исходном коде вы можете увидеть, как автор изменил аналогичный системный вызов для Linux ( " gettimeofday()" ).
go gettimeofday_orig;
int val;
gettimeofday_orig=(go)dlsym(RTLD_NEXT,"gettimeofday");
if (!timezero)
{
timezero = new timeval;
val = gettimeofday_orig(timezero,tz);
(*tv) = (*timezero);
return val;
}
Я не уверен, как это обнаружено, но я бы пошел с идеей @Harold, что игра, вероятно, указывает на то, что DLL получает инъекцию.
Ответ 3
Я думаю, что причина, по которой это не работает в некоторых приложениях (в основном в играх), заключается в том, что некоторые игры связывают внутриигровые часы с кадрами в секунду. Поэтому ваша игра будет замедляться или сбой, если вы попытаетесь ускорить ее.
Источник: http://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat
Лично я столкнулся с очень немногими играми, которые не реагировали бы на скорость. Даже если они привязаны к FPS, вы все равно можете ускорить его до некоторой степени.