17


7

これは奇妙な立場にあるようですが、とにかく質問をさせてください。

私は今作っているWebサイトのコンテンツをASP.Netで表示するのに必要な、魔法のようなmumbo-jumboを実行するDLLをいくつか作成しました。 私はこれを手伝ってくれる開発者の小さなチームを持っています、しかし彼らが私の会社を出るとき彼らが私のコード(DLL)を盗んでプロジェクトでそれを使うのが怖いです。 ソフトウェアでは、彼らが私のDLLを使ってコンテンツを生成していることを証明できるかもしれませんが、DLLが一般に公開されていないサーバーではできません。

だから私は一人でこれに取り組んできたチームを持っているにもかかわらず。

私の質問は _私のコーダーがそれを盗むことができないように、または盗まれるとそれが使用不可能になるように私が私のDLLを保護することができる(binフォルダに入る)あなたが使うことができる方法を考えることができる。

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

8 Answer


8


あなたは、その環境が家のように感じられないなら、あなたはdllにその環境をチェックさせて、そしてうまく働かないかもしれません(私はあなたがそれを壊すよりも間違った結果を与えるようにすることを勧めます)。 また、保護を解除するための努力を妨げるためにコードを難読化する必要があります。

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


4


これはあなたの状況にふさわしくないかもしれませんが、あなたはそれらを計算を実行しない代わりにあなたのDLLを呼び出すプロキシDLLを提供することができます。

その後、あなただけのアクセス権を持っている別のサーバーにあなたのDLLを保存してください。そしてプロキシDLLはある種のリモーティングプロトコルを通してそれを呼び出します。


2


それは奇妙な立場です…​ お悔やみ

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

他の人が採用しているもう1つのアプローチは、本当に機密性の高いコードをCで記述し、それをアンマネージ.dllにコンパイルして、interopを使用して.netから呼び出すことです。 CバイトコードはILよりも読みにくく、これはリバースエンジニアリングを容易にするための障害となります。

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

Webサーバーのbinフォルダーに置いたDLLを盗むことを単に心配しているのであれば、それを単に\ binのサブフォルダーに公開し、windowsパーミッションを使用してフォルダーをロックダウンします。それを調べて、それを検証するようにweb.configを変更します。


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


1


関連:https://stackoverflow.com/questions/181991/suggest-a-good-obfuscator-for-net-closed。 あなたは自分のコードを選択的に難読化したいと思うかもしれません(公開APIをそのままにしておく)


1


あなたはそれが実行されることを確認するために少し手を振ることをするために信頼できる第三者(おそらくあなたが制御することになるサーバであろう)にdllの話をすることができます。

の線に沿って何か

A. こんにちは、私は[hostname-> env varsから取られた]に座っています、私は私の仕事をすることができますか? B. (登録されたホストの記録をチェックします)はい、できます。 A. ありがとう。 (最善を尽くします)

編集:粗い、他の誰かがあなたがこれをやっていることを知っていれば、彼らは自分の好きなマシンにリモートアドレスをバインドすることができる…​ その時点では、元々の問題は実際には修正されていません。


1


私はインドの法制度についてはあまり知りませんが、何らかの形でNDAに署名するようにしてもらうようにしてください。

また、可能であれば、WindowsサービスまたはアウトプロセスのCOMサーバーを通じてDLLを公開するだけで、DLLから直接アクセスできない場所でDLLを分離することができます。

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

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


1


私はあなたのdllの機能を公開する安全なサーバー上にWebサービスを作成します。 開発が完了したら、Webサービスを呼び出すコードの部分を直接dllを呼び出すように変更できます。


1


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

あなたが探検することができるもう一つのオプションはあなたのDLLを "ドングル"保護することです。 私の問題の解決策を研究している間、私はあなたの質問につまずいた。 私は同じ場所にいますが、より脆弱なPHPベースのソリューションを使用しているので、このオプションを検討しています。

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

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

これが役に立つことを願っています。