真実の楽譜(フルスコア)

プログラム関係の忘備録になるはず

ILSpyを使ってC#プログラムをリバースエンジニアリング

C#の実行プログラムやDLLはそのままだと、
リバースエンジニアリングし放題ってことの確認。

シーザー暗号プログラムテスト

今回はテストとして、入力文字列をシーザー暗号で
暗号化と復号化を行うプログラムを作成しました。
その後リバースエンジニアリングで、
プログラムがどう見えるのか確認してみます。

シーザー暗号とは

シーザー暗号(シーザーあんごう、英語:Caesar cipher)は、単一換字式暗号の一種で、平文の各文字を辞書順に3文字だけシフトして暗号文をつくる暗号である。カエサル暗号とも呼ばれる。文字のシフト数は固定であるが、3に限る必要はなく、シフト数を3以外にした方式もシーザー暗号(あるいはシフト暗号)と呼ぶことがある。

参考:シーザー暗号 - Wikipedia

シーザー暗号プログラム

CaesarTest.cs
using System;

namespace Encryption
{
  static class CaesarTest
  {
    private static int rool = 3;

    private static string Encryption(string input)
    {
      string ret = "";
      foreach (char c in input)
      {
        ret += ((char)(c + rool)).ToString();
      }
      return ret;
    }

    private static string Decryption(string input)
    {
      string ret = "";
      foreach (char c in input)
      {
        ret += ((char)(c - rool)).ToString();
      }
      return ret;
    }

    public static void Main()
    {
      string input;
      string encrypted;
      string decrypted;

      //復号化
      Console.WriteLine("入力した文字を暗号化します。");
      input = Console.ReadLine();
      encrypted = Encryption(input);
      Console.WriteLine("暗号化データ:" + encrypted);

      //復号化
      Console.WriteLine("入力した文字を復号化します。");
      input = Console.ReadLine();
      decrypted = Decryption(input);
      Console.WriteLine("復号化データ:" + decrypted);

      Console.ReadLine();
    }
  }
}
実行例

入力した文字を暗号化します。
password
暗号化データ:ufxx|twi
入力した文字を復号化します。
ufxx|twi
復号化データ:password

Encryption(暗号化)で「password」が「sdvvzrug」に、
Decryption(復号化)で「sdvvzrug」が「password」として出力されました。

ILSpyでリバースエンジニアリング

ILSpyのダウンロード

http://ilspy.netから画面上部のDownload Binariesを選択し、
ILSpyをダウンロード。

2013/01/29時点 最新 Version 2.1.0.1603

ILSpyの実行

ダウンロードしたファイルを解凍し、
「ILSpy.exe」を起動。

メニューバーの[File]→[開く]から、
今回作成したプログラムの実行ファイルを選択。

左側のツリービューに追加された
「Encryption」を展開していくと…

f:id:s_sikisya:20140129201156p:plain

ソースの中身がほぼ丸見え!
このままではアルゴリズムがバレバレで暗号化の意味が無い。