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

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

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

 

ILSpyをダウロードする

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

ILSpy ダウンロードサイト

ILSpy_binaries_4.0.1.4530.zipをダウロードします。
※2019/3/4現在のバージョンです。

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

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

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

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

実際のソース

using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        //パスワード
        string password = "abcABC123456789";

        static void Main(string[] args)
        {
            CountNum();
        }

        //カウント
        private static void CountNum()
        {
            string test = "aa";
            for (int i = 0; i < 100; i++)
            {
                for (int j = 0; j < 50; j++)
                {
                    test = "test" + i.ToString() + j.ToString();
                }
            }
        }
    }
}

ILSpy

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

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

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

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

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

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

その時にILSpyにはかなりお世話になりました。実際にILSpyで逆コンパイルし、ソースコードを見てみると、選択肢がプログラムの中でゴリゴリハードコーディングされていたり、さらにはその選択肢の内容に依存してロジックで分岐していたり、設計書が無いとお手上げなものでした。

コメント

  1. TACO より:

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

    https://github.com/icsharpcode/ILSpy

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

    • dotsharp より:

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

タイトルとURLをコピーしました