ACProtect Professional 1.3C 主程序脫殼(3)(圖)
互聯(lián)網(wǎng) 發(fā)布時(shí)間:2008-10-08 19:05:26 作者:佚名
我要評(píng)論
運(yùn)行程序,crashedL。直接用修復(fù)完stolen code的dumped_.exe看看。從EP的第1個(gè)call進(jìn)去就有問(wèn)題。
在OllyDbg中可以看到:
有部分IAT在殼中。這部分代碼前面是跟到了的(在第6次int 3以后),原來(lái)認(rèn)為這只是loader自己需要的API。實(shí)際上
運(yùn)行程序,crashedL。直接用修復(fù)完stolen code的dumped_.exe看看。從EP的第1個(gè)call進(jìn)去就有問(wèn)題。
在OllyDbg中可以看到:
有部分IAT在殼中。這部分代碼前面是跟到了的(在第6次int 3以后),原來(lái)認(rèn)為這只是loader自己需要的API。實(shí)際上正常的程序代碼也使用了這個(gè)IAT。
如果用ImportRec把這部分也取出來(lái),屬于不同dll的api混排了,ImportRec不能處理。
這些地址是在736643處理的。
而且有一個(gè)不能識(shí)別(這個(gè)實(shí)際上是Hooked MessageBoxA)。
估計(jì)這是加殼時(shí)做的手腳。當(dāng)發(fā)現(xiàn)主程序使用了與殼代碼同樣的API時(shí),修改了對(duì)應(yīng)的調(diào)用代碼,使其調(diào)用到殼中的IAT。這樣可以加強(qiáng)與殼的聯(lián)系。反過(guò)來(lái)看,這里大部分API(除了只有殼使用的),在前面避開(kāi)IAT加密處理后,都已經(jīng)import了。
在ACProtect_Fixed中已經(jīng)有解好的api名。
緊臨的函數(shù)指針:
注意函數(shù)名及指針與7339A9附近的代碼并不完全對(duì)應(yīng)。有的函數(shù)名或指針在別處。
可以在程序入口自己調(diào)用LoadLibrary,GetProcAddress進(jìn)行處理,填入相應(yīng)的地址?;蛘甙袻oader的代碼搬過(guò)來(lái)。也可以修改主程序的代碼,使其調(diào)用前面得到的干凈的IAT而不是殼中的IAT(這樣要處理的地方太多,很麻煩)。
注意ACProtected_Fixed中,import了幾個(gè)基本的API:
在加載API時(shí)殼代碼會(huì)使用這些函數(shù)。這幾個(gè)地址直接填入007300D8開(kāi)始的IAT中了。修改dumped_.exe的EP,從殼代碼開(kāi)始(可以看到dump出來(lái)的代碼,這部分已經(jīng)解開(kāi)了),
注意Loader代碼中用的幾個(gè)API(GetModuleHandleA,GetProcAddress)改為使用避開(kāi)IAT加密后得到的主程序的IAT。
原來(lái)在殼代碼import的4個(gè)API,從主程序的IAT直接取。結(jié)束處理后跳回前面的OEP 409DE4。用pushad,pushad保存寄存器值。
注意最后一項(xiàng)7301CC實(shí)際是MessageBoxA,被ACProtect用做SDK的接口。 不要填入MessageBox的真正地址。
下面的73013C在跟原程序的過(guò)程中始終為0,可能是注冊(cè)版才有?
處理完后,位于殼空間的IAT已經(jīng)賦上了正確值。
7. 修復(fù)Replaced code (1)
用前面的OllyScript腳本,停下后對(duì)Code section設(shè)內(nèi)存訪(fǎng)問(wèn)斷點(diǎn)。忽略所有異常。斷下后,在抽取代碼的共同入口722416設(shè)斷,運(yùn)行。第1次調(diào)用在004047E5。
里面還有SMC,解出后貼到ACProtect_Fixed中對(duì)照跟蹤。這部分的處理與低版本基本相同。
1) 查返回地址表
7225CC后ebx指向返回地址表,里面是RVA:
找到匹配地址后,ecx等于表項(xiàng)的offset,第1項(xiàng)為0x2A。
2) 查opcode表
用1中的到的offset查opcode數(shù)據(jù)表(007262ED):
密文opcode表:
counter表(記錄每個(gè)地址的調(diào)用次數(shù),超出0x20次將使用新的地址解碼):
第1次解出的變形碼:
3) 調(diào)整stack以便正確調(diào)用變形碼及返回
4) 破壞解出的代碼,ret到變形碼
5) 執(zhí)行變形碼,返回到原程序
6) Patch
先把解出的代碼binary copy到dumped_.exe(直接copy 722416 - 7226B0的代碼即可)。
關(guān)閉722579的解碼(解出7225C1 - 7226B0):
關(guān)閉7226A8處對(duì)前面代碼的破壞:
patch 72260C: jnz->jmp,無(wú)論執(zhí)行多少次都使用同一解碼地址
copy正確的ImageBase值,這里為0,改72FC1F為400000
copy 正確的10 bytes key(第1 byte為0)
執(zhí)行,仍然crashedL。
8. 修復(fù)Replaced code (2)
還有replaced code,在這里出異常:
->
將解出的代碼貼到ACProtect_Fixed.exe??梢钥吹?這些實(shí)際上是變形的call代碼。第1次執(zhí)行到這里,在buffer中解出的變形碼為:
XOR的結(jié)果:
目前的dumped_.exe,地址72ED83的值為0(這些值是loader寫(xiě)入的)。
406DF8的變形碼原來(lái)是call GetKeyboardType。原程序的call API 全部被抽掉了。殼代碼的動(dòng)作與前面相似,用返回地址查表,獲取相應(yīng)的指針,生成jmp dword ptr ds:[xxxxxxxx]指令,該地址則指向類(lèi)似72124C的變形碼,調(diào)用正確的API。
變形call API的返回RVA地址表:
開(kāi)始:
結(jié)束:
尋址變形碼數(shù)組下標(biāo)表(每項(xiàng)1字節(jié)),用于查變形碼指針數(shù)組:
變形碼地址表(指向變形碼的指針):
開(kāi)始打算寫(xiě)個(gè)inline-patch:
用同樣的查表動(dòng)作,把對(duì)應(yīng)的變形碼copy出來(lái),得到對(duì)應(yīng)的API地址,與跳過(guò)加密而得到的干凈IAT對(duì)比。查到匹配值后,修改對(duì)應(yīng)的opcode,使其直接call到IAT中的地址。
用OllyScript腳本跳過(guò)IAT加密,得不到變形碼(此時(shí)從變形碼地址表中得到的就是API的真正地址,有46項(xiàng)指針無(wú)效,為0xCCCCCCCC)。
另一個(gè)問(wèn)題卻是難以解決的,replaced code只有5字節(jié):
這里的call是0xE8,調(diào)用殼中的絕對(duì)地址。InlinePatch寫(xiě)到一定程度才發(fā)現(xiàn),如果要修復(fù)代碼,使其調(diào)用到IAT,需要相對(duì)地址調(diào)用6 bytesL。真是個(gè)低級(jí)錯(cuò)誤。
現(xiàn)在patch的結(jié)果:
真正需要的是:
這樣只有保留變形碼。把殼中對(duì)應(yīng)的代碼copy過(guò)來(lái),OEP前生成正確的變形碼。而且脫殼后的程序不能直接看到API名字,很不舒服。
只好把殼的相應(yīng)代碼搬過(guò)來(lái)。再次修改dumped_.exe入口處代碼,在把loader空間中的IAT填好后,跳到處理變形碼的位置:
loader在處理IAT時(shí)需要調(diào)用幾個(gè)API,及判斷dll的映射地址、API地址等,先保存需要的數(shù)據(jù)(我們有干凈的IATJ):
由于在前面避開(kāi)了IAT加密,生成變形碼需要的數(shù)據(jù)已經(jīng)被正確的API地址覆蓋了。用LoadPE把ACProtect的idata section存到文件,然后加到dumped_.exe。
把這個(gè)section的密文數(shù)據(jù)copy到dumped_.exe的idata section,覆蓋掉干凈的IAT,我們已經(jīng)不需要它了?,F(xiàn)在只要偽造好現(xiàn)場(chǎng)J。
往下執(zhí)行l(wèi)oader的IAT處理代碼,做幾處小小的修改,使其使用剛才保存的API地址等數(shù)據(jù)。
IAT及變形碼處理結(jié)束后回到OEP。
執(zhí)行。又掛了L。這次是內(nèi)存訪(fǎng)問(wèn)異常。跟一跟可以知道,是在Hooked MessageBoxA中。這里面的代碼還沒(méi)有仔細(xì)看,有幾個(gè)switch-case分枝。第1次eax為5。
進(jìn)去后有幾個(gè)查表動(dòng)作:
用調(diào)用Hooked MessageBoxA的返回地址查表。這張表在721F25處,dumped_.exe中有,共21項(xiàng)。
注意查表時(shí)不是找相等值,而是找大于返回地址值且最接近的值。
繼續(xù)->
這里出現(xiàn)了另外2張表。7220B5的表中數(shù)據(jù)為size。Dumped_.exe中有:
問(wèn)題出在第3張表:
dump出的數(shù)據(jù)為0。這段代碼要把主程序中的一段數(shù)據(jù)copy到這張表中數(shù)據(jù)所指的地址。在loader中執(zhí)行時(shí),這里填入了指向動(dòng)態(tài)分配內(nèi)存的指針。
顯然不能直接復(fù)制這些值。有個(gè)簡(jiǎn)單的辦法可以騙過(guò)loader。從那張size表中可以看到,最大的數(shù)據(jù)FD5D。用LoadPE再次增加1個(gè)section,size為FFFF即可。
修改dumped_.exe,設(shè)置21項(xiàng)數(shù)據(jù),使其全部指向該地址。
在W2K下運(yùn)行,顯示窗口,但不能響應(yīng)輸入。在WinXP下運(yùn)行什么也不顯示。
下面該與主程序交手了,這需要把板凳坐穿的耐心L。
相關(guān)文章
- “CMOS密碼”就是通常所說(shuō)的“開(kāi)機(jī)密碼”,主要是為了防止別人使用自已的計(jì)算機(jī),設(shè)置的一個(gè)屏障2023-08-01

