ILSpyを使ってC#プログラムをリバースエンジニアリング
C#の実行プログラムやDLLはそのままだと、
リバースエンジニアリングし放題ってことの確認。
シーザー暗号プログラムテスト
今回はテストとして、入力文字列をシーザー暗号で
暗号化と復号化を行うプログラムを作成しました。
その後リバースエンジニアリングで、
プログラムがどう見えるのか確認してみます。
シーザー暗号とは
シーザー暗号(シーザーあんごう、英語:Caesar cipher)は、単一換字式暗号の一種で、平文の各文字を辞書順に3文字だけシフトして暗号文をつくる暗号である。カエサル暗号とも呼ばれる。文字のシフト数は固定であるが、3に限る必要はなく、シフト数を3以外にした方式もシーザー暗号(あるいはシフト暗号)と呼ぶことがある。
シーザー暗号プログラム
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」を展開していくと…
ソースの中身がほぼ丸見え!
このままではアルゴリズムがバレバレで暗号化の意味が無い。