序章
LIDNUG の .NET コード保護http://secureteam.net/lidnug_recording/Untitled.swf (特に 46:30 から 57:30 まで) に関するこのビデオを見た後、MessageBox.Show への呼び出しをEXE を作成しました。
私の「TrialApp.exe」の唯一のロジックは次のとおりです。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("This is trial app");
}
}
リリース構成でコンパイル: http://rapidshare.com/files/392503054/TrialApp.exe.html
電話を見つけるために私がすること
WinDBG でアプリケーションを実行し、メッセージ ボックスが表示されたら中断します。
次を使用して CLR スタックを取得します!clrstack
。
0040e840 5e21350b [InlinedCallFrame: 0040e840] System.Windows.Forms.SafeNativeMethods.MessageBox(System.Runtime.InteropServices.HandleRef, System.String, System.String, Int32)
0040e894 5e21350b System.Windows.Forms.MessageBox.ShowCore(System.Windows.Forms.IWin32Window, System.String, System.String, System.Windows.Forms.MessageBoxButtons, System.Windows.Forms.MessageBoxIcon, System.Windows.Forms.MessageBoxDefaultButton, System.Windows.Forms.MessageBoxOptions, Boolean)
0040e898 002701f0 [InlinedCallFrame: 0040e898]
0040e934 002701f0 TrialApp.Form1.Form1_Load(System.Object, System.EventArgs)
MethodDesc 構造体を取得します (Form1_Load のアドレスを使用)!ip2md 002701f0
MethodDesc: 001762f8
Method Name: TrialApp.Form1.Form1_Load(System.Object, System.EventArgs)
Class: 00171678
MethodTable: 00176354
mdToken: 06000005
Module: 00172e9c
IsJitted: yes
CodeAddr: 002701d0
Transparency: Critical
Source file: D:\temp\TrialApp\TrialApp\Form1.cs @ 22
このメソッドの IL をダンプします (MethodDesc による)!dumpil 001762f8
IL_0000: ldstr "This is trial app"
IL_0005: call System.Windows.Forms.MessageBox::Show
IL_000a: pop
IL_000b: ret
したがって、ビデオで言及されているように、への呼び出しShow
はメソッド実装の先頭から 5 バイトです。
ここで、CFFExplorer を (ビデオのように) 開き、Form1_Load メソッドの RVA を取得します00002083
。
この後、Address Converter (再び CFF Explorer) に移動し、offset に移動し00002083
ます。そこには次のものがあります。
32 72 01 00 00 70 28 16 00 00 0A 26 2A 7A 03 2C
13 02 7B 02 00 00 04 2C 0B 02 7B 02 00 00 04 6F
17 00 00 0A 02 03 28 18 00 00 0A 2A 00 03 30 04
00 67 00 00 00 00 00 00 00 02 28 19 00 00 0A 02
ビデオでは、最初の 12 バイトはメソッド ヘッダー用であると言及されているため、スキップします
2A 7A 03 2C
13 02 7B 02 00 00 04 2C 0B 02 7B 02 00 00 04 6F
17 00 00 0A 02 03 28 18 00 00 0A 2A 00 03 30 04
00 67 00 00 00 00 00 00 00 02 28 19 00 00 0A 02
実装の先頭から 5 バイトは、メソッド呼び出しのオペコード (28) である必要があります。残念ながら、そこにはありません。
02 7B 02 00 00 04 2C 0B 02 7B 02 00 00 04 6F
17 00 00 0A 02 03 28 18 00 00 0A 2A 00 03 30 04
00 67 00 00 00 00 00 00 00 02 28 19 00 00 0A 02
質問:
- 私は何を間違っていますか?
- ファイルのその位置にメソッド呼び出しがないのはなぜですか? それとも、ビデオにいくつかの情報が欠けているかもしれません...
- あのビデオの男はなぜコールを 9 つのゼロに置き換えたのですか?