「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
逆コンパイル・難読化などの質問が稀にあるため。
詳細 †
難読化ソリューションは、
出てきて、必要になってきたんじゃないでしょうか?
逆コンパイラ †
C言語 †
C言語のプリプロセッサに通した後のコードは≒リバースできないもよう。
- 奇跡的に C/C++ の逆コンパイラを手に入れられたとしても
それが吐き出すソースを理解できる可能性は全くない。
- C++ の逆コンパイラは C よりもはるかに困難 (事実上不可能)
※ 機械語自体を読む人がいるかも知れないので、保護したいレベルによるかもしれませんが。
スクリプト言語 †
- スクリプト・ファイルがそのまま動く。
- インタプリタでソースコードを、機械語プログラムに解釈・変換しながら処理・実行する。
中間コードのある言語 †
以下の理由で、逆コンパイルが容易であるケースが多いらしい。
- 中間コードはネイティブコードに比べて命令の種類や複雑さが少ない。
- 逆コンパイルされ易い言語
- ガーベージ・コレクションやリフレクション機能のある言語
- その他、
- 共用体が無い
- ポインタ演算・キャストの制限
- classに定義情報が含まれる。
- goto 文を禁止している
- , etc.
- Java:
JAD(Jad Decompiler)
- IL Disassembler(ildasm.exe)
Visual Studioに付属
- .NET Reflector
昔は無償で一択だったが、2011年の3月に有償化された。
- ILSpy
MITのOSSでスタンドアロンで利用可能。
- Telerik JustDecompile?
Telerik社製
難読化 †
- 難読化は単なる時間稼ぎに過ぎず、プログラムの逆コンパイルを不可能とするものではない。
- 商用の難読化ソリューションはソースコードの難読化やJavaや.NETなどのプラットフォーム中立な
バイトコードの変換が大部分を占めるが、中にはコンパイルされたバイナリに直接作用するものも存在する。
C言語 †
そもそも、逆コンパイルができないので難読化も不要。
スクリプト言語 †
そもそも、コンパイルがないので難読化もできない。
中間コードのある言語 †
- 逆コンパイルが容易なため、難読化が必要になるケースもある。
- Java:
- ProGuard?
- JODE
- JavaGuard?
- RetroGuard?
- jarg
- yGuard
- .NET:
- ConfuserEx?(無料)
- NanDoKu?(無料)
- Phoenix Protector(無料)
- Dotfuscator(有料 – 簡易版有り)
- Eazfuscator.NET(有料 – 試用版有り)
- babelfor.net(Babel)(有料 – 試用版有り)
参考 †
逆コンパイラ †
難読化 †
Tags: :プログラミング, :その他、開発の色々, :.NET開発