ESP定律
當(dāng)程序載入OD之后?
004AC460?>?$??60????????????pushad;程序停在這里?F8?指向pushad指令
pushad是把寄存器中數(shù)據(jù)入棧?棧中數(shù)據(jù)如下:
0012FFA4???7C930208???|EDI? <--?ESP指向棧頂
0012FFA8???FFFFFFFF |ESI
0012FFAC???0012FFF0 |EBP
0012FFB0???0012FFC4 |ESP
0012FFB4???7FFDE000 |EBX
0012FFB8???7C92E4F4???|EDX??
0012FFBC???0012FFB0 |ECX
0012FFC0???00000000 |EAX
此時(shí)ESP指向棧頂?地址為0012FFA4?,脫殼從這里開始-.-~
來(lái)到數(shù)據(jù)段即內(nèi)存地址0012FFA4?在這下斷點(diǎn)?-?硬件訪問?-?word
然后F9??--?這里就能找到OEP
那么我的理解就是?匯編指令之前前先把各個(gè)寄存器保存起來(lái),然后執(zhí)行殼的操作比如解壓,
等殼的工作完成之后需要恢復(fù)各個(gè)寄存器的值?,我們?cè)跅V幸呀?jīng)設(shè)置了一個(gè)斷點(diǎn),所以當(dāng)程序訪問棧中數(shù)據(jù)(popad,我們?cè)?/span>0012FFA4?下斷點(diǎn)是EDI的值,當(dāng)程序恢復(fù)EDI寄存器)時(shí)就被我們給斷了下來(lái)?,當(dāng)然并不是斷在pop?EDI指令上,而是斷在popad的下一條指令,因?yàn)?/span>popad是一步到位恢復(fù)寄存器的。
然后在尋找OEP,一般是jmp大跳?然后就看到了期待已久的55機(jī)器碼了?dump之-.-~
可以理解為殼的執(zhí)行是一個(gè)子程序?,子程序運(yùn)行前都要保持寄存器,完事之后恢復(fù)寄存器,返回主程序
我們?cè)诨謴?fù)寄存器的地方下斷點(diǎn),然后???...
以上就是我對(duì)ESP定律的理解,雖然還未成功脫的一殼,但是各大網(wǎng)站論壇都在談?wù)?/span>ESP之威武,據(jù)說(shuō)可脫所以壓縮殼,所以大概找了些文章看看,ESP定律就是利用堆棧平衡找到程序結(jié)束繼而找到OEP。
以上為個(gè)人理解,為了不誤人子弟,有錯(cuò)誤大神請(qǐng)指出?
?
popad:相當(dāng)于
push EAX
push ECX
push EDX
push EBX
push ESP
push EBP
push ESI
push EDI
總結(jié)
- 上一篇: 苹果6值多少钱啊?
- 下一篇: metasploitable2渗透测试