質問:
バイナリファイルのテキストの暗号化
Mellowcandle
2013-03-28 21:55:17 UTC
view on stackexchange narkive permalink

テキスト文字列は通常、16進値のASCIIエンコーディングをサポートするエディタを使用してバイナリファイルで簡単に読み取ることができます。これらのテキストスニペットは、リバースエンジニアが簡単に調査および変更できます。

開発者は、実行時にこれらのテキストスニペットを暗号化し、復号化するためにどのようなオプションが必要ですか?

1 回答:
QAZ
2013-03-28 22:34:50 UTC
view on stackexchange narkive permalink

ニーズに応じて適用できる場合とできない場合があるいくつかのオプション:

  1. 可能な場合は文字列を使用して興味深い情報を漏らすことは避けてください。たとえば、文字列を使用してエラー情報やログ情報を表示している場合、これにより、アプリケーションで何が起こっているかについて、リバースエンジニアに貴重な詳細を提供できます。代わりに、これらの文字列を数値エラーコードに置き換えます。

  2. 難読化すべての文字列を、単純なXORルーチンなどの対称アルゴリズム、または次のような暗号化アルゴリズムで置き換えます。 AES。これにより、バイナリのカジュアルな検査中に文字列が検出されるのを防ぐことができます。おそらくcrypto / xorキーをバイナリに格納するので、「難読化」と言います。もう少し頑張ろうとするリバースエンジニアは、難読化された文字列を確実に回復します。

  3. 暗号化すべての文字列(すべての文字列が別のセクションにリンクされるようにします)実行可能ファイルに入れてこのセクションを暗号化します)、バイナリの外部に復号化キーを保存します。キーをリモートで保存し、可能な場合はアクセスサーバー側を制限できます。したがって、リバースエンジニアがバイナリを取得した場合、キーにアクセスできない可能性があります。 復号化キーは、ユーザーのマシンについて知られているいくつかの予測可能な要因に基づいてユーザーのコンピューター上で動的に生成することもできます。基本的に、この特定のマシン(またはマシンのタイプ)で実行した場合にのみ暗号化されたデータを復号化できます。この手法は、特定のターゲットのペイロードを暗号化するために政府のマルウェアによって使用されています(これを読んだ論文へのリンクを思い出せたら、回答を更新します)。

  4. クリエイティブに、すべての文字列を外国語で保存し、実行時にオンライン翻訳サービスを使用して文字列を予想される母国語に翻訳し直します。もちろん、これはあまり実用的ではありません。

  5. ol>

    もちろん、実行時に文字列がデコード/復号化される場合、リバースエンジニアは文字列を表示するためにメモリからプロセスをダンプすることができます。このため、必要な場合にのみ個々の文字列をデコード/復号化するのが最適な場合があります(デコードされた文字列を一時的な場所に保存し、使用後にゼロにする可能性があります)。

暗号化されていない文字列がメモリからダンプされないように保護する手法については、[このstackoverflowの質問](http://stackoverflow.com/questions/3785582/how-to-write-a-password-safe-class)を参照してください。
「クリエイティブになる」の+1。プログラムを理解しようとする試みを阻止する最善の方法は、オンラインのQ&Aサイトに記載されていない手法を使用することです...


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