このたび、訳があってあるexe形式の実行モジュールから、デコード、逆コンパイルして元のソースコードを取得、解析できないかと試してみましたので、そのやり方をまとめました。
目次
逆コンパイル、デコンパイル、デコード(Decode) とは
逆コンパイルとは、コンパイルと逆のことをすることです。
コンパイラーはソースコードから実行形式(exe形式)のモジュールを作成するのに対して、逆コンパイラーは実行形式のモジュールからアセンブルコード、または運がよければソースコードを取得します。
さて、そんなこと出来るんでしょうか?
ざっと調べてみると、幾つかのデコンパイラが見つかりました。
Telerik
Telerik
は、.NETのデコンパイラーです。
RecStudio
RecStudio
は、WindowsとLinuxに対応している以外に、32bit、64bitに対応しています。
Boomerang
Boomerang
は、オープンソースで、SourceForgeで公開されています。
32bitのみ対応しています。
現状ではプロジェクトが活動してないように見えます。
C4Decompiler
C4Decompiler
http://www.c4decompiler.com
IA64、64bitのみ対応しています。
まだアルファバージョンのようですが、C言語に変換してくれるそうです。
(このサイトは終了したかもしれません。)
JetBrains dotPeek
JetBrains dotPeek
チェコ共和国の著名なツールメーカー、ジェットブレインズのフリーのデコンパイラーです。
PE Explorer
PE Explorer
カナダのHeaventools Softwareの製品のようです。
ちゃんと使えたのはJetBrains dotPeek
今回、ある実行モジュールを調べたくて上記のモジュールはすべてテストしてみました。
結果として使えたのは、JetBrains dotPeekだけでした。
JetBrains dotPeekのインストール方法
JetBrains dotPeekをインストールしてみます。
こちらから「Download」してインストーラーをダウンロードします。
インストーラーを実行します。
dotPeekをインストールします。
JetBrains dotPeekの実行方法
インストール完了後、JetBrains dotPeekを実行します。
[File]→[Explorer Folder]
で実行モジュールが存在するフォルダを開きます。
実行モジュールが存在するフォルダを開くと自動的にデコンパイルが行われます。
C#など、.NET上で動く実行モジュールは簡単にデコンパイル処理されるようです。
該当の実行モジュールはC#で作成されたソフトウェアのようで、ご覧の通り、ソースファイル名やクラス名、変数名は仮のIDがつけられますが、ソースコードが吐き出されました。
これはスゴイ!
いや、かなり危険かもしれません。
リバースエンジニアリングは違法か?
ところで、商用のソフトウェアを、デコンパイラーを使ってリバースエンジニアリング、解析することはおそらく違法だと思われます。
ソフトウェア(コンピュータプログラム)は著作権の保護を受けるものとされているからです(日本の著作権法では第10条1項九号)。
プログラムの著作物については著作権法第2条第1項第10号の2で「電子計算機を機能させて一の結果を得ることができるようにこれに対する指令を組み合わせたものとして表現したものをいう」と規定され、第10条第1項第9号で著作物として例示されています。
プログラムを著作権法で保護することについては、反対説などもありますが、日本においては、著作権法または特許法のいずれかの保護を受けられる可能性があります。
特許法上の保護を受けるには出願し、特許権を得る必要があるのに対し、著作権法は権利が自動的に発生するという点で両者には大きな相違点があると言えます。
また、プログラムの著作物は著作権法の保護を受けられるのであって、プログラム言語や規約、解法については著作権法の保護対象ではありません(第10条第3項)。
ソースコードを難読化しましょう
ソースコードの難読化について以下の通り説明しました。
難読化したソースを逆コンパイルできるか、JetBrains dotPeekで試してみました。
ご覧の通り、
ISSUE: unable to decompile the method.
となります。
難読化すごい。
まとめ
商用のソースコードの逆コンパイル、逆アセンブルは違法です。
ただし、何らかの理由でソースコードが紛失した自社のプロダクトから、JetBrains dotPeekを使ってある程度のソースを復旧することは技術的に出来そうです。
商用ソフトをリリースする際は難読化しましょう。
デコンパイルについては以下の本が詳しいです。
プログラミングの無料レッスン体験
約8,000名の受講生と80社以上の導入実績のあるプログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp
<Codecampの特徴>
1 現役エンジニアによる指導
2オンラインでのマンツーマン形式の講義
3大手企業にも導入されている実践的なカリキュラム
↓無料体験レッスン実施中です。
コメント
解読したプログラムを配布するのが問題であって、
解読するのが違法な説明になっていないように思えます。
著作権法では解読そのものは禁止されていませんし、
解読した著作物の個人利用は合法だと思うのですが。
かつて日本の最高裁が、「バグがあった場合に使用者があまりに不利益を被るから」という理由で、「作成者・販売者はリバースエンジニアリングを禁止する権利を持たない」という判決を出しています。ホントですよ。
うーん。
ソフトウェア作ってご飯食べていますが、理由になっていませんが解読は止めた方がよいと思います。
C#は中間コードを利用しているため、[C,C++]と比べて容易に解読できます。
JetBrains dotPeek だけちゃんと使えたというのはそういう理由だと予測します。
[…] exe からソースコードへ逆コンパイル (デコンパイル) 、解析、デコード(Deco… […]
リバースエンジニアリングの裁判
報道などによって「リバースエンジニアリングは、あかん」ってことが言われてますが、実際の争点になるのは開発元に損害を与えたかどうかです。解析内容を発表したり個人の利益のために利用したりしなけば個人で情報を得るのは問題ありません。本物のプロになっていく人たちは自分で生み出すよりも他人のやり方をたくさん知っている人だと思いますよ。