.NET Tools

.NET逆コンパイラとコードを難読化するDotfuscator

(株)ピーデー
川俣 晶
2003/09/23

Page1 Page2 Page3 Page4

クラス・ライブラリが何をしているか知りたいとき

 クラス・ライブラリは便利なものであり、プログラムを開発する際にはお世話になることが多い。.NET Frameworkに標準で含まれるものもあるし、ほかのベンダから提供されるものを使う場合もあるだろう。また、共通して使うクラスをクラス・ライブラリとして自分で開発することもあるだろう。

 しかし、クラス・ライブラリを使っていると、しばしばある種の問題に直面する。クラスの動作がはっきりしない、あるいは意図したとおりではない、という場合である。クラス・ライブラリのソース・コードがあればそれを見て確認できるが、それが提供されていない場合はリファレンス・マニュアルにより判断することになる。だが、これの出来が悪いと頭を悩ませることになる。マニュアルの記述があいまいで、どういう動作になるのが正しいか分からなかったり、マニュアルに記述された動作と実際の動作が違ったりする場合などは、本当に悩むことになる。

 ここでは1つの例として、以下のような宣言を伴うメソッドがクラス・ライブラリの中にあるとしよう。これは、与えられた2つのXY座標から、その2点間の距離を求めるメソッドとする。

public static int Distance( int x1, int y1, int x2, int y2 )

 このメソッドを使おうとしたとき、ふと次のような疑問を持ったとする。整数で示される2点間の距離は、必ずしも整数になるとは限らない。しかし、このメソッドは整数を返す。小数部が出たとき、それはどうなるのだろうか。切り捨てられるのだろうか。四捨五入なのだろうか。ソース・コードはないし、マニュアルにもそのことは書かれていない。そんな状況に陥ったとしよう。

 そのような場合に、.NET Frameworkが提供されるようになった当初からよく使われてきたテクニックは、.NET Framework付属のIL Disassembler(ildasm.exe)を使った逆アセンブルである。.NET Frameworkの実行ファイル(アセンブリ)はIL(Intermediate Language)と呼ばれる仮想的なマシン語によって記述されている。実行ファイルをILの命令コードによる記述へと復元するものが、Disassembler(逆アセンブラ)である。

 IL DisassemblerはGUIで操作できるので、使用はさほど難しくない。まずildasm.exeを探して実行し、[ファイル]メニューの[開く]で、目的のアセンブリ(具体的にはEXEファイルやDLLファイル)を開く。

IL Disassembler(ildasm.exe)の実行画面
アセンブリの内容がツリー構造で表示される。画面では、クラス「Calculate」の配下にコンストラクタ(.ctor)とDistanceメソッドが見える。

 次に、ツリー構造の中から目的のメソッドを探して、それをダブルクリックする。

ILで記述されているDistanceメソッドの内容
ツリーから該当するメソッドをダブルクリックするとこのウィンドウが表示される。しかし一般のプログラマーがこれを読んで理解するのは困難だ。

 これでプログラムが何をしているか、一目瞭然となった……といいたいところだが、恐らく読者のほとんどは「何が書いてあるのかさっぱり分からない」という感想を持ったと思う。確かに、表示形式は人間に見やすい形になったが、ILが読めなければ何の意味もない。低レベルなILの学習に迫られるプログラマーはほとんどいない。従って一般のプログラマーは読めないのが普通と思って間違いないだろう。

 では、こんな状況にはどう対処すればよいのだろうか。ILではなく、C#やVisual Basic .NET(以下VB.NET)など、一般のプログラマーが普段使っている言語に復元してくれるツールがあればベストである。そして、そういったツールが世の中にはいくつか存在する。

 

 INDEX
  [.NET Tools]
  .NET逆コンパイラとコードを難読化するDotfuscator
   1.クラス・ライブラリが何をしているか知りたいとき
     2.Reflector for .NETで逆コンパイルする
     3.コードの難読化を行うDotfuscator
     4.製品版Dotfuscatorによる文字列の暗号化
 
インデックス・ページヘ  「.NET Tools」

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH