2013-07-07 13 views
16

jest wyposażony w funkcję o nazwie speed hack, która w zasadzie może spowolnić lub zwiększyć prędkość gry. W rzeczywistości, nie tylko gry, jeśli istnieje oprogramowanie z tykaniem zegara, może to przyspieszyć. Jak to działa? Mogę sobie wyobrazić, że istnieje jakiś wewnętrzny zegar, na którym działają te rzeczy, ale nie jestem pewien, jak te rzeczy zdarzają się na niskim poziomie.Jak działa system szybkiego logowania CheatEngine?

Podczas gdy ta funkcja działała w większości gier, które wypróbowałem, nie udało się jej również wielu, np. NFS Most wanted. Czemu? Czy istnieje jakiś inny mechanizm, na którym działają te gry, czy jest to tylko anty-cheat?

Odpowiedz

11

Cheat Silniki Old Speedhack:

  • Uruchamia aplikację w bardzo wysokim priorytecie wątku
  • Używa czasowe snem, aby przyspieszyć grę
  • Gdy funkcja jest wywoływana, zostanie ona podana emulowany licznik, który jest przyspieszany

Cheat Engines Nowy Speedhack:

  • Gdy DLL prędkość silnika oszustwo wtryskuje się do programu, jest modyfikowana z prędkością wybraną w panelu oszustwo silnika
  • ustawia odwołanie podstawy czasu bieżącego
  • zwróconej czas = basetime + ((CurrentTime-basetime) * prędkość

detekcji:

  • Obie metody są łatwe do wykrycia przez wysłanie packe t z czasem co kilka sekund, aby być zatwierdzone przez serwer
  • Gra może być w stanie wykryć dll jest wstrzykiwany

Źródło: http://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack

4

Myślę, że powodem, dla którego nie działa w niektórych aplikacjach (głównie w grach), jest to, że niektóre gry łączą zegar w grze z klatkami na sekundę. Dlatego twoja gra zostanie spowolniona lub ulegnie awarii, jeśli spróbujesz ją przyspieszyć.

Źródło:http://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat

Osobiście spotkałem tylko bardzo niewielu gier, które nie byłby reagować na Speedhack. Nawet jeśli są przywiązani do FPS, nadal możesz go przyspieszyć do pewnego stopnia.

6

Trzy lata później, myślę, że wiem wystarczająco dużo, aby odpowiedzieć na moje własne pytanie. :)

Program komputerowy zazwyczaj komunikuje się z jądrem przy użyciu predefiniowanych funkcji zwanych wywołaniami systemowymi. Każdy system operacyjny ma inny zestaw wywołań, ale często wykonuje podobne czynności, jak przydzielanie pamięci, odczytywanie i zapisywanie plików lub obsługiwanie procesów. Według this page, istnieje około 480+ wywołań systemowych w jądrze Windows NT.

W dowolnym celu, który zajmuje się sprzętem, programy zazwyczaj odwołują się do wywołań systemowych, ponieważ właśnie to system operacyjny robi najlepiej, a jedną z tych rzeczy jest znajomość czasu. Gry komputerowe często muszą renderować 60 klatek na sekundę i aby tak się stało, muszą wywoływać funkcję renderowania co 16,6 ms. W systemie Windows zwykle używa się "GetTickCount()", który zwraca liczbę milisekund, które upłynęły od czasu pojawienia się systemu Windows ("Jeśli liczba milisekund, które minęły od ostatniej liczby pasków, jest większa niż 16ms, należy ponownie wyświetlić nową klatkę.").

SpeedHacking, ogólnie rzecz biorąc, działa poprzez wprowadzenie kodu do działającego procesu i włamanie funkcji taktowania, aby przywrócić przyspieszone/spowolnione "tyknięcia" w celu modyfikacji prędkości programu.

Chociaż nie mogę być pewien, jak dokładnie to osiągnęło CE (kod źródłowy jest dość trudny do zrozumienia), ale inny programista wyciągnął podobną rzecz (video) na Linuksie. W wersji source code można zobaczyć, jak autor zmodyfikował podobne wywołanie systemowe dla systemu 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; 
} 

Nie jestem pewien, jak to jest wykryte, ale chciałbym pójść z pomysłem @ Harolda, że ​​gra prawdopodobnie dostrzega wtrysku DLL.

+2

Pończocha terminologiczna: Wygląda to na hak pakowania libc dla 'gettimeofday()', nie budując niestandardowego jądra ze zmodyfikowaną funkcją 'sys_gettimeofday()'. Można powiedzieć, że podpięli funkcję gettimeofday wrapper, aby przechwycić wywołania systemowe i zmodyfikować wartość zwracaną. –

Powiązane problemy