作者の 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 = INPUThorse = Horse()horse.Name='ポルトフィーノ'horse.Father='クロフネ'form.Data.Add(horse)grid = form.Controls['dataGridView1']grid.DataSource = form.Datagrid.Refresh()
スタータースクリプトにこんな感じのを追加して、Execute Script(F5)。
簡単にクラックできちゃいました!!
Pythonを駆使すればかなり強力なデバッグが実現できますね。
もちろん、強力を通り越して凶悪な結果にも繋がりかねないので、使い方には十分注意が必要ですが。