2011-12-17 14 views
1

私はいくつかのクラックを分析しており、そのうちの1人がリロケーションテーブルのアドレスとサイズを0に変更しました。これでクラッカーが達成しようとしていたことは?PEヘッダーから再配置テーブルのアドレスを削除するとどうなりますか?

詳細情報を提供するために、クラックの目的は、別のDLLを読み込み、カスタムテーブルのロードテーブル内の以前のWindows DLL名の名前を変更することです。

答えて

3

再配置テーブルを削除すると、DLLを再配置できないことが保証されます。
新しいコード(亀裂のコード)は、DLL内の任意のアドレスを計算する必要はなく、定数アドレス値を使用できます。

多くの場合、再配置テーブルは実際には必要ではないため、モジュールのサイズを縮小したり、一部のデータで置き換えるために削除することができます。

+0

"...いくつかのデータで置き換える"!インテレステイング!一部の実行ファイル(再配置されないファイル)が再配置ディレクトリを持っているのはなぜでしょうか?質問を参照してください(http://stackoverflow.com/questions/8534858/why-do-some-windows-applications-contain-a-relocation-directory) – mox

+0

パーフェクト!ありがとう。 – Stew

1

ロードするDLLの名前を変更するには、通常はインポートテーブルを変更するだけです。残りの部分は、問題のバイナリの詳細を知らずに、ちょうど推測の仕事です。

すべての「クラッカー」が正確に何をしているのか分かりませんが、分析しないでください。彼らはASLRを意識していない限り、再配置データは無用である(そして安全に削除することができます)、実行可能で

  • :あなたはいくつかの理由のために移転を削除する場合があります、と述べた

  • おそらく、再配置エントリを必要とするクラック追加コード。これらのファイルを追加する代わりに、クラッカーは単にファイルをパッケージ化した場合は通常、再コンパイル済みのファイルにPEリビルドを実行してディスク上の無駄なセクションのデータを削除し、クリーンアップするだけで再配置テーブルを完全に削除しました(おそらくヘッダー内のASLRも無効にします)
  • PEヘッダーを作成します。デフォルトでは、ほとんどのこれらのツールはPEからデータを再配置します。
+0

「ロードするDLLの名前を変更するには、通常はインポートテーブルを変更するだけです」 - いいえ、エクスポートは元のDLLに転送できます。 – Abyx

+0

@Abyx、私は「いつも」ではなく「普通に」と言った。転送はオプションですが、インポートテーブルのdll名を変更するだけでは実装が難しくなります。 – pezcode

+0

@Abyx、オハイオ州私はあなたが何を得ていたかを見ます。私はロードされたdllの名前を変更することを暗示しませんでしたが、ロードされるdllを変更しました(ファイル名を変更することによって) – pezcode

0

Portable Executable Specificationによれば、ライブラリは、優先ロードアドレス以外の別のアドレスにロードする必要がある場合にのみ、再配置テーブルが必要です。したがって、ディレクトリから再配置テーブルを削除しても、ライブラリーが優先アドレスでロードされている限り影響はありません(実際には、イメージがASLRをサポートしていない場合に起こります)。

関連する問題