.NETの逆コンパイル、簡単ですか?
-
06-07-2019 - |
質問
アプリケーションのライセンスキーに最適な暗号化を検討していましたが、誰かがアプリケーションを簡単に逆コンパイルして、ライセンスキーのテストをスキップできると言いました。
実際に話すことを誰かがどのように行うでしょうか?だから、彼らは私の.dllを持っているので、何らかの方法でそれを逆コンパイルし、関数呼び出しをコメントアウトしてライセンスをチェックし、それを再コンパイルする必要がありますか?逆コンパイラーは、コードがまだコンパイルされるように本当に優れていなければなりません!
他のヒント
ソースコードが通常コンパイルされていれば、.NETアセンブリを逆コンパイルするのは非常に簡単です。
.NET Reflector を使用できます。元々Lutz Roederによって開発され、現在はRedgate Softwareによってサポートされています。この回答の下部にスクリーンショットがあり、Reflectorが何をしているのかの印象を与えます。
名前空間とクラスを参照して、お気に入りの.NET言語のソースコードとメソッドを確認できます。 Denis Bauerの FileDisassembler は、あなた(または邪悪なハッカー)を許可します。あなたの場合)VSソリューションに変換し、プログラムに変更を加えます。
コード難読化ツールを使用して、コードを実際に読み取れないようにするなど、いくつかの対策があります。
このトピックに関するStackOverflowに関する興味深い質問が他にもいくつかあります。
- 商用の.Netアプリケーションを難読化しますか?
- どのようにデコンパイルしますか.NET EXEを読み取り可能なC#ソースコードに変換しますか?
- 最高の.NET難読化ツール/戦略
- ライセンスキーの.NET暗号化
Reflectorのスクリーンショット:
.NETは非常に簡単に逆コンパイルできます。難読化により、何が起こっているかを理解するのが少し難しくなりますが、コードを逆コンパイルすると、コードが永続的であるかどうかを判断できます。
オンラインで見つけた.NETコードを保護するためのアドバイスを次に示します。
http://blogs.msdn.com/ericgu /archive/2004/02/24/79236.aspx
ここで説明した手法はどれも100%効果的ではないことに注意してください。これは、クラッカーを何回フープさせるかという問題です。
.NETのコンパイルは非常に簡単です。このことを体感するには、。NET Reflector を試してみてください。
ほとんどの場合、単純なライセンスチェックを削除するためにコードを再コンパイルする必要はありません。単に MSIL がトリックを実行します。
このシナリオから身を守ると、収益が急速に減少します。コードに追加する追加のチェックをバイパスするのに、常に賢い人が常にいるでしょう。たとえば、コードにデジタル署名を追加しても、署名の実行を拒否すると一致しません(たとえば、ライセンスチェックを削除するなど、コードが改ざんされたことを示します)。
ゲームは、(ライセンスキーチェックに加えて)署名チェックを削除するようになります。そこで、別のチェックを追加します。このチェックはバイパスでき、無限に続きます。
コード難読化とコピー防止ツールは、このような問題からソフトウェアを守るのに役立ちます。あなたの側の追加の努力、およびあなたが正当な顧客を引き起こす迷惑がこれらのソリューションに買う価値があるかどうかを決めるのはあなた次第です...
これがあなたが防御しようとしているものである場合、あなたはそれをどのように攻撃するかについて読みたいかもしれません。
エクスプロイトソフトウェア by Greg Holland& Gary McGrawは優れた紹介です。
ライセンスキーテクノロジーに手を出さないことをお勧めします。何をするにしても、決心したユーザーによってハッキングされる可能性があり、正当なユーザーがアプリケーションを使用するのを妨げる問題を追加するという大きなリスクがあります。 Hasp Dongles で保護されたコードがクラックされることさえあります。ライセンスキーの暗号化とコードの難読化は、日和見主義者の攻撃を妨げるのに十分なはずです。それを超えるポイントはほとんどありません。
エリックシンクは、この点をカバーする良い記事を書きました" 4。 "透明性のテネシー" の正直な人々"
Reflectorがなくても、人々はこれを長年行ってきました。基本的には、デバッガーでアプリを監視します(WinDBGのようなものが行います)。次に、ライセンスチェックがいつ行われるかを確認します。戻り値を見てから、アプリケーションにパッチを適用して「すべて良い」に直接ジャンプします。チェック。
人々が上に投稿したすべてのものをお勧めします。あなたはそれが猫とネズミのゲームであることを認識しなければなりません、そしてあなたの投資に対するリターンがそれの価値があるだろうかどうか。システムのゲームをしようとしていないユーザーがいる場合は、簡単なことができます。クラッキングがramp延している場所がある場合は、さまざまな戦略を検討してそこから先に進む必要があります。
パッチを適用するためにアプリケーションを再コンパイルする必要はありません-多くのバイナリパッチツールが存在します。そして、十分なお金を稼ぐことができれば、最も熱心なクラッカーを止めることはできません。
"あまりにも"
あらゆる種類の「標準」/通常のライセンスチェックメカニズムは、自動削除ツールのターゲットです。そして、私が反省したいくつかの商用.NETアプリでは、これらの「あまりにも些細な」チェックは一般的です。
最善の策は、プログラムの一部をWebサービスに依存させて保護することです。これは実行速度の低下を避けるためにあまりにもおしゃべりなインターフェースであってはなりませんが、「クラッキングされたバージョン」でそれらのチャンクをローカルにダウンロードしてキャッシュできるため、あまりチャンキーであってはなりません。アプリが頻繁に変更されることに依存していない限り。
ネットワーク接続を回避したい場合(一部の使用者またはユーザーは、説明し価値を提供するものでない限り、アプリに応じて問題/疑問があると感じるかもしれません)、プログラムの一部をネイティブのDLLまたは2つに分割し、アプリのすべての部分でライセンスチェックが行われますが、ネイティブDLLの場合はそれほど明確ではないため、ほとんどの場合は十分です。