.NETアプリの逆コンパイルと難読化
フリーウェア・シェアウェアを公開しているが、それらは.NETではないので直接は関連しない。
.NETアプリは開発してきたが、委託開発であり、ソースも含め納品しており、それを先方がどう使おうが勝手である。
実は.NETには弱点がある。
.NETアプリは通常の機械語で動作するのではない。
一種のインタプリタである。
この点ではコンパイル済みBasicに近い。
コンピュータは機械語でしか動作しない。
CPUに伝えられる命令は機械語のみなのだ。
インタプリタ言語は、命令を「解釈」し、それに対する機械語ルーチンを実行させる。
ネーティブコンパイラは、ソースプログラムを「翻訳」し、それに対する機械語を出力し、実行時はその機械語を直接実行するものだ。
これに対し、.NETにおけるコンパイルはMSIL中間コードへのコンパイルとなる。
この中間コードが実行ファイルであり、配布されるexeファイルなのだ。
利点として、VB.NETもC#.NETも同じ中間コードとなり、実行環境はひとつでよいがある。
ところが、これが問題で。
何を考えてか、クラス名、関数名、変数名などまで全部中間コードを含んでいて、簡単に逆コンパイルが可能なのである。
つまりリバースエンジニアリングが好きなだけできる。
自社での過去プログラムに対するリバースエンジニアリングなら非常に有効だが、他者のプログラムを逆コンパイルすることはソースコードの盗用にもなりかねない。
これは著作権の侵害となり、10年以下の懲役もしくは1000万円以下の罰金と、かなり厳しい罰が科せられる。
Reflectorというツールがあり、無償バージョンと有償のProバージョがある。
以下は開発しているRed Gateのページで、ダウンロードには氏名とメールアドレスの入力が必須となっている。
逆コンパイルによって他者が製造したプログラムを見ることは合法とされる。
だが、それを自社プログラムの参考にするだけでも著作権の侵害にあたる可能性がある。
使用には注意していただきたい。
Reflectorダウンロードページ
それでは困るのではないかという人もいるだろう。
しかし、そういう仕様なのだから、もうどうしようもないのである。
やれることはひとつだけ。
見づらくしてやろうということである。
難読化ツールというものがある。
多くは有償であり、無償のものでは、商用不可などというものもある。
NanDokuというフリーツールは、商用(シェアウェア)でも利用化というツールだ。
NanDokuの開発ブログを見たら、うちの美味食倶楽部と同じデザインだった。
う~ん。
まあ、うちはちょっとは手を加えているのだが、そこのは作成したまったくそのままにしてあった。
例えば、カレンダーはそのままだとイマイチなので修正したし、フッターを変えたりしている。
以下は、うちのじゃない方のページ
ttp://uwa.potetihouse.com/blog/
いずれにせよ、.NETは危ない。
解析されると、キージェネレーションなども簡単に作られてしまうだろう。
困った仕様である。