http://drops.wooyun.org/tips/8296文中提到了脫殼七大法,然而實際上我有八大法!而網上的那些教程都是你復制我的,我復制你的,千篇一律。朋友看了之后,依然不懂~
那篇文章中有UPX脫殼筆記,tElock脫殼筆記,PEncrypt脫殼筆記.但是我認為應該詳細介紹八大法脫殼。因為他提到的所有這種脫殼筆記,都是利用八大法脫的!每一種殼都可以用很多種方法來脫掉,所以應該介紹的應該是脫殼大法,而不是xxx殼應該用xxx方法來脫,授人以魚不如授人以漁。SO,有了這篇教程~
我可以保證:八種脫殼大法學會之后,你將能脫掉市面上70%以上的殼。其實脫殼并不需要捧著本匯編的書去學一遍匯編才能脫殼。
大家應該先明白“殼”的概念。在自然界中,我想大家對"殼"這東西應該都不會陌生了,植物用它來保護種子,動物用它來保護身體等等。同樣,在一些計算機軟件里也有一段專門負責保護軟件不被非法修改或反編譯的程序。它們一般都是先于程序運行,拿到控制權,然后完成它們保護軟件的任務。就像動植物的殼一般都是在身體外面一樣理所當然(當然后來也出現了所謂的“殼中帶籽”的殼)。由于這段程序和自然界的殼在功能上有很多相同的地方,基于命名的規則,大家就把這樣的程序稱為“殼”了。就像計算機病毒和自然界的病毒一樣,其實都是命名上的方法罷了。
脫殼用處很大,可以破除殼程序對程序的保護。從而使我們更接近程序代碼,了解這個程序。或者像我這種改版權小王子來說,只有脫了殼才能改版權!而對于免殺制作者來說, 幫助木馬病毒進行免殺,我們可以直接加殼免殺,也可以脫殼對其代碼進行修改從而躲過殺毒軟件的查殺。
首先,我們還得回顧上位大神寫的
OEP:(Original Entry Point),程序的入口點。軟件加殼一般隱藏了程序真實的OEP(或者用了假的OEP), 我們需要尋找程序真正的OEP,才可以完成脫殼。
一般加殼程序在使用Ollydbg等動態調試工具時,會停在殼的預處理塊。即處在對于程序原始代碼塊的解壓或解密操作之前,在運行完程序自脫殼模塊后,會停留在程序加殼之前的OEP位置,此時是dump程序的最佳時期。脫殼時在真實OEP處下int3斷點,就可以捕捉到程序代碼段完全恢復的狀態。因此,尋找加殼程序的正確OEP,也成了手動脫殼時的第一要務。
OEP:Original Entry Point(程序入口點) ,程序加殼前真正的入口點。 那么,我給大家準備了OEP特征大全!
IAT:(Import Address Table),導入地址表。由于導入函數就是被程序調用但其執行代碼又不在程序中的函數,這些函數的代碼位于一個或者多個DLL中。當PE文件被裝入內存的時候,Windows裝載器才將DLL 裝入,并將調用導入函數的指令和函數實際所處的地址聯系起來(動態連接),這操作就需要導入表完成。其中導入地址表就指示函數實際地址。 多數加殼軟件在運行時會重建導入地址表,因此獲取加殼程序正確的導入地址表也是手動脫殼操作中的一個關鍵問題。
下面是我對八大法脫殼的實例的詳細講解。
查殼(PEID、FI、PE-SCAN)-->尋找OEP(OD)-->脫殼/Dump(LordPE、PeDumper、OD自帶的脫殼插件、PETools)-->修復(Import REConstructor)
查殼 很經典的UPX殼
我們一般要制作過狗菜刀的必經之路,那只有脫殼才能修改里面的東西!
一般在有殼的時候,用OD載入,會彈出以下提示框
那么我們在這里選擇否就是了!
首先要記住幾個快捷鍵:F8單步步過,F7單步步入,F4運行到選定位置
載入程序之后使用F8單步向下跟蹤,實現向下的跳。當遇到有一條紅色的向上的跳轉的時候(紅色為跳轉已實現,白色為跳轉未實現。),如果再繼續按F8會一直在這里循環。那么我們可以在它的下面那一行按下F4(運行到選定位置)這樣就不會一直循環了,因為我這里有連續兩個向上的跳轉,所以應該跳過這兩個循環,所以我們用鼠標選中下一行
004B055C 8B02 mov eax,dword ptr ds:[edx]
這一行按下F4來進行繼續的向下操作。
其實很簡單,就這樣上面這個方法一直按F8,遇到向上的跳轉就按F4,到達OEP之后就能進行脫殼了。
這就是中國菜刀的OEP,跟上面的OEP大全對比一下。VC++6.0的程序!
(圖中為馬上就要到達OEP了),遇到在popad指令下的遠轉移指令時,要格外注意,因為這個遠轉移指令的目的地很可能就是OEP。 或者有很大的跳轉(大跨段),可以看到jmp的那一行
004B0634 - E9 073EFBFF jmp caidao.00464440
當前地址004B0634跳轉到 00464440,那么這就是一個大跳轉,跳轉的目的地很大的可能就是OEP
如果(我說的是如果)剛載入程序,在附近就有一個CALL的,我們就F7跟進去,不然程序很容易使程序運行起來(跑飛),運行起來了話,我們就不能繼續執行下面的操作了。新例子:
如果(我說的是如果)在跟蹤的時候,如果運行到某個CALL程序就讓程序運行起來了,就在這個CALL中F7進入,然后繼續F8,遇到向上的跳轉就按F4。
到達OEP就完了嗎?
還沒開始脫殼呢~~http://drops.wooyun.org/tips/8296文中介紹了用 LordPE脫殼,當然用LordPE脫殼是極好的,那么我就先用OD自帶的脫殼調試進程來就行脫殼吧,以后再講LordPE脫殼。
在這里需要注意的是重建輸入表和不重建輸入表,其他的都為默認。
首先選擇重建輸入表點擊脫殼,命名為1.exe
然后選擇不重建輸入表點擊脫殼,命名為2.exe
因為我們不知道需不需要重建輸入表,所以就進行兩次脫殼。
1.exe運行正常, 2.exe運行錯誤
再看一下1.exe有沒有殼,ok,沒有殼了!
注:如有不懂歡迎私信!