Как работает 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, вы все равно можете ускорить его до некоторой степени.