- 締切済み
DLLは解読可能ですか
C言語初心者です。 目標としてVisualC++でDLLを作ろうと思っています。 DLLはコンパイルするとできると思うのですが、コンパイル前に記述しているソースは簡単にわかってしまうものでしょうか。それとも解読することは可能だけど素人ではかなり苦労するものでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ttkai00
- ベストアンサー率58% (18/31)
Win32 の DLL は解読が難しいですが、.NET のマネージドDLLとなると話がまた変わってきます。 2002 以降のバージョンの Visual C++ では従来の Win32 の DLL に加えて、.NET Framework 上で動作するマネージドDLLというものを作ることができます。この場合は dll ファイルは(マシン語レベルまでコンパイルされたものではなく) MSIL という中間言語で書かれたものになります。 MSIL 自体がマシン語よりもはるかに解読しやすい上、Reflector のようなツールを使って、ソースをかなり忠実に再現することができます。コンパイラにより最適化された部分やコメントはもちろん見えませんが、それでもロジックは丸見えになると思った方がよいです。 http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/dotfuscator_02.html 上記ページで紹介されている難読化ツールのようなものを使って対処することになると思います。 もちろん、2002以降のバージョンでも、Win32 の DLL を作ることは可能なので、どうしても解読されたくない場合は、そちらを使うという選択肢もあるかと思います。
リバースエンジニアリングの分野(別にプロテクト外しとかそういうアンダーグラウンドな意味ではなく)では、実行コードを C 風な擬似コードに戻すことが出来るソフトなども学術的には開発されています。しかし、最新のコンパイラによって最適化された複雑なコードを満足のいくように元に戻せるものはまだないようです。 ソースレベルではなくアセンブリ言語レベルへの復元ならば、C/C++ ランタイムライブラリや Windows API コールなどを認識して可読性の高い逆アセンブルリストを生成できる IDA という製品があります。 ちなみに、DLL 全体を解読するのは大変ですが、apricot111 さんが保護したいと考えているコードがごく一部であるなら、その内容によっては、アセンブリ言語を知っているそこそこの技術者なら該当部分をわりと簡単に解読できる可能性はあります。 いずれにしても、「素人」というのがプログラミングの素人を意味するのであれば、実行コードの解読は事実上無理と言っても良いでしょう。
- notnot
- ベストアンサー率47% (4900/10358)
変数名などの情報は残らないので、ソースそのものはわかりませんが、解読は可能なので、ロジックはわかります。ただ、復元はかなり大変で、しかもそこから意味をくみ取るのも大変です。その手間を掛けるだけの内容でない限り、誰も読もうとはしないでしょう。 1MBのDLLがあるとして、100万円くれると言われてもしません。1億ならします。
お礼
そのくらい手間がかかるものなのですね^^; あるCベースの言語があり、それは解読用のソフトがあって解読可能なんです。 ただしDLLも使えるのでコアロジックをDLLで書けば問題ないかなと考えました。 的確な回答ありがとうございます。
お礼
初心者の私にとってはとても難易度が高いお話でした^^; ご回答ありがとうございます。