17

変な立場に思えますが、質問させてください。

ASP.Net で現在作成している Web サイトのコンテンツを表示するために必要な魔法の巨大ジャンボを実行する DLL をいくつか作成しました。私はこれを手伝ってくれる小さな開発者チームを持っていますが、彼らが私のコード (DLL) を盗み、会社を辞めたときにプロジェクトで使用するのではないかと心配しています。ソフトウェアでは、彼らが私の DLL を使用してコンテンツを生成していることをおそらく証明できますが、DLL が公開されていないサーバーでは証明できません。

そのため、チームを持っているにもかかわらず、私はこれにすべて一人で取り組んできました。

私の質問はです。私のDLL(binフォルダーに入る)を保護して、コーダーが盗んだり、盗まれた場合に使用できなくなったりするのを防ぐ方法はありますか?

bin フォルダーに入るものは何でも保護したいだけです。

4

8 に答える 8

8

環境が自宅のように感じられない場合は、dllに環境をチェックさせ、動作に失敗する可能性があります(壊れるのではなく、間違った結果を出すようにすることをお勧めします)。また、保護を削除する作業を妨げるために、コードを難読化する必要があります。

編集:環境変数、レジストリキー、パフォーマンスカウンターの存在、machine.configのあいまいな設定などを使用して、それを本物の設定のように見せてから、わかりにくくして強い名前で署名することができます。

于 2009-07-18T06:27:01.890 に答える
4

これは状況に適さない場合がありますが、計算を実行せずにDLLを呼び出すプロキシDLLを提供することができます。

次に、自分だけがアクセスできる別のサーバーにDLLを保持し、プロキシDLLが何らかのリモートプロトコルを介してDLLを呼び出します。

于 2009-07-18T06:20:37.287 に答える
2

それは奇妙な立場です...お悔やみ申し上げます。

.Netレベルでできる最善のことは、コードをビルドするときにコードを難読化することです。アセンブリに強く署名すると、改ざんが行われているかどうかもわかります。

一部の人々が採用している別のアプローチは、C ++で非常に機密性の高いコードを記述し、それをアンマネージ.dllにコンパイルし、相互運用機能を使用して.netから呼び出すことです。C ++バイトコードはILよりもはるかに読みにくく、これにより、リバースエンジニアリングを容易にするための障壁が大幅に増えます。

編集:OPからのコメントに基づいて、ここに更新された回答があります。

Webサーバーのbinフォルダーに配置したDLLを盗むことを単に心配している場合は、\ binのサブフォルダーに公開し、Windowsのアクセス許可を使用してフォルダーをロックします。これにより、侵入することができなくなります。それをプローブするようにweb.configを変更します。

<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin;bin\mysubfolder;" />
   </assemblyBinding>
</runtime>

必ず.dllに厳密な名前を付け、秘密鍵ファイルを安全な場所に保管してください。これにより、.dllが一意に識別可能になり、改ざんが検出された場合に検出できます。

于 2009-07-18T06:05:36.567 に答える
1

私は、開発者が簡単にクラックされてリバースエンジニアリングされる可能性のある本番DLLにアクセスできるようにするのではなく、プロキシDLLを配布するというLachlanGの戦略に同意します。

探索できるもう1つのオプションは、DLLを「ドングル」で保護することです。私の問題の解決策を研究しているときに、あなたの質問に出くわしました。私は同じ場所にいますが、さらに脆弱なPHPベースのソリューションを使用しているため、このオプションを検討しています。

Keylokは、私が強く検討している手頃な価格で競争力のある製品を提供していることがわかりました。コードがバイナリでも難読化されていないPHPでのAPI呼び出しを保護する方法はまだわかっていません。DLLに問題があるとは思いません。

私は、SAP統合ソフトウェアをこの種のドングルで保護している会社のプロジェクトマネージャーでした。最終的な製品は、コード、インストールマニュアル、ドングル、および20万ドルのライセンス請求書が収録されたCDでした。スウィート!!! 10年前のことですが、著作権侵害や著作権侵害の話はまだ聞いたことがありません。

これがお役に立てば幸いです。

于 2009-12-30T07:01:48.080 に答える
1

関連:https ://stackoverflow.com/questions/181991/suggest-a-good-obfuscator-for-net-closed 。
コードを選択的に難読化することをお勧めします(パブリックAPIはそのままにします)

于 2009-07-18T06:00:00.773 に答える
1

dllを信頼できるサードパーティ(おそらくあなたが制御できるサーバー)と通信させて、実行することになっていることを確認するために少し手を振ることができます。

の線に沿った何か

A. Hey, I'm sitting at [hostname->taken from env vars], can i do my job?
B. (checks records of registered hosts)  Yes you can.
A. Thanks.  (does what it does best)

編集:大雑把に言って、誰かがあなたがこれをしていることを知っているなら、彼らはリモートアドレスを彼らが選んだマシンにバインドするかもしれません...その時点であなたはあなたの元の問題を本当に修正していません。

于 2009-07-18T06:27:21.593 に答える
1

私はインドの法制度についてあまり知りませんが、彼らになんらかの形式の NDA に署名してもらい、それを真剣に受け止め、違反した場合は訴えることを明確にしてください。

また、可能であれば、Windows サービスまたはアウトプロセス COM サーバーを介してのみ DLL を公開し、直接アクセスできない場所に DLL を分離できるようにします。

彼らがあなたの DLL に物理的にアクセスでき、彼らが中途半端に有能な開発者である場合、実際に彼らが DLL を使用するのを防ぐために技術的な観点から実際にできることはあまりないでしょう。少し遅くすることはできますが、バイナリにアクセスできれば、必然的に彼らが望むものを手に入れることができます。バイナリへのアクセスを拒否することが、それを防ぐ唯一の効果的な方法です。

ただし、DLL が何らかの方法でユーザー入力を処理し、結果として表示するコンテンツを提供する場合は、あいまいではあるが特定の入力に基づいて何らかの種類の明確な署名を出力する、ある種の「イースターエッグ」を入れることができます。法制度によっては、捜査を開始し、捜査官があなたの技術を盗んでいないことを証明するために捜査官にアクセスを許可するのに十分な場合があります. 彼らはそれがそこにあることを知らない限り、おそらくあなたがそれを呼び出す機会を得る前にそれを探して無効にすることはありません.

于 2009-07-18T06:59:20.967 に答える
1

dll の機能を公開するセキュリティで保護されたサーバー上に Web サービスを作成します。開発が完了したら、Web サービスを呼び出すコードの部分を変更して、dll を直接呼び出すことができます。

于 2009-07-20T02:50:29.937 に答える