実行モジュール(exe)からソースコードへのデコード(Decode)、逆コンパイル

このたび、訳があってあるexe形式の実行モジュールからソースコードを取得できないかと試してみましたので、その方法をまとめました。

スポンサーリンク

デコード(Decode)、逆コンパイル

逆コンパイルとは、コンパイルと逆のことをすることです。

コンパイラーはソースコードから実行形式(exe形式)のモジュールを作成するのに対して、逆コンパイラーは実行形式のモジュールからアセンブルコード、または運がよければソースコードを取得します。

さて、そんなこと出来るんでしょうか?

ざっと調べてみると、幾つかのデコンパイラが見つかりました。

Telerik

Telerik (http://www.telerik.com/products/decompiler.aspx)は、.NETのデコンパイラーです。

RecStudio

RecStudio (http://www.backerstreet.com/rec/recdload.htm)は、WindowsとLinuxに対応している以外に、32bit、64bitに対応しています。

Boomerang

Boomerang (http://boomerang.sourceforge.net/)は、オープンソースで、SourceForgeで公開されています。

32bitのみ対応しています。

現状ではプロジェクトが活動してないように見えます。

C4Decompiler

C4Decompiler (http://www.c4decompiler.com/)

IA64、64bitのみ対応しています。

まだアルファバージョンのようですが、C言語に変換してくれるそうです。

JetBrains dotPeek

JetBrains dotPeek (https://www.jetbrains.com/decompiler/)

チェコ共和国の著名なツールメーカー、ジェットブレインズのフリーのデコンパイラーです。

PE Explorer

PE Explorer (http://www.heaventools.com/overview.htm)

カナダのHeaventools Softwareの製品のようです。

ちゃんと使えたのはJetBrains dotPeek

今回、ある実行モジュールを調べたくて上記のモジュールはすべてテストしてみました。

結果として使えたのは、JetBrains dotPeekだけでした。

JetBrains dotPeekのインストール方法

https://www.jetbrains.com/decompiler/

WS000057

こちらから「Download」してインストーラーをダウンロードします。

インストーラーを実行します。

WS000061

dotPeekをインストールします。

JetBrains dotPeekの実行方法

インストール完了後、JetBrains dotPeekを実行します。

WS000065

[File]→[Explorer Folder]で実行モジュールが存在するフォルダを開きます。

WS000068

実行モジュールが存在するフォルダを開くと自動的にデコンパイルが行われます。

C#など、.NET上で動く実行モジュールは簡単にデコンパイル処理されるようです。

image

該当の実行モジュールはC#で作成されたソフトウェアのようで、ご覧の通り、ソースファイル名やクラス名、変数名は仮のIDがつけられますが、ソースコードが吐き出されました。

これはスゴイ!

いや、かなり危険かもしれません。

リバースエンジニアリングは違法か?

商用のソフトウェアを、デコンパイラーを使ってリバースエンジニアリング、解析することはおそらく違法だと思われます。

ソフトウェア(コンピュータプログラム)は著作権の保護を受けるものとされているからです(日本の著作権法では第10条1項九号)。

プログラムの著作物については著作権法第2条第1項第10号の2で「電子計算機を機能させて一の結果を得ることができるようにこれに対する指令を組み合わせたものとして表現したものをいう」と規定され、第10条第1項第9号で著作物として例示されています。

プログラムを著作権法で保護することについては、反対説などもありますが、日本においては、著作権法または特許法のいずれかの保護を受けられる可能性があります。

特許法上の保護を受けるには出願し、特許権を得る必要があるのに対し、著作権法は権利が自動的に発生するという点で両者には大きな相違点があると言えます。

また、プログラムの著作物は著作権法の保護を受けられるのであって、プログラム言語や規約、解法については著作権法の保護対象ではありません(第10条第3項)。

ソースコードを難読化しましょう

ソースコードの難読化について以下の通り説明しました。

C#の実行プログラムの難読化(Obfuscation)
難読化コード(Obfuscated code)とは、人間が理解しにくいソースコードやマシンコードを指す用語です。 ソースコードを理解し...

難読化したソースを逆コンパイルできるか、JetBrains dotPeekで試してみました。

ご覧の通り、

ISSUE: unable to decompile the method.

となります。

image

難読化すごい。

まとめ

商用のソースコードの逆アセンブルは違法です。

ただし、何らかの理由でソースコードが紛失した自社のプロダクトから、JetBrains dotPeekを使ってある程度のソースを復旧することは技術的に出来そうです。

商用ソフトをリリースする際は難読化しましょう。

デコンパイルについては以下の本が詳しいです。

最後まで読んでいただきありがとうござました。
この記事が気に入っていただけたらシェアしてくれると嬉しいです。

スポンサーリンク
スポンサーリンク
Translate »