QQScreenShot之逆向并提取QQ截圖--OCR和其他功能
上一篇文章逆向并提取QQ截圖沒(méi)有提取OCR功能, 再次逆向我發(fā)現(xiàn)是可以本地調(diào)用QQ的OCR的,但翻譯按鈕確實(shí)沒(méi)啥用, 于是Patch了翻譯按鈕事件, 改為了將截圖用百度以圖搜圖搜索.2023-02-04
QQ截圖是我用過(guò)的最好用的截圖工具, 由于基本不在電腦上登QQ了, 于是就想將其提取出獨(dú)立版目前除了屏幕錄制功能其他都逆出來(lái)了, 在此分享一下2023-02-04
非系統(tǒng)分區(qū)使用BitLocker加密導(dǎo)致軟件無(wú)法安裝的解決方法
很多電腦用戶(hù)在考慮自己電腦磁盤(pán)分區(qū)安全時(shí)會(huì)采用 Windows 自帶的 BitLocker 加密工具對(duì)電腦磁盤(pán)分區(qū)進(jìn)行加密。但有些人加密后就會(huì)忘記自己設(shè)置的密碼從而導(dǎo)致在安裝其它軟2020-11-25
防止離職員工帶走客戶(hù)、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生
這篇文章為大家詳細(xì)介紹了如何才能防止離職員工帶走客戶(hù)、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-27
徹底防止計(jì)算機(jī)泄密、重要涉密人員離職泄密、涉密人員離崗離職前防范舉
近些年企業(yè)商業(yè)機(jī)密泄漏的事件屢有發(fā)生,這篇文章主要教大家如何徹底防止計(jì)算機(jī)泄密、重要涉密人員離職泄密、告訴大家涉密人員離崗離職前的防范舉措,具有一定的參考價(jià)值,2017-06-27量子計(jì)算機(jī)輕松破解加密算法 如何破解加密算法?
最近有電腦用戶(hù)反應(yīng)量子計(jì)算機(jī)可以破解下載的所有的加密算法嗎?其實(shí)也不是不可以,下面虛擬就為大家講解買(mǎi)臺(tái)量子計(jì)算機(jī),如何分分鐘破解加密算法2016-09-26怎么破解Webshell密碼 Burpsuite破解Webshell密碼圖文教程
webshell是以asp、php、jsp或者cgi等網(wǎng)頁(yè)文件形式存在的一種命令執(zhí)行環(huán)境,一種網(wǎng)頁(yè)后門(mén)。黑客通常會(huì)通過(guò)它控制別人網(wǎng)絡(luò)服務(wù)器,那么怎么破解webshell密碼呢?一起來(lái)看看吧2016-09-19針對(duì)Linux系統(tǒng)全盤(pán)加密的啟動(dòng)攻擊
本文討論了針對(duì)Linux系統(tǒng)全盤(pán)加密的冷啟動(dòng)攻擊,大家都認(rèn)為這種攻擊是可行的,但執(zhí)行這么一次攻擊有多難?攻擊的可行性有多少呢?需要的朋友可以參考下2015-12-28防止泄露公司機(jī)密、企業(yè)數(shù)據(jù)防泄密軟件排名、電腦文件加密軟件排行
面對(duì)日漸嚴(yán)重的內(nèi)部泄密事件,我們?nèi)绾问刈o(hù)企業(yè)的核心信息,如何防止內(nèi)部泄密也就成了擺在各個(gè)企業(yè)領(lǐng)導(dǎo)面前的一大問(wèn)題。其實(shí),針對(duì)內(nèi)網(wǎng)安全,防止內(nèi)部信息泄漏早已有了比較2015-12-17






