チートエンジン には、スピードハックと呼ばれる機能があり、基本的にゲームの速度を遅くしたり、速度を上げたりできます。実際、ゲームだけでなく、クロックを刻むソフトウェアがあればそれもスピードアップできます。それはどのように機能しますか?これらのことを実行する内部クロックがあると想像するかもしれませんが、これらのことが低レベルでどのように発生するかはわかりません。
この機能は、私が試したほとんどのゲームで機能していましたが、多くの場合、たとえばNFS Most Mostで失敗しました。どうして?これらのゲームを実行する別のメカニズムはありますか、それとも単なるアンチチートですか?
チートエンジンOldSpeedhack:
チートエンジンNewSpeedhack:
検出:
出典:http://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack
3年後、私は自分の質問に答えるのに十分知っていると思います。 :)
通常、コンピュータープログラムは、システムコールと呼ばれる定義済みの関数を使用してカーネルと通信します。各OSには異なる呼び出しセットがありますが、多くの場合、メモリの割り当て、ファイルの読み取りと書き込み、プロセスの処理など、同様のことを行います。 このページ によると、Windows NTカーネルには約480以上のシステムコールがあります。
ハードウェアを扱うあらゆる目的のために、プログラムは通常、システムコールに頼ります。これはOSが最も優れていることであり、これらのことの1つは時間を知ることです。コンピュータゲームはしばしば60フレーム/秒をレンダリングする必要があり、これを実現するにはレンダリング関数を毎回16.6ms呼び出す必要があります。 Windowsでは、「 GetTickCount() 」が通常使用され、Windowsが起動してから経過したミリ秒数を返します(「最後のティックカウントから経過したミリ秒数が16ms、新しいフレームをレンダリングするか、それ以外は続行します。 ")。
一般に、SpeedHackingは、実行中のプロセスにコードを挿入し、タイミング関数をハッキングして、プログラムの実行速度を変更するためにスピードアップ/スローダウンした「ティック」を返すことで機能します。
ただし、CEがどの程度正確にこれを達成したかはわかりませんが(ソースコードを理解するのはかなり難しい)、Linuxで別のプログラマーが同様のこと( video )を実行しました。 ソースコード では、作成者が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がインジェクトされるのを発見するだろうという@Haroldの考えで行くでしょう。
一部のアプリケーション(主にゲーム)で機能しない理由は、一部のゲームがゲーム内クロックを1秒あたりのフレームにリンクしているためだと思います。したがって、スピードハックしようとすると、ゲームが遅くなったりクラッシュしたりします。
出典:http://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat
個人的には、スピードハックに反応しないゲームはほとんどありません。それらがFPSに結び付けられている場合でも、ある程度はスピードハックできます。