2013-07-07 23 views
16

Cheat Engine viene fornito con una funzionalità chiamata velocità hack che fondamentalmente può rallentare o aumentare la velocità del gioco. In realtà, non solo i giochi, se c'è un software con il ticchettio dell'orologio, può velocizzarlo. Come funziona? Potrei immaginare che ci sia un orologio interno su cui queste cose girano ma non sono sicuro di come queste cose accadano a basso livello.Come funziona la velocità di mod di CheatEngine?

Mentre questa funzione ha funzionato sulla maggior parte dei giochi che ho provato, ha anche fallito su molti, ad esempio, NFS Most wanted. Perché? C'è qualche meccanismo diverso su cui questi giochi girano o è solo un anti-cheat?

risposta

11

Motori cheat Vecchio Speedhack:

  • esegue l'applicazione in un thread priorità molto alta
  • Utilizza sonno temporizzato per velocizzare il gioco
  • Quando una funzione viene chiamata, vi sarà dato un timer emulato che viene accelerato

Motori cheat Nuovo Speedhack:

  • Quando il DLL velocità del motore frode viene iniettato nel programma, viene modificata la velocità selezionata nel pannello Cheat Engine
  • Imposta un riferimento di base dell'ora corrente
  • restituiti tempo = basetime + ((currentTime-basetime) * velocità

Detection:

  • Entrambi i metodi sono facili da individuare con l'invio di un Packe t con il tempo di ogni paio di secondi per essere convalidato da un server
  • Il gioco può essere in grado di rilevare la dll viene iniettato

Fonte: http://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack

4

Penso che il motivo per cui non funziona in alcune applicazioni (principalmente giochi) è che alcuni giochi collegano l'orologio di gioco ai frame al secondo. Quindi il tuo gioco rallenta o si blocca se provi a velocizzarlo.

Fonte

: http://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat

Personalmente ho incontrato solo pochi giochi che wouldnt reagiscono al speedhack. Anche se sono legati all'FPS, puoi comunque accelerarlo in una certa misura.

6

Tre anni dopo, penso di sapere abbastanza per rispondere alla mia domanda. :)

Un programma per computer di solito comunica con il kernel utilizzando funzioni predefinite chiamate chiamate di sistema. Ogni sistema operativo ha un diverso set di chiamate, ma spesso fanno cose simili come: allocare memoria, leggere e scrivere file o gestire i processi. Secondo this page, ci sono circa 480+ chiamate di sistema nel kernel di Windows NT.

Per qualsiasi scopo che riguarda l'hardware, i programmi di solito ricorrono alle chiamate di sistema perché è quello che OS fa meglio e una di queste cose è sapere il tempo. I giochi per computer hanno spesso bisogno di rendere 60 fotogrammi/secondo e per far sì che succeda hanno bisogno di chiamare la funzione di rendering ogni 16.6 ms. In Windows, per questo viene utilizzato "GetTickCount()", che restituisce il numero di millisecondi trascorsi da quando Windows è stato attivo ("Se non è trascorso alcun millisecondo dall'ultimo tick count è più di 16ms, eseguire il rendering di un nuovo frame else.").

SpeedHacking, in generale, funziona inserendo il codice nel processo in esecuzione e hacking le funzioni di temporizzazione per restituire "ticks" accelerati/rallentati per modificare la velocità di esecuzione del programma.

Anche se, non posso essere sicuro di come esattamente CE ha raggiunto questo (il codice sorgente è piuttosto difficile da capire) ma un altro programmatore ha ottenuto una cosa simile (video) su Linux. Nello source code, è possibile vedere come l'autore ha modificato una chiamata di sistema simile per Linux ("gettimeofday()") per questo.

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; 
} 

Non sono sicuro di come viene rilevato, ma mi piacerebbe andare con l'idea di @ Harold che il gioco probabilmente vede la DLL iniettata.

+2

Terminologia nitpick: Sembra un hook del wrapper libc per 'gettimeofday()', non crea un kernel personalizzato con una funzione 'sys_gettimeofday()' modificata. Quindi potresti dire che hanno agganciato la funzione wraime gettimeofday per intercettare le chiamate di sistema e modificare il valore di ritorno. –