Windows PE变形练手1-用PE自己的机器码修改自己的逻辑
PE變形練手1-用PE自己的機(jī)器碼修改自己的邏輯
????就是找一個(gè)PE文件,用自己的部分代碼部分覆蓋或者而修改自己另一個(gè)代碼部分的補(bǔ)丁姿勢(shì)(現(xiàn)實(shí)中使用很少,極少數(shù)破解可以用到。這次例子目的是了解PE)。
第一個(gè)實(shí)驗(yàn),寫個(gè)例子。然后把函數(shù)1和函數(shù)2調(diào)換一下。
代碼如上,很簡(jiǎn)單。先輸出111,在輸出222.根據(jù):
可知,相關(guān)FOA???main?0x440??main1?0x400??main2?420
兩個(gè)函數(shù)如上,最后C3是return,仔細(xì)觀察,是下面參數(shù)不同:
OK,好辦,直接替換這兩個(gè)參數(shù)就行了唄:
然而發(fā)現(xiàn),并不性。還是先輸出111,有輸出222。當(dāng)時(shí)我還傻愣半天,還找同事問問。怎么這么簡(jiǎn)單,改個(gè)東西。我卻失敗了。額...結(jié)果我輸了一塊雪糕。原因是這兩個(gè)函數(shù)根本沒有被調(diào)用到。比如這樣。我上來就C3,發(fā)現(xiàn)程序繼續(xù)運(yùn)行。
原因是因?yàn)橹苯颖粌?yōu)化掉了,編譯器編譯的時(shí)候直接把這兩個(gè)函數(shù)的字節(jié)碼弄到了調(diào)用的地方,看反匯編就知道了:
相關(guān)編譯選項(xiàng)是這兩個(gè):
我們可以把?內(nèi)聯(lián)函數(shù)擴(kuò)展禁用:
????這樣就調(diào)用函數(shù)了,這個(gè)時(shí)候再去改函數(shù)就有反應(yīng)了。這里不上圖了,我本地測(cè)試發(fā)現(xiàn)可以。
下面我試了下編譯選項(xiàng),總結(jié)了一些組合產(chǎn)生的結(jié)果(VS2015?C++)
(1)優(yōu)化:完全??內(nèi)聯(lián)函數(shù)擴(kuò)展:開
?
(1)優(yōu)化:禁用???內(nèi)聯(lián)函數(shù)擴(kuò)展:開
(2)優(yōu)化:禁用???內(nèi)鏈函數(shù)擴(kuò)展:關(guān)
(3)優(yōu)化:完全???內(nèi)鏈函數(shù)擴(kuò)展:關(guān)
例子2,模擬一個(gè)最簡(jiǎn)單的破解:
要想在錯(cuò)誤密碼或者不輸入密碼的時(shí)候走yes函數(shù),姿勢(shì)有很多:
(1)OD直接加載起來,在判斷密碼正誤的地方改下邏輯,可以直接改判斷部分或者if不滿足后執(zhí)行的函數(shù)地址(如果是實(shí)際情況,推薦這個(gè))。
(2)直接上來把PE入口函數(shù)指向yes,這樣可以直接跑yes函數(shù)了。但是這樣的缺點(diǎn)不會(huì)執(zhí)行其他別的邏輯代碼了,而且執(zhí)行完,應(yīng)該不會(huì)退出。我記得是退出不了?;蛘咴僭诤竺孀约鹤芳油顺龃a。
(3)覆蓋部分主函數(shù)里面的代碼,讓他進(jìn)入主函數(shù)后直接就跳轉(zhuǎn)到yes函數(shù)了。(這個(gè)思路也行)。
(4).....還有很多姿勢(shì)。下面就簡(jiǎn)單實(shí)現(xiàn)下上面三個(gè)姿勢(shì)。雖然沒什么用,練著玩,為接下來的復(fù)雜PE變形做鋪墊。
實(shí)現(xiàn)姿勢(shì)1:OD加載走走邏輯破解:
OK這就行了,比較簡(jiǎn)單,不細(xì)說了。
實(shí)現(xiàn)姿勢(shì)2:改PE入口的地址,直接讓他跑yes函數(shù):
看下入口:
之前是什么都不管,反正RVA1000對(duì)應(yīng)FOA400
OK?yes函數(shù)在這里,41000處,直接把13F2?改成1000就行了:
這樣雙擊就直接破解了:
和預(yù)想一樣,點(diǎn)擊確定后卡在這個(gè)黑色界面上了:
實(shí)現(xiàn)姿勢(shì)3:直接代碼覆蓋(這個(gè)不通用,之后在解釋):
?
? ? 直接把400-420的函數(shù)yes?代碼覆蓋到420-440的no里,如果no里代碼比較多,可以直接C3返回,但是上面也有很多坑,之后會(huì)的例子里會(huì)解釋。
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Windows PE变形练手1-用PE自己的机器码修改自己的逻辑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows PE 第十三章 PE补丁
- 下一篇: R3获取kernel32地址