2008年10月21日火曜日

Crack.NET

昨日の記事に続いて、便利なデバッグツールをもう一つ。


作者の Josh Smith さんは前回のMoleの作者の一人でもあります。

名前的にもヤバそうですが。コイツは強力。
Moleとは異なりスタンドアロンなツールなので、Visual Studioやデバッグ実行の必要はなし。
外部から起動中の.NetプロセスにアタッチできるのはSnoopなんかに近いですが、
Crack.NETではそのプロセス上でなんと任意のコードを実行できてしまいます。
ちょっと試してみましょう。

まずはインストールの方法から。

上記リンクからダウンロードできます。
サイトの制限上、拡張子.DOCになってるので、これを.ZIPに変更して解凍。
Crack.NETはIronPythonライブラリを使用するので、IronPythonをインストールしていなければ、解凍して出てくるIronPython.dll と IronMath.dll を GAC にコピーします。あとは、EXEを実行するだけ。
 

Crack.NETはWinForms と WPF に対してクラックできますが、今回はWinFormsを外部から弄ってみましょう。
 
こんな感じのGridViewが貼ってるだけの単純なWinFormを実行して、Crack.Netからプロセスを選択。
 
 
 
 
 
 
 

 
 
 
 
 
 
 
これがメイン画面。
MemoryExplorerから各クラスのスタティックメンバを参照できます。
起動中のFormを選択するために、
System.Windows.Forms.Application.OpenForms[0]と順に辿って、Scriptoriumをクリック。
 
 
 
 
これがPythonスクリプトの実行画面。

INPUT=System.WindowsFormsApplication1.Form1 (object) とあります。

これはさっきのMemoryExplorerで選択しているオブジェクトに対して、INPUT変数を通してアクセスできるってこと。"Insert Starter Script"を押すと、参照の追加や必要なimportなんかのスクリプトを自動的に用意してくれてとっても便利です。

では、Pythonコードでグリッドに1行追加してみましょう。
clr.AddReferenceByPartialName("WindowsFormsApplication1")
from WindowsFormsApplication1 import *
form = INPUT
horse = Horse()
horse.Name='ポルトフィーノ'
horse.Father='クロフネ'
form.Data.Add(horse)
grid = form.Controls['dataGridView1']
grid.DataSource = form.Data
grid.Refresh()


スタータースクリプトにこんな感じのを追加して、Execute Script(F5)。




















簡単にクラックできちゃいました!!

Pythonを駆使すればかなり強力なデバッグが実現できますね。
もちろん、強力を通り越して凶悪な結果にも繋がりかねないので、使い方には十分注意が必要ですが。


0 件のコメント: