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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

逆向脱壳附加数据处理

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 逆向脱壳附加数据处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、介紹:
什么是附加數據(overlay)摘自Lenus大神 實際當中的overlay 其實,overlay雖然大家在脫殼當中覺得很陌生,但是他離我們并不遙遠。在我們平時使用的軟件當中,有一些軟件要處理一些數據流文件,比如 winamp。當我們下載了mp3文件(數據文件),沒有播放器是不可能播放的,與此相關的還有很多,比如txt文件和notepad的關系也差不多。而這些數據文件被單獨的保存在硬盤上,當我們使用notepad的打開功能的時候,就可以去讀取數據文件里面的東西了。 ? overlay又是什么意思呢? 他其實真正的意思就是取消打開功能,將這些需要讀取的數據放到pe文件的后面,讓程序自動的運行打開的功能。這樣的功能就變成了一個notepad的程序對應只能打開一個文件。 ? 最典型的就是一些軟件可以把一些數據流文件生成exe文件,比如一些mp3生成器,flash生成器,以及我們用來做動畫的S-demo。他們的作用就是將數據對pe進行捆綁。(這樣做的結果也就是為什么我們對這些文件用UPX等pe壓縮工具卻不能壓縮他的原因 在我們對pe文件的overlay進行分析,普及一下文件映射的知識。在pe里面,有所謂的文件偏移RA,文件偏移大小RS和與其對應的虛擬地址偏移VA,虛擬地址偏移大小VS。
我們要深刻的理解以上的概念不是我這篇文章能說清楚的,但又是搞overlay必須得弄清楚的,于是我簡單的說明一下。
在我們的磁盤上的pe文件里面,排列著的數據在運行的時候將被影射到內存空間。他們將被怎么映射呢?舉個例子:

例1:

一個pe文件中只有兩個區段(pe head不算)
第一個區段是.text VA=401000 VS=1000RA=200 RS=100
第二個區段是.data VA=402000 VS=1000RA=300 RS=100
假設我們打開winhex看到在文件偏移300處的情況是這樣的:
RA=2FF 處的數據是12RA=300處的數據是34

現在當pe文件裝到內存中,那么會出現什么結果呢。
1.文件偏移中的200開始的100個字節將被影射到內存的401000開始的100個字節,后面的F000個字節將用0填充。
2.文件偏移中的300開始的100個字節將被影射到內存的402000開始的100個字節,后面的F000個字節將用0填充。

也就是說,在磁盤是上相鄰的兩個數據12和34,在內存空間中將分開得老遠,12在40102FF處,而34卻在402000處。

當然這只是我自己隨便舉的一個極端的例子,實際上由于文件的對齊機制在磁盤上每個段的結束都是填充了大量的0

為什么要講這些
因為區段是一般將會被映射到內存的,如果上面的例子中。將.data區段去掉。那么在磁盤上就將會留下從RA=300到RA=400其大小為100的數據,不會被影射到內存中。而這部分數據就將被認為是附加數據-overlay。 ? 二、實戰 【加殼方式】: UPX Inliner v1.0 by GPcH 【使用工具】: OllyDbg ? ?? ?? ?? ???PEID ? ?? ?? ?? ???Lord PE ? ?? ?? ?? ???WinHex ? ?? ?? ?? ???Imp Rec ? ?? ?? ?? ???Hex Wrokshop v6.5.1 【聲明】: 主要展現脫殼后附加數據的快速解決,沒有其他目的。?? ①、PEID看一下殼 ②、DetectItEasy V1.0看一下什么編譯器 然鵝,PE區段被改了,并看不出來 既然是UPX的殼,按照之前的文章步驟,脫殼吧 1、載入OD 2、 很明顯是UPX的殼,ESP定律走起~~(單步跟蹤、模擬跟蹤都可以的) ? 3、F8單步往下走,F9運行程序,F8單步走,走, 4、 來到這,熟悉吧,右鍵分析-從模塊中刪除分析 ? 5、 來到了熟悉的OEP,對照oep看一下是什么語言 ? 6、 ? ?Vc++ 6.0的編譯器 ? 7、到達oep之后,下一步來脫殼 8、 復制oep,3831,再用Lordpe脫殼 ? 9、 修正鏡像大小,在轉存一下。 ? 10、 再用??修復,不管能不能運行都得修復一下 ? 11、修復完成后看一下殼子,打開程序運行一下 ? 12、顯示是vc++6.0,說明程序已經脫殼完成了 13、運行一下 14、OH!Shit!! 15、不出所料,因為剛開始就出現了這個東西 敲黑板!!!! 1、overlay只是數據它是不映射到內存的,它將被程序以打開自己的方式來讀取數據 2、只要不是區段里面包括的文件的大小,將被視為overlay. ? 那怎么辦呢,重點來了。。。。。。。。。。。。。 1、神器winhex 2、? 這個東西 3、將未脫殼的程序放進去 4、 ? 5、首先,把滑輪拖到最底部,依次往上找,找到第一處很多00的地方 6、 ? 7、選擇00結束第一個字符(alt+1)到末尾最后一個字符(alt+2) 8、 ? 9、復制下來,關閉,拖入脫殼完成的文件 10、一直拉到最后,也是00很多的地方 11、 ? 12、在末尾粘貼未脫殼程序的那段 13、 ? 14、保存文件到脫殼后修復的文件 15、 ? 16、有的在win7/xp情況下保存完成后可能會出錯,版本不同 17、這是推薦使用Hex workshop ,使用方法與winhex一樣,在吾愛破解工具包里都有 18、? 運行試一下,無錯誤提示即可 使用lordpe,用PE編輯器打開加殼程序 依次打開區段,看到區段表 ? ☆【重要屬性介紹】 (1)Name :?這是一個8位的ASCII(不是Unicode內碼),用來定義塊名,多數塊名以.開始(如.Text),這個.實際上不是必需的,注意如果塊名超過了8個字節,則沒有最后面的終止標志NULL字節,帶有$的區塊的名字會從編譯器里將帶有$的相同名字的區塊被按字母順序合并。 (2) VirtualSize:?指出實際的,被使用的區塊大小,是區塊在沒有對齊處理前的實際大小.如果VirtualSize > SizeOfRawData,那么SizeOfRawData是可執行文件初始化數據的大小 (SizeOfRawData?– VirtualSize)的字節用0來填充.這個字段在OBJ文件中被設為0. (3)VirtualAddress:?該塊時裝載到內存中的RVA,注意這個地址是按內存頁對齊的,她總是SectionAlignment的整數倍,在工具中第一個塊默認RVA為1000,在OBJ中為0。 (4)SizeofRawData:?該塊在磁盤中所占的大小,在可執行文件中,該字段包括經過FileAlignment調整后塊的長度。例如FileAlignment的大小為200h, 如果VirtualSize中的塊長度為19Ah個字節,這一塊保存的長度為200h個字節. (5) PointerToRawData:?該塊是在磁盤文件中的偏移,程序編譯或匯編后生成原始數據,這個字段用于給出原始數據塊在文件的偏移,如果程序自裝載PE或COFF文件(而不是由OS裝載),這種情況,必須完全使用線性映像方法裝入文件,需要在該塊處找到塊的數據。 雖然編譯器自動產生一系列標準的區塊,我們可以創建和命名自己的區塊,在VC++中可以使用: #pragma data_seg(“My_DATA”) 編譯器有個很搞笑的特征,看見兩個區塊相似的屬性的區塊,那么連接時就合并成一個區塊,這個取決于是否用/merge開關 /merge .rdata = .text 我們只需要ROffset和Rsize,計算一下這兩個塊的大小 400+C600=CA00? ?? ?(16進制下) 我們把未脫殼的程序放入HexWorkshop,CTRL+G轉到CA00處 l? ?C9 F6加上 10個字節 l? ?CA 04減去 4個字節 所到達的地方都是CA 00 就來到我們之前往上找到00末尾的位置 從A5開始,一直到最后復制下來 打開脫殼之后修復的文件,拖入HEXWORKSHOP 在最后末尾處,粘貼剛剛復制的代碼 最后,保存一下,備份點一下,打開程序看一下能否正常運行。OK,數據處理完畢 最后看一下殼子 殼子已經脫掉,顯示附加數據不用管,之后載入od,看一下oep 具體原理研究可以去尋找Lenus大神的《淺談脫殼中的附加數據問題(overlay)》和《PE文件中區段的詳細分析?》這兩篇文章 ? 總結: 1.簡單介紹什么是附加數據 2.overlay又是什么意思 3.文件映射知識 4.回顧ESP定律 5.Winhex、HEXWORKSHOP使用方法 6.兩種方法附加數據的處理 7.區段表小姿勢 附件我打包了:點擊查看

轉載于:https://www.cnblogs.com/ichunqiu/p/7262952.html

總結

以上是生活随笔為你收集整理的逆向脱壳附加数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。