2011-12-03 7 views
0

で変数をパッチ適用:、あなたがのはTEST.EXEそれを呼びましょう、一つのファイルを持っているエンコーディング/私はこれを行う方法のアイデアのうち、よ他の.exeファイル

それはのconst int型の値= 5を持っています。その中には全てがあります。< <値;

test.exeにパッチを当てる他の実行可能ファイルを作成して、5の代わりに10を出力するようにしたいと思います。これを実行前に実行します。

私はASLRをオフにして、その変数のアドレスを取得してからパッチを適用しようとしましたが、ディスクとメモリのアドレスはAFAIKが異なります。

答えて

1

申し訳ありませんが、この発言は、あなたがWindowsシステムで作業していることを前提としています。もしそうでなければ、私は他の実行可能イメージフォーマットでも同様の方法に従うことができると確信しています。あなたは、この特定の例では、画面の出力を変更する方法をターゲット内のデータを変更していないか尋ねるしようとしていると仮定すると、

...

は、あなたが実行可能イメージのPEヘッダを見て考えられていますか?メモリにロードされた特定のデータのアドレスをPEファイルのオフセットに変換することはできますが、問題のイメージのPEヘッダー内のIMAGE_SECTION_HEADER構造を調べることができます。

まず、メモリ内のデータのRVAを計算します。これは、その内部にあるセクションに関連するデータのアドレスです。

第2に、ファイルのヘッダーをバッファーに読み込むことによって、実行可能ファイルのPEヘッダー内のIMAGE_SECTION_HEADER構造体を索引付けします。このヘッダをメモリバッファにロードしたら、ポインタを使ってそれを処理することができます。これと同様に、

IMAGE_NT_HEADERS* pImageHeader = &peHeaderBuffer[0]; 

あなたのデータが含まれている正しいIMAGE_SECTION_HEADERを見つけた後、あなたがいる場合、このセクションがあるのPEファイルの先頭からのオフセットあなたを与える構造のPointerToRawDataメンバーにアクセスすることができますRVAを追加すると、データが格納されているファイルの先頭からオフセットが取得されます。

明らかに、私の回答はセクションヘッダーをどのように索引付けするか説明していませんが、これはかなり説明がつかないほど面倒な作業です。すべてあなたがしたい場合は

http://msdn.microsoft.com/en-us/library/windows/desktop/ms680336%28v=VS.85%29.aspx

:ここで見つけることができます - 私はあなたがOllyDbgのように、簡単なデバッガ内からexectuableのPEヘッダを見て提案し、PEヘッダの参照MSDNのドキュメンテーションうこの情報をターゲットのものと逆にすることは、OllyDbgを使用することは非常に簡単です。データに対応するセクションが表示されるまでPEヘッダービューをスキップすると、そこにPointerToRawDataメンバーが表示され、これをRVAに追加することができます。

+0

"あなたのデータを含む正しいIMAGE_SECTION_HEADERを見つけた後"。だから、RVAを計算すると、特定のヘッダーに自分のデータが含まれていることをどのように知ることができますか? – Ren

+0

私はもっと説明する必要がありました、申し訳ありません。 メモリ内のデータのアドレスはIMAGE_SECTION_HEADER :: VirtualAddress + [メモリのPEのベースアドレス]とIMAGE_SECTION_HEADER :: VirtualAddress + [メモリのPEのベースアドレス] + [セクションサイズ、メモリ]の間です – Jeremy

+0

私は混乱しています私は、私のデータが常に18FF3Cであることを記憶していることを知っています。 – Ren

1

シグネチャで検索:値5の前後に8-16バイトを取得し、.exeバイナリで検索します。

通常、const int値はアセンブラコードにインライン展開されるため、2つ以上のステートメントが参照されている場合は、そのすべてにパッチを適用する必要があります。

+0

数値定数が画面にのみ出力される場合は、文字列定数に最適化することもできます。これは、 "10"は "5"より1バイト多くのメモリを必要とするため、EXEでパッチするのが難しい場合があります。 "5 \ 0"の直後に未使用バイトが存在しない可能性があります。 –

+0

署名を使うのも一つの方法ですが、少なくともWindowsマシンでは、PEヘッダーの構造を使って簡単に翻訳することができるとは思いません。他の実行可能イメージフォーマットは同様の種類の機能。 – Jeremy

+0

@ user1070878:はい、変数がPEヘッダーを使用している場所を計算できますが、署名で検索する方が簡単です。 16進エディタで手で行うことができ(計算は必要ありません)、パッチジェネレータを使用して自動パッチ適用のexeを作成することができます。 –

関連する問題