7

同様の質問hereおよびhereで説明されているように、コードをリバース エンジニアリングから保護したいと考えています。

私の状況は、Simucalが彼の (優れた) 回答で説明しているとおりです。

基本的に、ソース盗難の標的になる唯一の可能性は、ドメインに関連する非常に具体的でエンジニアリングが難しいアルゴリズムを持っている場合であり、それによって競合他社に有利になります. これは、アプリケーションのごく一部のリバース エンジニアリングを試みることが費用対効果の高い唯一の機会です。

私はまさにこの状況です。特定のドメインにとってエレガントで価値のある、設計が難しいアルゴリズム。

微調整と開発に何ヶ月も費やした結果、非常にコンパクト (約 100 行のコード) で洗練されたものになりました。コードのこの特定の部分をリバース エンジニアリングから保護するか、少なくとも合理的に困難にしたいと考えています。

このシナリオは、C# で記述されたリッチ クライアント アプリケーションであり、コードのこの部分をデプロイする必要があります。Web サービスから実行することはできません。

コードを抽出してアンマネージ ネイティブ バイナリに書き直すことは、パフォーマンス上の理由 (および境界を越える問題) のため、オプションではないと思います。

最初は単純な難読化を行いたかったのですが、コードのサイズが小さいため、これでは十分な保護が得られないと思います。

理想的には、アプリケーション全体を保護したいと考えていますが、通常の難読化ツールやサード パーティのパッカーを使いにくくしていると思われる主な問題が 2 つあります。

  1. アプリケーションはプラグイン インターフェイスを提供するため、一部のアセンブリ (およびインターフェイス/クラス) を難読化してパックしないでください。

  2. エラー レポートを受け取ったときに、実際のスタック トレースを取得できるようにしたいと考えています。これは、実際のコードへのマッピングの難読化によって実現できる可能性があります。

これらの問題はさておき (これについてもご意見をいただければ幸いです)、コードのごく一部をリバース エンジニアリングから保護するにはどうすればよいでしょうか? 誰かがコードを変更したりハッキングしたりすることは気にしませんが、理解しにくくリバース エンジニアリングしたいと考えています。

4

8 に答える 8

4

それはできません。コードを実行できる場合は、コードを読み取ってリバース エンジニアリングできます。あなたにできることは、それを少し難しくすることだけです。信じてください。あなたはその事実を好まないかもしれませんが、ほとんどのクラッカーは、物事をクラックしにくくすることに他の誰よりもはるかに優れています. コードを保護するための労力は、特に有料の顧客に不利益を与える場合は特に、通常は価値がありません。DRM の見事な失敗例をご覧ください。

私のアドバイスは、それについて心配しないことです。あなたのアルゴリズムが本当に斬新な場合は、特許を求めてください (ただし、特定のハードウェア実装に結び付けない限り、Bilski の決定でそれは少し難しくなります)。自由なアクセスを許可しないことを保証する契約に署名した人にのみソフトウェアを配布しない限り、企業秘密に依存することも役に立ちません。そして、これを監視する方法が必要です。バイナリをインターネット上に公開したり、契約なしに配布したりした時点で、企業秘密の地位を失ったと見なされると思います。

ライセンスに依存することにも危険が伴います。リバース エンジニアリングを禁止する条項をライセンスに挿入できると思うかもしれませんが、世界中の多くの司法管轄区では、これらの条項を具体的に禁止しています。そして、クラッキングのほとんどに責任を負うロシアのギャングは、いずれにせよ、その規定を尊重する可能性は低い.

製品をできる限り最高のものにすることに集中してみませんか? 目標は、群衆を完全に締め出すのではなく、群衆の先を行くことです。最初に提供し、競合グループで常に最高の製品を提供することは、役に立たない保護 (IMNSHO) に多くの労力を浪費するよりもはるかに繁栄を保証します。

これは私の意見です。私は間違っているかもしれません。私は前に間違っていました、あなたは私の妻に尋ねるだけです:-)

于 2009-02-25T07:02:15.790 に答える
3

難読化は別として、Microsoft ( ScottGuなど) でさえ、基本的に、適切な量の意図と能力を持つ人々がアプリケーションをリバース エンジニアリングすると言っています。リバースエンジニアリングを防止するための隠蔽またはその他の手段。

これが、BCL ソースを非公開にする代わりに公開した理由の一部です。

