8

.NET によって生成された dll が簡単に逆コンパイルできることはよく知られています。これは、機密情報 (暗号化キーなど) を .NET バイナリに保存しないことを意味します。

機密データを (たとえば) .NET コードで使用できる C++ バイナリに格納することは賢明な代替策でしょうか? 相互運用性についてはまだ何も知りませんが、これが追求する価値のある手段になるかどうかに興味があります. 明確にするために、私の質問は次のとおりです。

  1. C++ (または C) で生成されたバイナリは、機密性の高い文字列データにアクセスするために簡単に逆コンパイルできますか?
  2. これは、うまくいかない、達成するのが非常に難しい、または私がまだ遭遇していないはるかに優れた代替手段が存在するため、完全に頭がおかしいアイデアですか?
4

5 に答える 5

12

答えはいいえだ。.NET dllは元の構造に簡単に逆コンパイルでき、C / C ++ dllはコンパイラが好むモンスターの混乱にのみ逆コンパイルできますが、そこに格納されているデータは大きな、 -マングルされたバケットなので、どの部分を見るかを知っている人は誰でも(そして、すべてのデータが互いに近くに詰め込まれているため、どのビットがどれであるかを知るのが難しくなります)、データはすべての人が見ることができます。

Google for dataセグメントは、ネイティブWindowsバイナリの静的データが配置される場所です。

クイック編集:もちろん、暗号化された情報をC ++バイナリに保存し、事前に暗号化することもできますが、復号化キーを保存するには別の方法を使用する必要があります(Windowsユーザーパスワードなど)。.NETを使用すると、機密情報を構成ファイルに保存でき、初回実行時またはインストール時に簡単に暗号化できます。これにより、アプリが実行されるユーザーアカウントの詳細に基づいて暗号化および復号化されます(変更せず、暗号化されていない設定ファイルのコピー:-))

于 2012-12-28T13:09:55.050 に答える
4

文字列リテラルは、ネイティブ(c c ++コードコンパイル済み)バイナリ(exeまたはdll)から読み取ることができます

于 2012-12-28T13:08:45.410 に答える
3

バイナリ ファイル内の機密情報を盗み出す方法は常に存在します。.NET バイナリとネイティブ バイナリの違いは、リバース分析の複雑さです (根本的な原因は、NET コードがプロセス仮想マシン (VM) で実行されるため、.NET の保護メカニズムは VM を超えたいくつかのトリックをほとんど実行しません)。おっしゃったように、.NET バイナリは簡単に逆コンパイルできます。バイナリ ファイルを難読化ツールで難読化したとしても、de4dot などの難読化解除ツールを使用すると、簡単に難読化を解除できます。しかし、ネイティブ バイナリの逆解析は、前者よりも困難です。この分野には、アンチデバッグ、仮想マシンの難読化など、より効果的な保護メカニズムがたくさんあります。これらの手法により、コードをより安全にすることができますが、もちろんこれは相対的なものです。

于 2012-12-28T14:21:35.627 に答える
2

答えはイエスです。機密データは、C++でコンパイルされたバイナリに保存できます。セキュリティについて何も知らない人はいつもそれをします。

于 2012-12-28T13:10:42.530 に答える
1

セキュリティにはさまざまなレベルがあり、さまざまなコストとユーザーへの不便があります。キーをコードに格納することはかなり一般的ですが、あまり安全ではありません。Windows を意味する .NET を使用しているため、データ保護 API (DPAPI) を調べることができます。Windows ユーザー ID パスワードをキーとしてデータを暗号化します。

多くのラップトップとサーバーには、ユーザーに代わって暗号化を行い、キーを保護するトラステッド プラットフォーム モジュール (TPM) チップが含まれています。

于 2012-12-28T14:38:19.410 に答える