1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【解説】外部チートの基本

Posted at

前提

この記事は違法なチート行為を推奨するものではなく、あくまで技術的な知識を提供するものです。
実際に行った場合、ゲーム会社から訴訟される場合がありますので絶対に行わないようにしてください。

外部チートとは?

簡単に言うと、AimbotやESPなどの基本的なチートです。
皆さんが想像するような空中浮遊やホーミングなどは基本外部では実装できません。
これは外部チートがメモリを読んで書く、ということしか出来ないからです。
1部の中国開発者や台湾開発者は外部にもかかわらずホーミングをしたりしていましたが、ごく一部です。普通できません。

簡単な作り方

まずは何をしたいかにもよりますが、メモリを改竄する対象の特性を考えましょう。
アンチチートがカーネルモード(ring0ドライバー)を使用している高度なアンチチートの場合、カーネルドライバーを作成する必要があります。
Apex等のゲームはカーネルモードのアンチチートであるため、カーネルドライバーが必須です。
CS2はbattleyeアンチチートですが、なぜかあまり機能しないのでドライバーは必須ではありません。

その1 オーバーレイの作成

オーバーレイは、チーター界隈では通称「メニュー」と呼ばれるビジュアル的に必要なもので、必須ではありません。

この時に重要なことは、オーバーレイには表の世界、裏の世界があることを理解することです。
表の世界、というのはオーバーレイを見ている自分側の世界です。
裏の世界、というのはそれらを処理する描画側の世界です。つまりはソース側の話ですね。
オーバーレイは基本的にビジュアル的に作成できません。(そういうフレームワークがない限り)
オーバーレイ作成に役立つのはImGuiです。
Dear ImGui(オリジナル)や、それを拡張するOS-ImGui、SDL-ImGuiなどがあります。自分の環境に合わせて使いましょう。

私がおすすめなのはOS-ImGuiです。

OS-ImGuiでは簡単に画像描画ができたり、簡単にセットアップができます。

オーバーレイのサンプルソースも後々公開するので購読して待って頂けると幸いです。

その2 ドライバーの導入(任意)

ちょっと前に言った通り、アンチチートの強度によってドライバーが必須かどうかが変わります。
ドライバーに関してはあまり深く書きたくないので書きませんが、
Ioctlという方法(デバイスを作成してなんかしらする方法)は無署名で行うと検知確率が高い、ということと、
KeStackAttachProcess
https://learn.microsoft.com/ja-jp/windows-hardware/drivers/ddi/ntifs/nf-ntifs-kestackattachprocess
は少しばかり検知確率が高い

ということを書いておきます。

ドライバーに必要なのはメモリの読み書き、ベースアドレスの取得 が最低でも必要です。
作るのにおすすめの関数はMmCopyなんたらかんたらっていう関数です。
ドライバーはフックをすることが大切で、それをしなければ検知される可能性もあります。
ドライバーマッピング(crt署名ファイルを使用せずに署名をする)にはkdmapperを使うことをおすすめします。ランダムな署名をして検知を防ぐことが出来ます。

その3 メモリの読み書きを実装

Config.hppまたは.hを作成してオンオフを管理すると楽です。
例えば、名前空間Config内にchamsというbool型のものを宣言しておきます。初期値はfalseにしておきましょう。

Feature.hppまたは.hを作成して、その中に

void feature(){
    while(true){
        if(Config::chams){
            //ここにメモリ処理
            write<int>(entity + 0x26c, 7);//架空。entityのオフセット + 0x26cのアドレスに7を書き込む様になってます
        }else if(!Config::chams){
            //ここにメモリ処理
            write<int>(entity + 0x26c, 2);//架空。entityのオフセット + 0x26cのアドレスに2を書き込む様になってます
        }
    }
}

こんな感じでvoidを作り、whileループさせます。
writeって関数はドライバーでメモリを書く関数です
もしConfig::chamsがおんONであればメモリを書くようにしています。オフならメモリを戻す(やりたいことによるけど)ようになってます。
このfeature関数はmain.cppでもなんでもいいのでスレッド実行するようにしてください。

オーバーレイ側ではImGui::Toggleなどでオン・オフできるようにするとオーバーレイでコントロールできます。

締め

こんな具合で外部チートが作成できます。
これは絶対チートが禁止されているゲームでやってはいけません。
知識程度に覚えておいてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?