于 2009-02-25T05:43:21.750 に答える
3

その小さな重要な部分に到達するのが難しくなるため、完全なコードを難読化する必要があります。コードが小さいほど、理解しやすくなります。難読化されたライブラリが数多く存在するため、ほとんどの難読化ツールはパブリック インターフェイスをいじるべきではありません。

ただし、それを隠そうとするのではなく、そこに特別なトリックがないことをユーザーに納得させるべきだと思います。カイザー・ソゼの言葉を引用すると、「悪魔がこれまでに使った最大のトリックは、悪魔が存在しないことを世界に納得させることです」.

そしてもちろん、いつでも発明の特許を申請し、法的に保護することができます。

于 2009-02-25T05:47:12.520 に答える
2

1つのオプションは、ライセンスキーやハードウェアフィンガープリントを使用して、実行時に機密コードを復号化し、ILとして発行することです。これにより、静的なリバースエンジニアリングツール(Reflectorなど)からは見えなくなります。

また、デバッガーの存在を検出し、デバッグモードでの実行を拒否します。ただし、非常に限られた状況(つまり、マシン上)を除きます。

これにより、デバッグが非常に難しくなり、他の人にとってはほぼ不可能になることに注意してください(これが問題ではないエンドユーザーアプリであるが、他の開発者が構築するライブラリまたはフレームワークである場合、それは問題です)

また、物理メモリのディスクへのコピーを作成し、メモリダンプでオフラインツールを使用すると、復号化されたアルゴリズムが明らかになるため、簡単に無効にできますが、ほとんどの人が気にするよりもはるかに多くの問題が発生します。

全体としては、あなたにとっての困難と、いくつかの悪いリンゴに対する抑止力と、盗用/盗用による潜在的な損失との間のトレードオフです。

頑張って、あなたが何を決めるか教えてください!

于 2009-02-25T05:53:55.437 に答える
2

コードがそれほど機密性の高いものである場合は、誰もアクセスできない場所に配置してください。

EG は、ユーザーが機能を公開するサービスにアクセスするためのクライアントまたは Web ページを提供します。

このサービスは、外部ファイアウォールの背後にあり、機密コードが実行される内部ファイアウォールの背後にあるバックエンド サーバーと通信できます。

さらに対策として、そのコードを難読化します。

これには、コードに到達する前に、セキュリティのいくつかのレイヤーを妥協する必要があります。

于 2009-02-25T06:32:46.373 に答える
1

C#またはCILレベルで難読化できますが、実際に不可能になるのは、ILコンパイラが実際に実行できる最も効率的なマシンコードを作成するように設計されていることです。

したがって、アルゴリズムをリバースエンジニアリングするには、マシンコードを取得し、その上で標準の逆アセンブルツールを実行します。標準入力API呼び出しから標準出力API呼び出しに転送することにより、システム全体でデータをトレースします。

それに直面して、誰かがそれを望むなら、彼らはそれを持つことができます。

さりげなく理解しにくくすることができます。たとえば、Javaアプリケーションによって管理されているデータベースの内容を確認したいと思いました。Javaの逆コンパイルは本当に厄介で、奇妙な関数やクラス、名前空間がすべて同じ名前でいっぱいで、実際に起こっていることを意図的に隠そうとしていることがわかりました。

使用してた逆コンパイラーを修正して、すべての名前をAだけでなくA_namespaceに変更すると、関数フローがEclipse呼び出しトレースグラフにすぐに表示されるようにすることができます。

代わりに、逆コンパイラーを書き直すのではなく、手を挙げて実際の作業に取り掛かりました。

だから、あなたはそれを何気なく興味を持っている人々から隠すことができます、確かに。

于 2009-02-25T06:03:16.100 に答える
0

ほとんどの難読化ツールでは、難読化されないようにするメソッド/クラスを指定できます。たとえば SmartAssembly では、メソッドまたはクラスを属性でマークできますが、他の SmartAssembly では、UI でメソッドを選択してプロセスから除外できます。プロセスを非常にきめ細かく制御できる必要があるため、ケーキを手に入れて食べることができます.

ただし、リフレクションを使用している場合は問題が発生します。

于 2009-02-25T06:48:25.493 に答える
-2

Spices.NetObfuscatorについて良いコメントを聞いたことがあります。アルゴリズムに到達するために必要な時間を大幅に増やすことができるはずです。

于 2009-02-25T05:52:41.837 に答える