逆向破解程序脫殼篇-壓縮殼


一、普及
What
所謂“殼”就是專門壓縮的工具。 
   這里的壓縮並不是我們平時使用的RAR、ZIP這些工具的壓縮,殼的壓縮指的是針對exe、com、和dll等程序文件進行壓縮,在程序中加入一段如同保護層的代碼,使原程序文件代碼失去本來面目,從而保護程序不被非法修改和反編譯,這段如同保護層的代碼,與自然界動植物的殼在功能上有很多相似的地方,所以我們就形象地稱之為程序的殼。


WHY  對程序專門進行壓縮,以減小文件大小,方便傳播和儲存。
② 我這是一個商業的程序,是用來賺錢的,怎么可以被別人破解呢,那我就是加密保護殼(Safengine、VMprotect、winlicense、Themida)保護程序不被非法修改和反編譯。
③ 其他(病毒、木馬加殼,Anti-AntiVirus)
 
DO?
脫殼
就是把保護殼去掉更好的調試和破解能清楚看到代碼

OEP
程序的入口點如果我們找到OEP我們就能快速脫殼就類似於找到鑰匙就能開門
殼就是一把鎖OEP就是鎖孔
 
IAT
IAT就是指針脫殼的話可能要修復指針如果沒有指針就相當於人只有一個身體沒有靈魂
殼可能會對指針進行處理修復輸入表就是修復IAT
段首和段尾
段首,是上一段的結尾也是下一段的開頭一段是以retn開始和retn結尾。我們經常聽到在段首下斷所以我們要找的就是retn下面第一個push ,段首是以push開始滴所以我們不會在retn那里下段而段尾我們是在retn處下斷因為軟件的子程序是以retn返回到某一地方所以返回的時候要在retn出下斷。
 
二、准備知識
ESP定律的原理就是“堆棧平衡”原理。
1、在命令行下斷hresp-4(此時的ESP就是OD載入后當前顯示的值)
2、hrESP(關鍵標志下一行代碼所指示的ESP值(單步通過))
CALL
1.向堆棧中壓入下一行程序的地址;
2.JMP到call的子程序地址處。
 
RETN
call對應的就是RETN了。對於RETN我們可以這樣來理解:
1.將當前的ESP中指向的地址出棧;
2.JMP到這個地址
 
三、開始
工具:
①、peid
②、OD
③、DetectItEasy
④、LordPE
⑤、ImportREC
 
 esp定律
1.F8,觀察OD右上角寄存器中ESP有沒有實現(紅色)
2.命令行下 DD ******(當前代碼ESP值),回車
3.DD就選中下端地址,斷點—硬件訪問—DWORD斷點,F9運行,到跳轉處按F8 OEP

1PEID先看程序的殼
 
2ASPACK的殼子屬於壓縮殼的一種

 

3、用DetectItEasy V1.0看一下編譯器為Delphi
看一下delphi的oep

 

4、之后,載入od
 

 


 

5、選擇是否都可以的

 


 

這是帶殼的.
6f8單步往下走

 


 

7\ESPEIP都變成紅色(實現)的時候,在ESP上右鍵下ESP斷點
 

 

8、下完斷點,F9運行程序

 

 
9、之后F8單步往下走,一直走

 

 
10、到達OEP,右鍵-OD脫殼調試進程
 

 

11、復制紅框里面的oep,(9C25C之后關閉這個框,OD最小化
12、打開loadpe

 

13、選擇剛剛的程序進程--修復鏡像大小-完全轉存

 

 
14、轉存后打開會出現這樣的結果

 

 
15、然后再用ImportREC修復

 

 
16、點選剛剛的進程
17、把之前復制的OEP放到1里面,按序號依次點擊
 

 

18、修正轉儲剛剛導出的那個

 

19、脫殼完成...
之后放到原目錄下運行即可
三、內存鏡像法
內存鏡像法找oep
1.OD載入軟件
2.點選項—調試選項—忽略全部—CTRL+F2重載
3.ALT+N打開內存鏡像,找程序第一個.rsrcF2下斷—SHIFT+F9運行到斷點,再打開找到程序第一個.rsrc上面的.code處(就是00401000處),F2下斷—SHIFT+F9或無異常按F9,到OEP
1、載入DO之后,alt+m

 

 
2、在程序的資源處下內存訪問斷點

 

 

 
3、返回程序按F9運行程序,也可以用快捷鍵SHIFT+F9運行程序
界面是這個樣子的

 

 
4ALT+M返回,在代碼段下內存訪問斷點

 

5SHIFT+F9運行程序

 

 
6、直接到達OEP,按照之前的方法脫殼就可以了
7、OD自帶的插件即可脫殼
 
單步跟蹤法
1.OD載入,不分析代碼。
2.CALLF7,遠CALLF8,實現向下的跳轉。
3.有回跳處,下一句代碼處—F4 (右鍵—代碼斷點運行到所選)
4.大的跳轉(大跨段,JMP***JE***RETN),很快就會到OEP
 
 
最后一次異常
1.OD打開—點選項—調試選項—去掉所有異常—CTRL+F2重載.
2.SHIFT+F9.只到程序運行,記下次數M
3.CTRL+F2重載—按SHIFT+F9(次數為M-1次)
4.CTRL+G—輸入OE右下角的SE句柄前的地址.
5.F2下斷—SHIFT+F9到斷點處.
6.去斷按F8,到OEP.
 
OEP大全
 
 
 
 
常用脫殼工具: 
1、文件分析工具(偵測殼的類型):Fi,GetTyp,peid,pe-scan, 
2、OEP入口查找工具:SoftICE,TRW,ollydbg,loader,peid 
3、dump工具:IceDump,TRW,PEditor,ProcDump32,LordPE 
4、PE文件編輯工具PEditor,ProcDump32,LordPE 
5、重建Import Table工具:ImportREC,ReVirgin 
6、ASProtect脫殼專用工具:Caspr(ASPr V1.1-V1.2有效),Rad(只對ASPr V1.1有效),loader,peid
 
 
總結:
1、介紹了什么是壓縮殼,什么是加密殼
2、脫殼原理
3、脫殼常用的工具
4、4種脫殼方法及修復
5、各種語言OEP特征
6、壓縮殼這幾種方法幾乎夠用了,如果出現冷門殼,用這些方法脫不掉,可以用之間說的打補丁的方法。
現在壓縮殼都有很多自動脫殼機,但是加密殼呢?學習手工脫殼不是為了單純去學怎么脫這一種殼,學習的是技巧,以后遇到其他的沒有脫殼機的殼要嘗試手工去脫,就像一個網站注入點,你可以用sqlmap去注入,如果有waf呢?Sqlmap腳本繞不過去呢?不還得靠手工去試,工具是死的,人是活的.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM