日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

Windows PE变形练手3-把通用模板机器码直接覆盖目标PE

發(fā)布時(shí)間:2025/6/17 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows PE变形练手3-把通用模板机器码直接覆盖目标PE 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

把通用模板機(jī)器碼直覆蓋目標(biāo)PE

? ? 這個(gè)地方真是嘗試了好久,遇到很多坑點(diǎn),Win?PE那本書上的東西有點(diǎn)不夠,也就直接寫書上的例子會(huì)發(fā)現(xiàn)很多地方不是說(shuō)的那樣,里面提供的信息太少了,就比如里面并沒有提被注入的目標(biāo)PE的隨機(jī)基址問題,比如說(shuō)中給了一套模板(模板里面有一些變量定義了沒有使用,還有獲取Kernel32.dll的地方是錯(cuò)誤的,還有通用模板運(yùn)行的時(shí)候內(nèi)存溢出了...)額...總之不要在意這些細(xì)節(jié)。我自己摸索著弄吧,這個(gè)地方。

? ? 今天打算嘗試幾種姿勢(shì)手動(dòng)把自己的模板機(jī)器碼添加到目標(biāo)PE某個(gè)位置讓其加載我們的功能。

? ? 對(duì)于模板代碼來(lái)說(shuō),要注意的問題之前說(shuō)過(guò)了,注意導(dǎo)入表、注意數(shù)據(jù)段、注意重定位等等。其實(shí)重定位還是很好解決的。導(dǎo)入表和數(shù)據(jù)段可以解決,但是很麻煩,需要重構(gòu),這也就意味著給我們的目標(biāo)無(wú)形中帶來(lái)了兼容性的問題。學(xué)習(xí)的時(shí)候可以過(guò)度開發(fā)。深刻研究,但是一旦你是為了實(shí)現(xiàn)功能而寫代碼的時(shí)候建議一定要從簡(jiǎn),我們的目的是實(shí)現(xiàn)功能。出招過(guò)慢通常是因?yàn)樽藙?shì)過(guò)多[這個(gè)是別人提醒我的話]OK不廢話,說(shuō)正題。

嘗試1

1)隨便寫一個(gè)程序,作為宿主文件,記住代碼多寫點(diǎn)。別弄的代碼段只有很少內(nèi)容,結(jié)果自己注入的模板字節(jié)碼比原來(lái).text還大。[記住這個(gè)文件的隨機(jī)基址一定要關(guān)閉,如果你用的是VS的話,在這里]

?


2)編寫一個(gè)通用模板程序(加載dll的),匯編代碼在最后,開發(fā)環(huán)境(vs2012+masm32,這個(gè)程序的基址隨不隨機(jī)無(wú)所謂,因?yàn)橐粫?huì)只是把.text段部分拷貝過(guò)去。

下圖是生成的載體EXE:

?

?

(3)然后把1生成的那個(gè)exe,的程序入口改成對(duì)應(yīng)FOA=0X400的地方。在把2生成的EXE的代碼段部分拷貝到1FOA=0X400處,運(yùn)行1生成的exe會(huì)發(fā)現(xiàn)成功加載了相關(guān)dll

下圖是改PE頭里面程序入口地址:


然后是替換代碼段的部分:

?

? ? 最后那個(gè)E9?XXX?我沒有修改,這個(gè)地方是留著最終嵌入到目標(biāo)程序某個(gè)位置,執(zhí)行完之后最好是跳轉(zhuǎn)回原來(lái)的函數(shù)入口,這樣就不會(huì)影響原目標(biāo)載體的正常執(zhí)行,同時(shí)又能執(zhí)行我們自己的代碼邏輯。

這個(gè)實(shí)驗(yàn)是要是為了驗(yàn)證載體的獨(dú)立行和可行性。因?yàn)樵闯绦蚶锊]有嵌入代碼里的那些調(diào)用函數(shù),也沒有導(dǎo)入表,也沒有數(shù)據(jù)段。這樣只要讓目標(biāo)文件的邏輯指向咱們的入口就OK了,咱們是完全獨(dú)立的。同時(shí)上面注意一個(gè)問題,就是再寫被注入載體例子的時(shí)候,我是關(guān)掉了隨機(jī)基址選項(xiàng)。接下來(lái)實(shí)驗(yàn)二嘗試打開隨機(jī)基址選項(xiàng)。因?yàn)閷?shí)際嵌入別人程序很多時(shí)候?qū)Ψ降碾S機(jī)基址選項(xiàng)是開著的。開不開隨機(jī)基址,看PE頭信息就能看出來(lái):




嘗試2

? ? 這次打算解決上一個(gè)例子的不足。關(guān)于隨機(jī)基址的問題,在平時(shí)使用的過(guò)程中,通常要做的是嵌入到別人的程序里,所以咱們認(rèn)為很多的程序的那個(gè)選項(xiàng)是開著的,也就是基址是隨機(jī)的,這個(gè)地方我剛剛做了很多嘗試,我一開始是發(fā)現(xiàn)我嵌入的代碼在call的地方失敗了,call的地址什么都沒有,然后我就在嵌入模板里在這個(gè)位置上做了很多次嘗試,結(jié)果都失敗了。我用全局變量重定位的姿勢(shì)搞了這個(gè)call,結(jié)果還是不行(可能是姿勢(shì)錯(cuò)誤)。后來(lái)我反復(fù)編譯我自己的一個(gè)helloworld[因?yàn)槲乙膊恢赖降啄莻€(gè)選項(xiàng)改了什么],發(fā)現(xiàn)那個(gè)選項(xiàng)對(duì)代碼段沒有影響,額...既然我的代碼是獨(dú)立可以運(yùn)行的,同時(shí)那個(gè)東西對(duì)代碼段又沒有影響,那是不是在我的程序里,我可以直接把那個(gè)隨機(jī)的選項(xiàng)抹掉:


結(jié)果我是在PE頭里找到那個(gè)位置,把那個(gè)改成0,發(fā)現(xiàn)可以成功運(yùn)行,然后我又找來(lái)chrome等別的程序,測(cè)試了幾個(gè),發(fā)現(xiàn)可以。
? ?

????然后打算下個(gè)PE比較工具看下具體細(xì)節(jié),隨便點(diǎn)擊了一個(gè)界面進(jìn)去了:

看到的這個(gè):


一如既往的”喜歡的界面”,看那個(gè)大大橙色點(diǎn)擊下來(lái)你就會(huì)下載一個(gè)你都不知道是啥的東西,對(duì),都怪你,不仔細(xì)看細(xì)節(jié)。然后在下面不起眼的地方找到了“真實(shí)”的下載地址,下載了個(gè)這貨:

依然很熟悉的套路

????百度上搜索東西,下載很多都是下載個(gè)這么個(gè)東西,超級(jí)大禮包。[打著簽名哦,而且國(guó)內(nèi)殺軟幾乎都方行了],也許上面也是,都沒違規(guī)只是做的不明顯讓你取消安裝。但是國(guó)外貌似不承認(rèn)這種所謂的不違規(guī):

? ? 下面是avast上執(zhí)行這個(gè)exe的結(jié)果,執(zhí)行前沒報(bào)毒,也就是祖國(guó)的這款大禮包程序并沒有對(duì)avast的動(dòng)態(tài)掃毒做免殺,打著簽名還被avast報(bào)毒,這肯定是一點(diǎn)都沒有免殺...


????最后經(jīng)過(guò)重重困難,在虛擬上安裝了UC,然后運(yùn)行不起來(lái)。FK。浪費(fèi)時(shí)間。算了這個(gè)地方醬紫。繼續(xù)?實(shí)驗(yàn)2?的測(cè)試流程

?

?

?

????然后就硬著試了一次:把目標(biāo)PE頭里面的這個(gè)字段直接抹成0,然后在用?實(shí)驗(yàn)1?的姿勢(shì)去做,結(jié)果發(fā)現(xiàn)是可以的。OK?說(shuō)下這次嘗試的姿勢(shì)步驟:

?

(1)找到本機(jī)chrome.exe,修改PE頭的兩個(gè)地方

?{

??????A:基部重定位表地址為0

??????B:程序入口地址RVA(FOA=0x400)

?}

?

(2)?然后編譯嵌入模板文件,把.text(FOA=400)處的機(jī)器碼拷貝到(1)改變之后的對(duì)應(yīng)FOA=0X400的位置上。

(3)?把測(cè)試dll和改好后的exe放到,chrome原來(lái)文件夾下,記住改名為chrome.exe,無(wú)意發(fā)現(xiàn),chrome.exe如果換了名字之后就運(yùn)行不起來(lái)了,額...不知道這個(gè)是處于防護(hù)還是什么,應(yīng)該不是防護(hù),防護(hù)的話這么做感覺沒什么卵用,難道是怕別人做類似chrome->chrome2,my.exe->chrome.exe?這類事??反正便面上看沒卵用。

(4)?運(yùn)行chrome會(huì)發(fā)現(xiàn)相關(guān)dll被加載,點(diǎn)擊確定之后chrome崩潰,崩潰是必然,因?yàn)槭紫葲]有給最后的那個(gè)跳轉(zhuǎn)指令E9?XXXX更改實(shí)際值,同時(shí)因?yàn)楸┝Ω采w了原來(lái)代碼部分,導(dǎo)致代碼損壞。So這就是下個(gè)實(shí)驗(yàn)要做的事,把代碼嵌入到某個(gè)位置,比如某個(gè)間隙,某個(gè)段(比如最后一段),或者自己?jiǎn)为?dú)創(chuàng)建一個(gè)段。放在里面等等。然后修改函數(shù)入口跳轉(zhuǎn)進(jìn)來(lái),做完事再跳轉(zhuǎn)到之前該跳轉(zhuǎn)的位置。

?

下面是實(shí)驗(yàn)2的一些細(xì)節(jié)截圖:

下圖成功通過(guò)chrome.exe加載了dll

?

下圖是我本機(jī)上原版chrome重命名后起不來(lái),彈的錯(cuò)誤窗口:

?

????劫持過(guò)程中發(fā)現(xiàn)360彈窗,注意木馬名稱。之前沒見過(guò)這個(gè)顏色的窗,我沒記錯(cuò)的話之前是見過(guò)紅色的[應(yīng)該是加載服務(wù)或者驅(qū)動(dòng)的時(shí)候],黃色的[鏡像劫持或者hook的時(shí)候,直接cmd強(qiáng)行修改密碼也是黃色]...不過(guò)不重要,可能就是隨便換個(gè)皮膚吧,還順便打個(gè)廣告。主要是看描述和名稱。同時(shí)還發(fā)現(xiàn)一個(gè)問題,如果是改chrome的話發(fā)現(xiàn)有保護(hù),改自己寫的代碼并沒有保護(hù),沒猜錯(cuò)應(yīng)該是有這種特判邏輯,有時(shí)間研究下怎么過(guò)這個(gè)。不過(guò)這個(gè)不重要了,平時(shí)很少分析國(guó)內(nèi)殺軟。也不知道國(guó)內(nèi)殺軟都什么套路,就像發(fā)現(xiàn)電腦管家的一個(gè)優(yōu)點(diǎn)就是界面賊帥,但是隨便TDL無(wú)簽名加上一個(gè)驅(qū)動(dòng),然后干掉它。全程沒有提示。額.....


????360提示報(bào)毒之后,被修改的chrome.exe被干掉了,但是那個(gè)劫持I.dll,沒被清理掉。這個(gè)地方差評(píng),也許是還沒到我加載這個(gè)DLL的時(shí)候就已經(jīng)被截?cái)嗔?#xff0c;所以就直接把exe干了。然后并沒有在沙箱里跑我,看我操作那些文件,進(jìn)一步清理。不過(guò)這樣做也可以理解。沒有理由繼續(xù)深一步清理。產(chǎn)品---用戶,效率---過(guò)度開發(fā)。很多時(shí)候過(guò)度開發(fā)就是在浪費(fèi)生命。


?

之后的實(shí)驗(yàn)是在不破壞原來(lái)PE結(jié)構(gòu)的前提下附加我們的補(bǔ)丁代碼。姿勢(shì)有很多,我覺得我會(huì)選擇擴(kuò)展最后一節(jié)大小來(lái)做這個(gè)事,不過(guò)越簡(jiǎn)單的東西也就越容易被檢測(cè)出來(lái),想到最后一節(jié)擴(kuò)展,突然想起個(gè)事,最后一節(jié)改完之后,然后對(duì)其,然后修改PE頭。貌似對(duì)于大簽名的文件來(lái)說(shuō)簽名還是正常的。這個(gè)之前分析過(guò)。BUT,這么改肯定要修改PE頭的另兩個(gè)字節(jié),入口地址和代碼重定位值。簽名跟定無(wú)效了。So......

感覺今天廢話說(shuō)的有點(diǎn)多,可能是周末時(shí)間多,無(wú)聊吧。看到都好奇,就簡(jiǎn)單看看。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Windows PE变形练手3-把通用模板机器码直接覆盖目标PE的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。