欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Getright 5 手動(dòng)脫殼和重建IAT--第一部分(圖)

互聯(lián)網(wǎng)   發(fā)布時(shí)間:2008-10-08 19:05:36   作者:佚名   我要評(píng)論
這是一篇Armadillo加殼軟件Getright 5.01的脫殼譯文,我是參照Ricardo Narvaja的“Getright 5 脫殼和重建IAT”的文章以及Bighead[DFCG][YCG]的譯文,一邊實(shí)踐一邊再次翻譯的。感謝Ricardo Narvaja和Bighead[DFCG][YCG]。 Armadillo for Dummies: Getright 5 手動(dòng)脫殼

第七步:如何打入補(bǔ)丁
當(dāng)做這一步時(shí)請(qǐng)注意.很多人不知道究竟該如何打補(bǔ)丁,所以努力試著理解我這里所作的, 然后學(xué)會(huì)在其它情況下運(yùn)用.
第一步是改變跳轉(zhuǎn),

我們將要改變這個(gè)跳轉(zhuǎn)為JMP 401000那是我們將要打補(bǔ)丁的地方, 父進(jìn)程offset 401000 .

跳轉(zhuǎn)設(shè)好了,現(xiàn)在去401000 (ctrl G)我們要開始寫補(bǔ)丁了. 在report中我們可以看到三次entry point value.也許OEP在其它情況下會(huì)出現(xiàn)更多次.但是我們只需改變這三個(gè).

father unpacks了在report中顯示的block.所以我們將要欺騙father則他會(huì)相信從第一個(gè)section開始的所有blocks都存在錯(cuò)誤, 一個(gè)接一個(gè)所有的blocks都會(huì)被unpacked.因?yàn)檫@一點(diǎn)我們需要知道第一個(gè) section的起止點(diǎn).點(diǎn)擊"查看/內(nèi)存"

這兒我們可以看到getright的sections.忽略Header section看text section,它從401000開始,結(jié)束在589000-1=588fff.
401000-588fff (第一個(gè)section的范圍)
我們將要在report中用400000代替OEP的值.

正如你在圖中看到的我寫入了40000,然后patch會(huì)在每一個(gè)loop前加1000,所以第一個(gè)被unpack的block將在401000.
現(xiàn)在我們將要在401000處寫下如下補(bǔ)丁.

00401000 8105 10F01200 0>picture1/add DWORD PTR DS:[12F010],1000
0040100A 8105 1CF01200 0>picture1/add DWORD PTR DS:[12F01C],1000
00401014 8105 20F01200 0>picture1/add DWORD PTR DS:[12F020],1000
這些行將我們先前在轉(zhuǎn)儲(chǔ)窗口(dump window)寫的值增加1000.那些藍(lán)色的值在不同的機(jī)器上可能會(huì)不同,所以修改為你在轉(zhuǎn)儲(chǔ)窗口(dump window)看到的實(shí)際值. 再次提醒,證實(shí)在轉(zhuǎn)儲(chǔ)窗口(dump window)寫入了00 00 40 .最容易犯的錯(cuò)誤就是在補(bǔ)丁(藍(lán)色的)中的offset和轉(zhuǎn)儲(chǔ)窗口(dump window)的offset不匹配.
下一行該這樣寫:
0040101E 813D 20F01200 0>CMP DWORD PTR DS:[12F020],getright.00589000
比較是為了讓我們知道何時(shí)所有的塊都被unpacked了.
然后我們必須寫下:
00401028 - 0F85 F6341F00 JNZ getright.005F7524
如果比較為假,則返回called loop的地方.然后我們需要在最后寫下NOP,在那兒我們將要設(shè)下一個(gè)BP. 當(dāng)它完成轉(zhuǎn)儲(chǔ)時(shí),它將會(huì)停在那兒.

這兒我們可以看到完整的補(bǔ)丁代碼
我們可以跟蹤第一個(gè)循環(huán),來檢測(cè)report中的each entry是否每次都增加1000.
第八步: UNPACK
按F9運(yùn)行程序然后等待它停在我們先前在補(bǔ)丁中設(shè)下nop的bpx處.如果沒有錯(cuò)誤發(fā)生,當(dāng)我們停止時(shí),看view-LOG我們將要看到所有的unpacked blocks.
這是假設(shè)的所有unpacked blocks的LOG.我沒有完整的給出因?yàn)榈胤讲粔虻悄憧梢栽谀愕娜罩敬翱谥胁榭?
所以現(xiàn)在從401000到589000(包括588fff)的所有blocks都被unpacked了,然后dump已經(jīng)就緒.
第九步:把CHILD從FATHER那兒脫鉤
一旦我們停在NOP,讓我們寫下下面幾行.
PUSH (child的handle )
Call DebugActiveProcessStop
如果handle由字母開始,你需要在它前面鍵入一個(gè)0,因?yàn)椴贿@樣做的話olly不會(huì)認(rèn)出. 想知道son的handle只需看一下pupe, 記住child的handle是在兩個(gè)進(jìn)程中的上面的那個(gè).你一樣可以通過opening file attach來獲得son的handle.那兒你可以看到兩個(gè)名稱相同的進(jìn)程. 紅的是father,黑的是son.在此情況下我得到的是B78 所以我將要寫下0B78.記住handle在每次運(yùn)行程序時(shí)都會(huì)改變.

相關(guān)文章

最新評(píng)論