CheatEngineの使い方2。ログイン認証を突破する!メソッド処理改変してみよう

 

過去に書いた基本編の「CheatEngineの使い方。プログラム処理の改変のやり方、書籍紹介」という記事が意外と人気だったので、第二弾を書いてみようと思います。

今回は「メソッドの処理を改変」します。この言葉だけてウキウキしてしまいます(笑)

高度な技術が必要そうな響きですが、やってみると案外簡単にできます。
画像つきで解説していきます。どうぞご覧ください。

今回もサンプルプログラムを用意しました。
また、サッと撮った動画も用意しています。

 

※決まりごと
Cheat Engineはオンラインゲームなどでは使用しないように注意しましょう。チート行為は他人にも迷惑がかかります。また、ゲームの運営側のサーバー負担の原因にもなります。絶対に行わないでください。技術を試したい場合は、許可されたプログラムのみで使用しましょう。自分でコンパイルしたプログラムであれば問題ないでしょう。他人に一切迷惑をかけない環境でおこなってください。これが守れない方は閲覧をお控えください。

スポンサーリンク

CheatEngineでメソッドの処理を書き換える

ここではメソッド=関数と思っていただいて支障ないはずです。(違いは検索してください)

メソッドは処理のひとまとめしたものです。

このメソッド中の処理を改変するのがこの記事での目的です。

 

■CheatEngineの基本的な使い方については下記の記事をご覧ください。
CheatEngineの使い方。プログラム処理の改変のやり方

 

 

CheatEngineでシンボルを表示するように設定

メイン画面の左にある[Memory View]から下記のような画面を開いて、View→Show sysmbolsにチェックを入れておいてください。

cheatengine-show-symbols

 

アドレスがメソッドの名前に変わります。便利な機能です!

 

 

今回用意したサンプルプログラムをダウンロード

ダウンロードは下記のGoogleドライブからどうぞ。

https://drive.google.com/file/d/0BxA4pUoZ2HVGUEg5U2tEQUlSNzg/view?usp=sharing&resourcekey=0-ZxF20K-bkDDbLudnXN2JPA

(2021年9月22日:リンクを更新しました。)

画面はこんな感じになっています。

howtomania02exe

ログイン認証を再現しました。
あくまで練習用なのでサーバーとの通信機能などは実装していません
なので、いじくり倒しても大丈夫です。

(開発言語はVB.NETです)

 

ログインに成功すれば、「成功」を知らせるメッセージウィンドウが表示されます。これが目標達成です。

※ブルートフォースな手法ではなくアセンブラ命令を書き換えて達成するようにしましょう。

 

—– 解説 —–

 

方法はいくつかありますが、今回はIDとパスワードが両方が一致すれば認証できそうだと予想/仮定されます。(IDが一致かつパスワードも一致)

この予想や仮定のもと進めていきましょう。

 

 

どのようなプログラムが書かれているか想像する

どんな感じのプログラムが書かれているか想像することで、メソッドを特定できます。

言語はなんでも良いです。サンプルはVB.NETなのでこれで書きます。

 

色んな書き方がありますが、わかりやすそうな例を出しておきます。(実際のソースとは違います)

[認証ボタンのクリックイベント]の想定例
If (ID.Text = “id999”) And (PW.Text = “PaSSwoRd”) Then
MessageBox.Show(“成功”)
Else
MessageBox.Show(“認証に失敗しました”, “失敗…”, MessageBoxButtons.OK, MessageBoxIcon.Error)
End If

 

ここでわかることで大事なのは、If文で文字列比較を行っているということです。ここまで想定できればあとは使っているメソッドを特定するだけです。

使っているメソッドは検索などして調べましょう。例をあげると、VB.NETでは「String.Equals」などがあります。たくさんのオーバーロードがありますね。5つ。リンク先のMSDNにかかれているメソッドの内容も軽く読んでおくと良いです。

 

 

CheatEngineでメソッドの処理を見る

さっそくString.Equalsの処理を見ましょう。

見る方法は2つあります。

■1つめ
①[Memory View]からMemory Viewerを開きます。
②Ctrl+Gで「System.String::Equals」を入力して移動します。

■2つめ
①Memory Viewerで Ctrl+Alt+S を押して、Enumerate DLL’sを開きます。
②Ctrl+Fで「System.String::Equals」を入力してFindします。

 

ここでは2つ目の方法を使用してください。

 

あとは地道にBreakPoint(ブレークポイント)を該当のアドレスにF5で設置します。そして[認証ボタン]を押してブレークするまで繰り返します。具体的には下記のような手順。

①Findして見つかったメソッドをWクリックして該当アドレスに移動。
②F5でブレークポイント設置
③認証ボタンを押す ├CheatEngineで反応なしなら①から繰り返す。
└反応ありならそのメソッドが使用されているので処理書き換え(下記ステップ)に移る

 

※③で認証ボタンを押さないでもCheatEngineが反応する場合があります。その場合も下記のステップに移動してみましょう。

※私の環境では アドレス: 7020CE10 のメソッドが使用されていました。

 

 

メソッドのアセンブラ処理を書き換える!

String.Equalsの説明をみると「オブジェクトの値が同一かどうかを判断します」とありました。

つまり、値と値を比較をしているということです。

 

比較? 英語にすると compare となります。

アセンブラ言語にも比較命令がありましたね。そう、cmp命令です。

 

ありました。上から5行目です。

cheatengine-method-asm

 

cmp ecx,edx となっていますね。
ecx と edxを比較してその下で条件判定で分岐ジャンプしています。

 

あとはこの cmp命令を書き換えるだけです。
つまり、cmp命令のオペランドを同じすればよいのです。

ここでは cmp ecx,ecxなどとすれば良いです。

書き換える方法は、色々ありますが、今回は下記の手順でおこなります。

①cmp命令をダブルクリック
②[cmp ecx,edx]から[cmp ecx,ecx]にする。

 

あとはブレークポイントをF5で解除して、認証ボタンを押してみましょう。

cheatengine-kakikae-ok

やった!お疲れ様でした。

 

メソッドを書き換える手順の動画

 

その他の方法も考えてみる

メッセージウィンドウが表示されるのもメソッドやAPIなどが使用されているはずです。

.NETなら「System.Windows.Forms.MessageBox::Show」などが利用されてそうです。

また、Win32 APIのMessageBoxWが利用されている可能性もあります。※今回のサンプルではMessageBoxW。

 

MessageBoxWのreturnにブレークポイント→F8でステップイン→呼び出し元(Call)に移動するのでそこでもreturnにブレークポイント…これを繰り返してクリックイベントのメソッドにたどり着けます。

 

MessageBoxから辿って処理を書き換える動画

 

 

本を買って技術をもっと高めよう!

おすすめの本を紹介します。

・・・が、過去記事にあるのでそちらでご覧ください。

CheatEngineの使い方。プログラム処理の改変のやり方、書籍紹介

 

 

参考になればうれしいです。
記事のお知らせや個人的なつぶやきをしてます。気が向いたらフォローしてやってください!

ハウツーマニアのTwitter

コメント

  1. 匿名 より:

    なるほどね

  2. 匿名 より:

    CEの練習はして色々身についたんですが
    アセンブラがさっぱりで…
    ハウツー様アドバイス下さい
    Cは入門書何冊かかじったんですが

  3. 匿名 より:

    CEの使い方は覚えたのですがアセンブラの読み方がまるっきり分かりません。
    どうすれば読めるようになりますか?ハウツー様アドバイス下さい
    Cは多少読めます

タイトルとURLをコピーしました