2

私は逆アセンブルに比較的慣れていますが(読む:愚かな初心者)、このビットは私を困惑させました:私はzlibで圧縮されたセーブファイルのセットとそれらをロードするゲームを持っています。それらの構造は既知であり、ロードされると、メモリ内の構造体は対応する保存ファイルと同一になります。問題は、ゲームがどうにかして静的ポインターを残さない、スクリプト専用ではない言語で書かれていることです。まったく。数十人が試しましたが、同じマシンでマイナーな変更を加えると、一見静的なポインター パスが壊れてしまいました。簡単な解決策は、プロセスのメモリでファイルの内容を検索することですが、これは非常に力ずくの解決策であり、教育目的では避けたいと思います。

質問:

  • OllyDBG を使用しようとしています。私はそれが苦手ですが、実際に機能する簡単なコードケーブを作成することができました。仕事に適したツールを使用していますか、それとも愚かな初心者ですか? 最新のリバーサーのキットにはどのようなツールが含まれていますか?
  • 関連するメモとして、メモリ検索にチート エンジン (またはそのいとこである MHS) を使用する必要があります。これは少し直感に反するようです。OllyDBG は、値を検索して結果を絞り込む方法を本当に提供していませんか、それとも何か不足していますか?
  • WINAPI にブレークポイントを設定するにはどうすればよいですか? 一体、WINAPI はアセンブリ レベルでどのように見えるのでしょうか? これは私がまともな情報を見つけることができなかったものであり、Googleには十分すぎるほどの情報があると確信していますが、正しい言葉を入力できないようです.
  • 上記を拡張すると、動的ブレークポイントをどのように設定しますか? 頻繁に呼び出される特定の関数に興味があるが、その時点での EAX が特定の値に等しい場合にのみ、その条件で Olly (または他の何か) を中断するにはどうすればよいでしょうか?
  • 逆アセンブルに関する一般的な本/提案/リソース、または物事を壊すことを目的とした低レベルのプログラミング。

免責事項: 問題のゲームはフリーウェアであり、シングル プレイヤーであり、作成者はこれを否定しません。何よりも機能を拡張することを目的としたプロジェクトです。また、最初の投稿ですが、あまり手探りしていないことを願っています。:(

4

1 に答える 1

4

多くの質問が 1 つにまとめられています。いくつか答えてみます。

OllyDBG は優れた無料の逆アセンブラーです。専門家はIDA-Proにお金を払うかもしれませんが、それは高価な製品です.

メモリの検索に関して、OllyDBG はその機能を提供します。任意のメモリ ダンプ ウィンドウ (たとえば、CPU ウィンドウのメモリ ダンプ ペイン) で、右クリックしてコンテキスト メニューから [検索対象] を選択し、[整数] または [バイナリ文字列] を選択します。Cheat Engine とは異なり、OllyDBG では概算値を検索することはできません。あなたはこれを行うプラグインを探しているかもしれませんが、私が知っているわけではありません。

「WINAPI」とは、Win32 API を意味していると思います。あなたが調べているゲームには、おそらく WINAPI という名前のコンポーネントがあります。さまざまな Windows API にブレークポイントを設定する (ゲーム クライアント エクステンダーが好んで行う) ためには、いわば実際の Windows API がどこにあるかを知りたいと思うでしょう。すべての機能が 1 つの "場所" にあるわけではありません。Win32 API を構成する関数を「エクスポート」するさまざまな DLL モジュールがあります。たとえば、MessageBox()は からエクスポートされますUSER32.DLLが、からExitProcess()エクスポートされKERNEL32.DLLます。

OllyDBG で Windows API 呼び出しにブレークポイントを設定するには、[表示] メニューの [実行可能モジュール] をクリックして、メモリ内のすべてのモジュールを表示します。USER32.DLL モジュールを右クリックし、コンテキスト メニューから [名前の表示] を選択します。そこには、USER32 からエクスポートされたすべての関数が表示されます。

ゲーム クライアントが C で記述されている場合、「インポート テーブル」と呼ばれるもので使用される API 関数のリストが存在します。これは、メモリにロードされた .EXE モジュールで検出されるか、.exe を使用してディスク上の EXE ファイルで表示することもできますlink /dump /imports

スクリプト言語の場合、通常、インポート テーブルはありません。または、インポート テーブルがある場合は、スクリプト エンジンを介してアクセスできるさまざまな機能をインポートします。

残念ながら、OllyDBG は条件付きブレークポイントをサポートしていないと思います。

逆アセンブルの学習をどこから始めるかについては、自分のコードでかなりの量のアセンブルを利用することが最善の方法であることは間違いありません。「Hello World」というメッセージ ボックスのみを表示する Windows アプリケーションを作成する場合でも、MessageBox() API にアクセスするには、インポート テーブルについて学習する必要があります。実際、このようなアプリケーションを C で作成することも有益です。ただし、GUI 環境ではなく、コマンドライン ツールのみを使用してコードをコンパイルすることをお勧めします。GUI はあまりにも多くの情報を隠し、学習の妨げになります。USER32.DLL API にアクセスするには、C コードが透過的にMessageBox().

于 2009-10-13T21:28:34.593 に答える