8

難読化は、「あいまいさによるセキュリティ」または「保護の誤った感覚」キャンプのどこかに該当するアイデアのように私には思えます。知的財産を保護するために、著作権があります。セキュリティの問題が発見されないようにするために、これらの問題を修正しています。一言で言えば、社会問題の技術的解決策だと思います。それらはほとんど機能しません。

しかし、私たちの開発チームでそのように感じているのは私だけのようです。そのため、私は間違っているか、説得力のある議論が必要です. 私たちの製品は .NET を使用しており、ある開発者は .NET Reactor を提案しました (ちなみに、この SO スレッドでも提案されていました)。

.NET Reactor は、純粋な .NET アセンブリ (C#、VB.NET、Delphi.NET、J#、MSIL などで記述) をネイティブ マシン コードと混合することで、逆コンパイルを完全に停止します。

つまり、基本的に、バイトコードのすべての利点を一度に捨てるということですか?

難読化にはエンジニアリング上の利点がありますか?

4

8 に答える 8

13

あなたは工学的な理由で尋ねたので、これは厳密に言えば質問に対する答えではありません。しかし、それは有効な説明だと思います。

おっしゃる通り、難読化は社会問題への対処を目的としています。また、社会 (またはビジネス) の問題は、技術的な問題とは異なり、完全な解決策を持っていることはめったにありません。問題に対処したり、問題を最小限に抑えるには、ある程度の成功しかありません。

この場合、難読化により、誰かがコードを逆コンパイルして盗むことへの障壁が高まります。カジュアルな攻撃を思いとどまらせ、惰性で知的財産が盗まれる可能性を低くします。つまらない例えを言えば、イモビライザーは車の盗難を防げませんが、その可能性は低くなります。

もちろん、保守性、(おそらく) パフォーマンス、そして最も重要なことに、ユーザーがバグ レポートを正確に送信するのを難しくするという点でコストがかかります。

GateKiller が言ったように、難読化は断固たるチームの逆コンパイルを妨げることはありませんが (製品が何であるかにもよりますが)、チームがあなたを攻撃する可能性はどの程度あるのでしょうか?

つまり、これは社会問題に対する技術的な解決策ではなく、複雑な社会構造に 1 つの影響を与える技術的な決定です。

于 2008-08-28T09:28:11.703 に答える
6

プログラマーの大規模なチームが本当にあなたのソースコードを手に入れたいと思っていて、それに時間とお金と労力があれば、彼らは成功するでしょう。

したがって、難読化は、あなたの情報源を入手するための時間、お金、または労力を持たない人々を止めるはずです。

于 2008-08-28T09:14:05.370 に答える
4

純粋なマネージ コードの難読化に固執する場合、アセンブリ サイズをかなり削減でき、難読化されたクラス/関数名 (1 文字に折りたたまれる) により、メモリ フットプリントが小さくなります。これはほとんどの場合無視できますが、一部のモバイル/組み込みデバイス (主に Java ではありますが) に影響を与えます (そして使用されます)。

于 2008-08-28T09:13:09.413 に答える
3

潜在的なエンジニアリング上の利点の 1 つは、場合によっては、難読化によって小さな実行可能ファイルやその他のアーティファクトが作成される可能性があることです。たとえば、JavaScript を難読化すると、ファイルが小さくなります (すべての変数の名前が「descriptiveNameOne」ではなく「a」と「b」になり、すべての空白文字が使用されるため)。剥がされるなど)。これにより、難読化された JavaScript を使用する Web ページの読み込み時間が短縮されます。明らかに、これは .NET の世界では (それほど) 当てはまりませんが、エンジニアリングに直接的なメリットがある状況の例です。

于 2008-08-28T09:13:35.183 に答える
2

問題のいくつかについて説明するので、役立つかもしれない質問を投稿しました: should-i-be-worried-about-obfuscating-my-net-code

于 2008-08-28T10:26:47.693 に答える
2

.net とは関係ありませんが、Javascript での難読化、およびおそらく他のインターペット言語での難読化を検討します。Javascript は、必要な帯域幅と、パーサーが読み取らなければならないトークンを削減するため、難読化の恩恵を十分に受けます。

しかし、コンパイルされたバイトコードを難読化することは、私にはあまり役に立ちません。つまり、何を試して達成しますか?難読化は、簡単に回避されないようにするために、ライセンス チェック コードでわずかに役立つように見えるだけです。

于 2008-08-28T09:16:51.760 に答える
2

難読化を使用する主な理由は、あなたが指摘したように知的財産を保護することです。一般に、.NET Reactor のような難読化製品を購入する方が、著作権を法的に行使しようとするよりも、企業にとってはるかに費用対効果が高くなります。

難読化は、パフォーマンスの向上やアセンブリ サイズの縮小など、その他の付随的な利点も提供します。これらは、あなたが探しているエンジニアリング上の利点です。

于 2008-08-28T09:17:18.500 に答える
1

暗号化を使用して、途中で情報を保護します。

難読化を使用して、プログラムがまだ情報を保持している間に情報を保護します。

于 2008-08-28T09:41:12.777 に答える