質問:
リソースエディタの使用を防ぐ方法
Mellowcandle
2013-03-30 13:03:52 UTC
view on stackexchange narkive permalink

Windows実行可能ファイルのリソースを編集できるさまざまなツールがあります。これらのツールを使用すると、プログラムのルックアンドフィールを変更するための非常に簡単なインターフェイスが可能になります。アイコン、テキスト、メニューの置き換えは、元に戻す知識がなくても簡単に実行できます。

私の質問は、リソースがそれほど簡単に編集されないようにするためにどのようなオプションが必要かということです。

三 答え:
Remko
2013-03-31 02:25:26 UTC
view on stackexchange narkive permalink

エレガントでシンプルな解決策は、起動時に実行可能ファイルに署名し、署名を確認することです(変更を加えると署名が無効になります)。誰かがあなたの署名チェックにパッチを当てたとしても、署名はまだ無効であり、exeがあなたが提供したものと同じではないことを明らかにします。

私の他の考えは、exeパッカーを使用するかチェックサムを取ることですリソースについて(両方とも@angealbertineの回答ですでに提案されています)。

waliedassar
2013-04-03 17:56:05 UTC
view on stackexchange narkive permalink

また、エディター自体のバグを悪用して、リソースの改ざんを防ぐことができます。ここで興味深いのは、ほとんどのリソースエディターが非典型的な(あまり非典型的ではない)PEファイルを解析する方法を知らないことです。たとえば、一部の編集者は、リソースセクション名が常に .rsrc である必要があると想定しています。例:

  1. リソースハッカー

    • 特別なリソースを挿入してリソースハッカーを無限に陥らせるループ。ここでのデモ: 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ファイル全体を破棄します。

  2. Restorator

    • 1cと同じです。
    • NumberOfRvaAndSizes フィールドを使用します。このフィールドは、 0xFFFFFFFF に簡単に偽造できます。これにより、RestoratorはPEファイル全体を破棄します。
    • リソースセクション名は .rsrc である必要があると想定しています。それ以外は変更してください。これにより、RestoratorはPE全体を破棄します。
    • 特性フィールドが IMAGE_SCN_CNT_UNINITIALIZED_DATA に設定されているリソースセクションは、Restoratorによって破棄されます。

    デモはこちら: http://pastebin.com/ezsDCaud

  3. ol>
賢い!ただし、質問:いくつかの提案は、reiurce定義の仕様から外れているようです。これにより、現在または将来のWindowsバージョンでローダーが失敗したり、リソース機能(loadstringなど)が失敗したりする可能性がありますか?
MicrosoftがPEの読み込みとトラバーサルコードの基本的な動作を変更する可能性はほとんどありません。私は彼らがこれをするのを見たことがありません。動作の唯一のバリエーションは、win9xカーネルが使用されていたときであり、NTカーネルとは異なります。 Microsoftは、すべてのタイプのリンカーがPEファイル形式のそのような異なる解釈を生成することをよく知っているので、何にも触れないことを知っていると確信しています。実際、PEファイル形式は驚くほど多様であり、唯一の定数はWindowのコードとの互換性です。もちろん、これらのようなmodを作成した後は十分にテストしてください。
antiResHacker.exeへのリンクが切れています
Ange
2013-03-30 13:33:47 UTC
view on stackexchange narkive permalink

リソースは、定数が定義された単なる標準構造ですが、最終的には、含まれているものに関係なく、バッファーに対する再帰構造にすぎません(これが標準レイアウトです)。

理論的には、深度、ループ、無効なタイプなど、あらゆるものを含めることができますが、標準のAPIはそれらで機能しません。

したがって、次の場合は、それを確認する必要があります。リソースを暗号化または圧縮する場合、これらのAPIを使用する前に、リソース(リソースディレクトリ構造とそのコンテンツの両方)を復元する必要がありますが、これは明らかではない場合があります。

特に、一部のリソースが使用されます。最初のアイコン、マニフェスト、バージョン情報など、ファイルが実行される前であってもOSによって、これらをそのまま保持することをお勧めします。

簡単なリソース編集を防ぐ簡単な方法は、ストリームを実行することです。選択したリソース、最終バイナリ(リンカーがそれらを配置し、DataDirectoryにリソースエントリを生成した後)、およびこれらのリソースをdemで復元するための暗号および/またはプログラムの初期化時。

既製のソリューションを探している場合、 PECompactなどの多くの優れたパッカーはリソース圧縮をサポートしているため、外部リソースの編集を防ぎます。

しかし、ここで何らかのロード時の解凍/復号化が機能するのではないかと思います。リソースエディタは、おそらくメモリではなくディスク上のデータを操作します。
あなたが正しい、私は私の答えを編集しました。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...