2013-07-07 4 views
16

Cheat Engine поставляется с функцией, называемой speed hack, которая в основном может замедлять или увеличивать скорость игры. Собственно, не только игры, если есть программное обеспечение с тиканием часов, это также может ускорить это. Как это работает? Я могу представить себе, что есть некоторые внутренние часы, на которых эти вещи работают, но не уверены, как это происходит на низком уровне.Как работает взломанный ход CheatEngine?

Хотя эта функция работала над большинством игр, которые я пробовал, она также не удалась для многих, например, для NFS Most wanted. Зачем? Есть ли какой-либо другой механизм, на котором работают эти игры, или это просто анти-чит?

ответ

11

Чит Двигатели Старый SpeedHack:

  • Запускает приложение в очень высокий приоритет нити
  • Использует приурочен спать, чтобы ускорить игру
  • Когда функция вызывается, она будет предоставлена эмулируемый таймер, который ускорился

Чат двигатели Нового SpeedHack:

  • Когда DLL оборотов двигателя Чит вводятся в программу, он изменяется со скоростью, выбранной в панели Чит двигатель
  • Устанавливает базовую ссылку текущего времени
  • возвращенного времени = basetime + ((CurrentTime-basetime) * скорость

Детектирование:

  • Оба метода легко обнаружить путем отправки Packe т со временем, каждые несколько секунд, чтобы быть подтверждено сервером
  • Игра может быть в состоянии обнаружить DLL впрыскивается

Источник: http://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack

4

Я думаю, что причина, почему это не работает в некоторых приложениях (в основном в играх), так это то, что некоторые игры связывают внутриигровые часы с кадрами в секунду. Поэтому ваша игра будет замедляться или сбой, если вы попытаетесь ускорить ее.

Источник:http://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat

Лично я только столкнулся с очень мало игр, которые Wouldnt реагируют на SpeedHack. Даже если они привязаны к FPS, вы все равно можете ускорить его до некоторой степени.

6

Спустя три года, я думаю, я достаточно знаю, чтобы ответить на собственный вопрос. :)

Компьютерная программа обычно связывается с ядром с использованием предопределенных функций, называемых системными вызовами. Каждая ОС имеет различный набор вызовов, но часто они выполняют аналогичные функции, такие как: распределение памяти, чтение и запись файлов или обработка процессов. Согласно this page, в ядре Windows NT существует около 480+ системных вызовов.

Для любых целей, связанных с оборудованием, программы обычно прибегают к системным вызовам, потому что это то, что ОС делает лучше всего, и одна из этих вещей - это время знать. Компьютерные игры часто должны отображать 60 кадров в секунду, и для этого им нужно вызвать функцию рендеринга каждые 16.6ms. В Windows обычно используется «GetTickCount()», который возвращает количество миллисекунд, прошедших с момента выхода Windows («Если ни одна из миллисекунд, прошедших с момента последнего подсчета галочек, больше, чем 16ms, отрисуйте новый кадр, чтобы продолжить».).

SpeedHacking, в общем, работает, вводя код в выполняемый процесс и взламывая функции синхронизации, чтобы вернуть ускоренные/замедленные «тики», чтобы изменить скорость работы программы.

Хотя, я не могу быть уверен, как именно это достигается CE (исходный код довольно трудно понять), но другой программист снял аналогичную вещь (video) в Linux. В source code вы можете увидеть, как автор изменил аналогичный системный вызов для 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; 
} 

Я не уверен, как это обнаружено, но я бы ид с @ идею Гарольда, что игра, вероятно, разыскивает DLL получать инъекции.

+2

Терминология nitpick: это выглядит как крючок оболочки libc для 'gettimeofday()', не создавая настраиваемое ядро ​​с измененной функцией 'sys_gettimeofday()'. Таким образом, вы можете сказать, что они подключили функцию оболочки gettimeofday для перехвата системных вызовов и изменения возвращаемого значения. –