ILSpyでC#のコードを逆コンパイルする

.NETアプリケーションはリバースエンジニアリングが容易であると言われています。商用で売っているソフトはコードの中身がその会社が持つ特殊な技術であれば著作権が侵害される恐れがあります。
また、商用にかかわらず、アプリケーション内に社内サーバーに入るユーザID、パスワードなどが記載されていればセキュリティ的にまずいということになります。

完全にリバースエンジニアリングを防ぐことはできないと言われていますが、難読化ツールを使用してある程度は防ぐことができます。
まず、どれくらい簡単にリバースエンジニアリングができるかということで、.NETアプリケーションのリバースエンジニアリングツール ILSpyで試してみます。

 

ILSpyをダウロードする

GitHubよりILSpyのバイナリーファイルをダウロードします。

ILSpy ダウンロードサイト

ILSpy_binaries_4.0.0.4319-beta2.zipをダウロードします。
※2018/9/3現在のバージョンです。


ZIPファイルを任意の場所に解凍します。インストールは不要なので、ILSpy.exeをダブルクリックで直接起動します。


デフォルトでいろいろ読み込まれているので、左の白い枠で「Ctrl」+「A」で全て選択し、右クリックし、「Remove」をクリックします。


左の白い枠にEXEファイルをドラッグ&ドロップします。またはフォルダアイコンをクリックでEXEファイルを選択します。ここではサンプルで「ConsoleApplication1.exe」ファイルをドラッグ&ドロップします。

このサンプルではProgram.csにソースを書いているので「Program」を選択します。デフォルトでは「+」ボタンが閉じているので、右の黄色枠の中で右クリックし、「Toggle All Folding」をクリックし、全て展開します。

実際のソース

ILSpy

ほぼそのままです。しいてあげるならコメントは読み込まれていないくらいでしょうか。

ILSpyは悪用しなければ助かる場面もあります。社内で使用されているソフトが昔に書かれたもので、当時の担当者も退職して連絡取れなく、オリジナルのソースコードがどこかにいってしまった、などの場合は中が見れると助かります。

※2018/9/3 これまではsourceforgeからダウンロードしていて2014年6月29日のVer2.2が最終更新バージョンだったので、もう開発はやっていないんだろうかと思っていたら、コメントでGitHubで開発続けてる、と教えていただきました!ありがたや~。(TACOさん、ありがとうございました!)ななんと、現在4.0まで出ていました。
ということで、ダウンロード手順もGitHub版に更新しました。

最近はめっきり使っていなかったのですが、そういえば以前本当に困って、ILSpyに助けられたのをしみじみ思いだしてしまいました。

何年か前、クライアントから、昔に作られたアプリケーションを作り直したいが、ソースコードが無いけど設計書はあるからと。とりあえずあるもの一式もらったのですが、ソースコードは本当に無く、設計書やらテーブル定義書はなんとなーくあるのですが、開発後、追加変更点をちゃんと書き直してないと思われるような未完成なドキュメントばかり。

アプリケーション上の、この項目や内容は一体どこぞから??というデータ元もロジックも全く分からないものが多々あり。

その時にILSpyにはかなりお世話になりました。実際にソースコードを見てみると、他の項目に依存してロジックで分岐して計算式が違っていたり、10個以上ある選択肢が中でゴリゴリハードコーディングされてたり。そりゃ、テーブル探してもないよね!て感じです。

コメント

  1. TACO より:

    はじめまして。
    ILSpy、自分も重宝しておりますが、2.3からsorceforgeの開発は終了しており、
    GitHubにて開発されています。

    https://github.com/icsharpcode/ILSpy

    現在は4.0の開発を進めているようです。
    ご参考までに。

    • dotsharp より:

      なんと、GitHubのほうでアップデートされていたんですね、
      お知らせいただき、ありがとうございます!