web-dev-qa-db-ja.com

パッカー/クリプターはASLRをどのように扱いますか?

実行可能コードの一部を難読化するためにパッカーまたはクリプターが使用されている場合、そのコードで行われた呼び出しと参照はロード時に更新されず、コードが解凍または暗号化されていない場合は正しくないようです!パッカーまたはクリプターはこの問題にどのように対処しますか?

2
chillsauce

最新のパッカーは、これをWindows PEローダーと同じ方法で再配置します。

PEファイルの.relocセクション( ドキュメントはこちら )には、イメージを優先アドレスでロードできない場合に「修正」する必要があるアドレスに関する詳細が保持されます。これは、標準のPEヘッダーで参照されます。

パッカーはこのデータを読み取り、再配置を実装できます。パッカーがこれを処理する方法は、実装によって異なります。おそらく、元の再配置をパックされた実行可能ファイルのどこかに格納するか、カスタム形式で格納します。

/DYNAMICBASEでコンパイルされていないかのように、ASLRに対応していないPEファイルを残して、再配置を取り除くこともできます。パッカーは、再配置を実装する代わりにこれを行うことを選択できます。

StackOverflowでのUPXに関する質問 があり、分析中の一般的な修正は、ASLRを無効にすることです( 参照1 / 参照2 )。

PEセクションのレイアウトに関する このReverseEngineering.SEの投稿 で、より多くの詳細を読むことができます。

3
David