Windows実行可能ファイルのリソースを編集できるさまざまなツールがあります。これらのツールを使用すると、プログラムのルックアンドフィールを変更するための非常に簡単なインターフェイスが可能になります。アイコン、テキスト、メニューの置き換えは、元に戻す知識がなくても簡単に実行できます。
私の質問は、リソースがそれほど簡単に編集されないようにするためにどのようなオプションが必要かということです。
Windows実行可能ファイルのリソースを編集できるさまざまなツールがあります。これらのツールを使用すると、プログラムのルックアンドフィールを変更するための非常に簡単なインターフェイスが可能になります。アイコン、テキスト、メニューの置き換えは、元に戻す知識がなくても簡単に実行できます。
私の質問は、リソースがそれほど簡単に編集されないようにするためにどのようなオプションが必要かということです。
エレガントでシンプルな解決策は、起動時に実行可能ファイルに署名し、署名を確認することです(変更を加えると署名が無効になります)。誰かがあなたの署名チェックにパッチを当てたとしても、署名はまだ無効であり、exeがあなたが提供したものと同じではないことを明らかにします。
私の他の考えは、exeパッカーを使用するかチェックサムを取ることですリソースについて(両方とも@angealbertineの回答ですでに提案されています)。
また、エディター自体のバグを悪用して、リソースの改ざんを防ぐことができます。ここで興味深いのは、ほとんどのリソースエディターが非典型的な(あまり非典型的ではない)PEファイルを解析する方法を知らないことです。たとえば、一部の編集者は、リソースセクション名が常に .rsrc
である必要があると想定しています。例:
特別なリソースを挿入してリソースハッカーを無限に陥らせるループ。ここでのデモ: http://code.google.com/p/ollytlscatch/downloads/detail?name=antiResHacker.exe
特別な挿入 RT_STRING
リソースを使用してResourceHackerをクラッシュさせます。
IMAGE_OPTIONAL_HEADER
構造のサイズはと想定されます。 code> sizeof(IMAGE_OPTIONAL_HEADER)
、現在は16進数で 0xE0
ですが、さらに大きくすることもできます。サイズを大きくすると、ResourceHackerはPEファイル全体を破棄します。
NumberOfRvaAndSizes
フィールドを使用します。このフィールドは、 0xFFFFFFFF
に簡単に偽造できます。これにより、RestoratorはPEファイル全体を破棄します。 .rsrc
である必要があると想定しています。それ以外は変更してください。これにより、RestoratorはPE全体を破棄します。特性
フィールドが IMAGE_SCN_CNT_UNINITIALIZED_DATA
に設定されているリソースセクションは、Restoratorによって破棄されます。 デモはこちら: http://pastebin.com/ezsDCaud
リソースは、定数が定義された単なる標準構造ですが、最終的には、含まれているものに関係なく、バッファーに対する再帰構造にすぎません(これが標準レイアウトです)。
理論的には、深度、ループ、無効なタイプなど、あらゆるものを含めることができますが、標準のAPIはそれらで機能しません。
したがって、次の場合は、それを確認する必要があります。リソースを暗号化または圧縮する場合、これらのAPIを使用する前に、リソース(リソースディレクトリ構造とそのコンテンツの両方)を復元する必要がありますが、これは明らかではない場合があります。
特に、一部のリソースが使用されます。最初のアイコン、マニフェスト、バージョン情報など、ファイルが実行される前であってもOSによって、これらをそのまま保持することをお勧めします。
簡単なリソース編集を防ぐ簡単な方法は、ストリームを実行することです。選択したリソース、最終バイナリ(リンカーがそれらを配置し、DataDirectoryにリソースエントリを生成した後)、およびこれらのリソースをdemで復元するための暗号および/またはプログラムの初期化時。
既製のソリューションを探している場合、 PECompactなどの多くの優れたパッカーはリソース圧縮をサポートしているため、外部リソースの編集を防ぎます。