Delphi2005付属のDemeanorとフリーなNanDoKuをさわってみる

今日のDelphiの講義は、難読化です
みなさん用意はいいですか
聴講料は無料なので安心してください(^▽^;

【はじめに】

.netで作成した、exeファイルは、簡単に類似ソースコードに戻すことができるそうです。
実際、.net自体に低級言語に戻すildasmツールが付属しています
この非常に狭い地球には、任意の.net高等言語に戻すフリーツールも出回っているようです
これは、普通の開発者にとって脅威です

このことは利用するユーザーには、全く利もなく害もないのですが、
開発側にしてみれば多言語間で簡単に呼び出せるようにした弊害なのでしょう。

そこで、そのようなツールで、ソースコードに戻しても
変数名やクラス名をグチャグチャに変更して

  • 「人が見ても理解し難いソース」
  • 「そのまま使うとコンパイラエラーを起こし、手を加えないと使えないものにしてしまう」
  • 「コードを流用する気力を根こそぎ奪う」
  • 「動作原理を理解し難くして隠蔽する」
  • 「名前短縮によりexeサイズの縮小を期待する」

などいろいろな目的の元で変換を行うのが .netの難読化ツールです

さいわいDelphi2005に付属しているのでインストールしておきましょう。
(冊子 Quick Start P.5)

【Demeanorの準備】

まず、パスが遠いのでユーザーの環境変数に
フルパスを登録すると便利です

PATHにパスを登録してもいいのですが、あまり長くなるのが好きではないので
ここでは、個別の環境変数を作成することにします。

環境変数 Demeanor を作成し、そこにフルパス
"C:\Program Files\Wise Owl, Inc\Demeanor for .NET, Personal Edition\Demeanor"
を登録しました

【Demeanorの使い方】

%Demeanor% dotnet実行ファイル名
PATHが取っている場合は
Demeanor dotnet実行ファイル名
で 難読化済みexe が作成できます

Demeanorフォルダに変更されたexeができます
出力先は、/out:パス
で変更できます

変換方法を変更するには

既定値 /names:alpha
  /names:numeric
  /names:Unicode

その他詳しくは、DOSプロンプトを起動して、
Demeanor /?
で確認しましょう

【ildasm】
ildasm
"C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\ildasm.exe"
のショートカットを作って置くと便利です

ildasmにできたファイルを投げ入れると
どの程度exeが書き換えられたか閲覧できます

DelphiでC#のexeを作ったものはかなり変更されたかなという感じを受けます
delphi.netのexeには、あまり変更が加わっていない気がします。


次に
NanDoKuというフリーソフトを使ってみましょう


【NanDoKu】

ということで
うーん、こ、これは・・・
delphi.netのexeにそのまま使うと飛びます

■まず、設定を開き コンパイラのildasm.exeを正しいパスに変更しましょう

■Nandokuデフォルトオプションだと
   delphi.netのexeは、飛びます
 オプションを変更して飛ばないようにします

変換項目の設定と作ったexeの動作
名前空間
× クラス名
×× メソッド
プロパティ
× クラス変数とイベント
メソッド引数
ジェネリックの型パラメータ
Nandokuで作ったexeを実行した時
○は、動作
×は、実行時エラー発生
××は、exe作成できず

この表は、NanDoKu 3.1.0

空の Delphi.net TFormアプリケーション
を入力としました

変換項目の設定
メソッド
にチェックがあると
---------------------------
難読化失敗
---------------------------
難読化に失敗しました。
原因不明のエラーが発生しました
---------------------------

■exe→Demeanor→Nandoku
 とするとNandokuで飛びます

●exe→Nandoku→Demeanor
 という手順だと飛ばないようです
  (この処理はバッチ処理すると楽です)
 ildasmで確認をすると
 適度に難読化がかかった感じでいい感じです。


Delphi2005でVB,C#のコードから作成したexeファイルの場合は、
メソッド名も変更されるので
難読化効果がさらにあるような気がします。

Delphi2005 C#で作った単純なアプリケーションをDemeanorで変換し、ildasm で表示した様子。


執筆:2008.1.31 おかめりん