先拿一個沒有混淆的.Net程式來調試
程式默認暫停在系統的入口:
7900B183 /$ 55 PUSH EBP ; INT mscoree._CorExeMain(void)
記住無論什麼樣的.Net程式都是暫停在這個地址滴.
我對.Net調試不是很熟悉,所以我試用go to-Expreession命令直接來到這個程式的code段,這裡就有個驚喜給我們.
哈哈,看到下面的匹配標籤Matching labels,以後我們下斷點的時候可以直接到達斷點位置了,而且,它的自動匹配功能到達函數非常方便.
我們輸入00402000,這個程式的Text段得地址:
00402000 . 83B10079 DD 7900B183
00402004 . 00000000 DD 00000000
00402008 /. 48000000 DD 00000048 ; cb = 72.
0040200C |. 0200 DW 2 ;
再往下拉,可以看到激動人心的IL匯編指令了:
CPU Disasm
Address Hex dump Command Comments
00402051 /$ 02 ldarg.0
00402052 |. 14 ldnull
00402053 |. 7D 01000004 stfld components
00402058 |. 02 ldarg.0
00402059 |. 28 1100000A call .ctor
0040205E |. 00 nop
0040205F |. 00 nop
00402060 |. 02 ldarg.0
00402061 |. 28 03000006 call InitializeComponent
00402066 |. 00 nop
00402067 |. 00 nop
00402068 \. 2A ret
.Net程式調試還是比較麻煩的,不過我們可以結合IDA來調試,在Ollydbg 2.01中Edit-Select all,接著Ctrl + C複製出來,然後按照IDA中的字串可以搜索到每個函數所在地址,比如
我搜索MainForm_Load地址:
IDA中:
.method private hidebysig instance void MainForm_Load(object sender, class [mscorlib]System.EventArgs e)
// DATA XREF: sub_3560+411Fr
{
.maxstack 2
nop
ldarg.0
ldfld class [System.Windows.Forms]System.Windows.Forms.WebBrowser ArticlesRewriteAssistant.MainForm::previewWebBrowser
ldstr "about:blank"
callvirt instance void [System.Windows.Forms]System.Windows.Forms.WebBrowser::Navigate(string)
nop
找到about:blank字串,接著在複製出來的Ollydbg代碼中搜索它
00409CB4 /$ 00 nop
00409CB5 |. 02 ldarg.0
00409CB6 |. 7B 73000004 ldfld previewWebBrowser
00409CBB |. 72 C22C0070 ldstr "about:blank" ; UNICODE "about:blank"
00409CC0 |. 6F 0301000A callvirt Navigate
00409CC5 |. 00 nop
看到了嗎00409CB4就是函數MainForm_Load的地址了.
没有评论:
发表评论