麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 邏輯算法 > 正文

第四節 手動脫殼

2019-09-10 09:02:25
字體:
來源:轉載
供稿:網友

 
1、基本知識
  手動脫就是不借助自動脫工具,而是用動態調試工具SOFTICE或TRW2000來脫。這課談談一些入門方面的知識,如要了解更深的脫知識,請參考《脫高級篇》這課。

工具

*調試器:SoftICE 、TRW2000
*內存抓取工具:Procdump等;
*十六進制工具:Hiew、UltraEdit、Hex Workshop等;
*PE編輯工具: Procdump、PEditor等;


名詞概念

★PE文件:Microsoft設計了一種新的文件格式Portable Executable File Format(即PE格式),該格式應用于所有基于Win32的系統:Windows NT、Windows 2000、Win32s及Windows 95/98。

★基址(ImageBase ):是指裝入到內存中的EXE或DLL程序的開始地址,它是Win32中的一個重要概念。 在Windows NT中,缺省的值是10000h;對于DLLs,缺省值為400000h。在Windows 95中,10000h不能用來裝入32位的執行文件,因為該地址處于所有進程共享的線性地址區域,因此Microsoft將Win32可執行文件的缺省基地址改變為400000h。

★RVA:相對虛擬地址(Relative Virual Address),是某個項相對于文件映象地址的偏移。例如:裝載程序將一個PE文件裝入到虛擬地址空間中,從10000h開始的內存中,如果PE中某個表在映像中的起始地址是10464h那么該表的RVA就是464h。虛擬地址(RVA)=偏移地址+基址(ImageBase )

★Entry Point:入口點,就是程序在完成了對原程序的還原后,開始跳轉到剛還原的程序執行,此時的地址就是入口點的值。

步驟

★確定的種類

一般拿到軟件后,可用工具FileInfo、gtw、TYP32等偵測文件類型的工具來看看是何種,然后再采取措施。

★入口點(Entry Point)確定

對初學者來說定位程序解后的入口點確定較難,但熟練后,入口點查找是很方便的。 決大多數 PE 加程序在被加密的程序中加上一個或多個段。 所以看到一個跨段的 JMP 就有可能是了。如:UPX 用了一次跨段的 JMP , ASPACK 用了兩次跨段的 JMP 。 這種判斷一般是跟蹤分析程序而找到入口點,如是用TRW2000也可試試命令:PNEWSEC,它可讓TRW2000中斷到入口點上。
PNEWSEC:運行直到進入一個 PE 程序內存的新的 section時產生斷點。(如不懂,以后到脫高級篇自會明白)

另外也可用D.boy的沖擊波2000它能輕易的找到任何加密的入口點,

★dump取內存己還原文件

找到入口點后,在此處可以用 Procdump的FULL DUMP功能來抓取內存中整個文件,
如是用TRW2000也可用命令:

makepe命令含義:從內存中整理出一個指令名稱的PE格式的exe文件, 當前的 EIP 將成為新的程序入口,生成文件的 Import table 已經重新生成過了。生成的PE文件可運行任何平臺和微機上。

pedump命令含義:將PE文件的內存映像直接映像到指定的文件里。生成的文件只能在本機運行,不能在其它系統平臺或微機運行。


★修正剛dump取的文件

如是用 Procdump的FULL DUMP功能脫的文件,要用 Procdump或PEditor等PE編輯工具修正入口點(Entry Point)。

2、UPX V1.01的

目標程序: 用 UPX V1.01壓縮過的Notepad.exe


方法一、使用TRW2000來脫

★使用工具

TRW2000
FileInfo


★確定的種類

拿到這軟件后,可用工具FileInfo、gtw、TYP32等偵測文件類型的工具來看看是何種軟件壓縮的,在這我們以FileInfo 為例,把目標文件復制到FileInfo目錄下,在資源管理器下雙擊FileInfo,再按回車,你將看到報告出來:告訴你這是UPX1.01壓縮的軟件

★入口點(Entry Point)確定

◇利用跟蹤分析來確定入口點

決大多數 PE 加程序在被加密的程序中加上一個或多個段。 所以看到一個跨段的 JMP 就有可能是了。 UPX 用了一次跨段的 JMP 。 就是你一步步跟蹤時會看到代碼有一突躍,一般再跟據領空文件名的變化,就能確定入口點了。運行TRW2000并裝載目標程序,然后LOAD你將中斷在主程序入口處:此時合理按F10、F7及F12一直向前走,注意此時領空會是:NOTUPX!UPX1+2xxx.

在你跟蹤過程中會出現如下代碼

該程序的具體情況如下:

XXX:XXXXXXXX 60 PUSHAD ;所有的寄存器進棧
XXX:XXXXXXXX BE2EFD4200 MOV ESI XXXXXXXX ;將下一條指令送入進行解壓
XXX:XXXXXXXX 8DBED21FFDFF LEA EDI [ESI+XXXXXXXX]

.......
....... <---- 按F10跟蹤 ;-P
XXX:XXXXXXXX FF96A8C90400 CALL [ESI+XXXXXXXX]
XXX:XXXXXXXX 61 POPAD ;所有寄存器出棧
XXX:XXXXXXXX E9A44AFBFF JMP 00401000 ;跳到程序真正入口點(OEP),文件完全解壓。


0137:40ddbe popa
0137:40ddf jmp 00401000 <-此行己完全解壓結束,將要跳到記事本程序入口點執行程序(注意此處的一個大的突躍)。
........................
0137:401000 push ebp <-完全解壓后的記事本程序第一行

因此入口點(Entry Point)找到為:401000

◇利用TRW2000特有命令PNEWSEC

TRW2000也是一款優秀的脫工具,有許多特有的命令對脫很有幫助,在此時用PNEWSEC命令也可方便找到入口點。
運行TRW2000并裝載目標程序,然后LOAD你將中斷在主程序入口處,下令:PNEWSEC
等上一段時間,程序將中斷在入口點處。

◇用沖擊波2000

沖擊波2000是D.boy開發的一個專門查找加軟件入口點的工具,先運行沖擊波2000,點擊Track按鈕:開始進行跟蹤,然后運行要跟蹤的程序, 找到入口點后,會在Enter point 顯示。可是用這個記事本程序卻無效。

★dump取內存中己脫的文件

不管你用何種方法找到入口點,首先要來到入口點一行:

0137:401000 push ebp

執行命令makepe 路徑/文件名或pedump 路徑/文件名

就這樣脫成功。

注:TRW2000的makepe重建的PE文件可跨平臺運行,pedump抓取的文件卻不可。

方法二、用SOFTICE來脫

★使用工具

TRW2000
FileInfo
ProcDump

★入口點(Entry Point)確定

◇利用跟蹤分析來確定入口點

方法同TRW2000。

★dump取內存中己脫的文件

0137:40ddf jmp 00401000
現在這一行鍵入以下命令:
a eip (然后按回車)
jmp eip (然后按回車)
按下F5

這樣將改變0137:40ddf行的代碼. 你會注意到在鍵入"jmp eip"并按下回車后40ddf的指令現在是一個jmp.這將有效地使程序"暫停"(有點類似TRW2000的suspend命令). 按下F5使你回到window。

運行ProcDump,在Task的列表中的第一個list上點擊鼠標右鍵然后選擇"Refresh list". 在Task列表中找到notepad.exe在它的上面點擊鼠標右鍵. 然后選中"Dump (Full)"給脫的程序起名存盤. 再在notepad.exe上點擊鼠標右鍵然后選中"Kill Task".

注:用此方法抓取的文件不可跨平臺運行。

★修正剛dump取的文件的入口點

的notepad.exe程序入口是00401000.
再次使用ProcDump的PE Editor功能 打開已脫的notepad.exe.

在"Header Infos"一項 你會看見程序Entry Point(入口值)是0000DC70這當然是錯誤的. 如果你試著不改動這個入口值而運行脫后的notepad.exe程序將無法運行.

在 Procdump可看到ImageBase =00400000我們上面跟蹤找到的入口值的RVA是00401000,因為:虛擬地址(RVA)=偏移地址+基址(ImageBase ),因此

Entry Poin=00401000-00400000=1000改變入口值為1000點擊"OK".

現在 運行脫后的notepad.exe吧它應該正常運行了。

3、Shrinker v3.4 的

英文原作: Etenal Bliss
電子郵件: [email protected]
作者網址:http://crackmes.cjb.net
http://surf.to/crackmes
寫作日期: 2000年2月25日
中文翻譯: ****
翻譯日期: 2000年3月14日

目標程序: 用Shrinker v3.4壓縮過的Notepad.exe

******************************************************************
****注:
1. Notepad.exe就是Windows自帶的寫字板程序相信大家的機器中都會有.
2. Shrinker v3.4可以http://w3.to/protools下載這里你可以找到你
想要的幾乎所有的工具.
******************************************************************

使用工具:
ProcDump
Softice
Symbol Loader (****注:這個是Softice自帶的用過Softice的應該知道)

破解方法:
手動脫

教學目的:
教你手動脫的基本技術
__________________________________________________________________________

關于這個教程

這是我打算寫的*簡單*的脫系列教程的第一篇. 目標程序是notepad.exe在大多數
電腦中都有它. 因為我還不能很好地解釋脫中的一些問題我只能盡我所能向你們
展示簡單的方法. 至于高級的方法你們必須去讀別的教程.
_________________________________________________________________________


使Softice中斷于程序入口處

用Symbol Loader打開已壓縮的notepad.exe.

點擊Symbol loader任務條上的第二個圖標當你把鼠標移到圖標上時在Symbol Loader
窗口底部提示行你會見到"Load the currently open module"的字樣

你將得到一條出錯信息并問你是否盡管出錯還是要裝入這個exe文件. 點擊"Yes".

假如Softice已經運行的話 它應該在程序的入口處中斷.可是它并沒有中斷壓縮過的
notepad.exe直接就運行了.

該到改變characteristics of the sections的時間了...
通過改變characteristics 你可以使Softice中斷于程序入口.

用ProcDump裝入壓縮過的notepad.exe (使用PE Editor)
你會看到這個以"PE Structure Editor"作為標題的窗口.
點擊稱作"Sections"的按鈕.

你將得到另一個以"Sections Editor"做標題的窗口.
你會見到壓縮過的notepad.exe的不同sections.

第一個是 .shrink0 它的characteristics是C0000082.
改變characteristics: 鼠標左鍵點擊.shrink0再點擊右鍵并選擇edit section.

你將得到另一個窗口它用'Modify section value" 作標題.
把Section Characteristics由C0000082改為E0000020.
一路按OK直到你回到ProcDump的主窗口.
你現在可以把ProcDump放在一邊了.

**我愿意多作解釋為什么必須這樣做但我沒這個能力. 8P
你也許要讀些PE結構的資料來找到原因.
別人教我說 E0000020將使section成為可執行的因此Softice將會中斷于入口處

找到程序真正入口并進行脫

現在 希望你沒有關閉symbol loader. 假如你關掉的話重新運行它打開并裝入已
壓縮的notepad.exe

當你這次點擊"Yes"時 你會發現你已在進入Softice中了...
我把下面的代碼貼出來并加上注解.

************************* 你在SICE中所見到的 *************************

**Softice中斷時你會在這兒. 一直按F10走過這部分代碼

0041454F FFFF INVALID
00414556 55 PUSH EBP
00414557 8BEC MOV EBPESP
00414559 56 PUSH ESI
0041455A 57 PUSH EDI
0041455B 756B JNZ 004145C8 (NO JUMP)
0041455D 6800010000 PUSH 00000100
00414562 E8D60B0000 CALL 0041513D
00414567 83C404 ADD ESP04
0041456A 8B7508 MOV ESI[EBP+08]
0041456D A3B4F14000 MOV [0040F1B4]EAX
00414572 85F6 TEST ESIESI
00414574 7423 JZ 00414599 (JUMP)
00414599 33FF XOR EDIEDI
0041459B 57 PUSH EDI
0041459C 893D8C184100 MOV [0041188C]EDI
004145A2 FF1510224100 CALL [KERNEL32!GetModuleHandleA]
004145A8 8BF0 MOV ESIEAX
004145AA 68FF000000 PUSH 000000FF
004145AF A1B4F14000 MOV EAX[0040F1B4]
004145B4 897D10 MOV [EBP+10]EDI
004145B7 C7450C01000000 MOV DWORD PTR [EBP+0C]00000001
004145BE 50 PUSH EAX
004145BF 56 PUSH ESI
004145C0 FF15F4214100 CALL [KERNEL32!GetModuleFileNameA]
004145C6 EB03 JMP 004145CB (JUMP)
004145CB E830EAFFFF CALL 00413000
004145D0 FF7510 PUSH DWORD PTR [EBP+10]
004145D3 FF750C PUSH DWORD PTR [EBP+0C]
004145D6 56 PUSH ESI
004145D7 E806000000 CALL 004145E2

**當你走過這個位于004145D7的CALL 壓縮過的notepad.exe就自由運行了. 再次用
symbol loader裝入. 再次來到這個CALL時 按F8追進去. 你將看到以下代碼. 不
過記著先BPX 004145D7.

004145E2 64A100000000 MOV EAXFS:[00000000]
004145E8 55 PUSH EBP
004145E9 8BEC MOV EBPESP
004145EB 6AFF PUSH FF
004145ED 6810E04000 PUSH 0040E010
004145F2 68EC5D4100 PUSH 00415DEC
004145F7 50 PUSH EAX
004145F8 64892500000000 MOV FS:[00000000]ESP
004145FF 83EC14 SUB ESP14
00414602 C745E401000000 MOV DWORD PTR [EBP-1C]00000001
00414609 53 PUSH EBX
0041460A 56 PUSH ESI
0041460B 57 PUSH EDI
0041460C 8965E8 MOV [EBP-18]ESP
0041460F C745FC00000000 MOV DWORD PTR [EBP-04]00000000
00414616 8B450C MOV EAX[EBP+0C]
00414619 83F801 CMP EAX01
0041461C 7510 JNZ 0041462E (NO JUMP)
0041461E E886030000 CALL 004149A9
00414623 FF05C0F14000 INC DWORD PTR [0040F1C0]
00414629 E882F6FFFF CALL 00413CB0
0041462E 8B35C0F14000 MOV ESI[0040F1C0]
00414634 85F6 TEST ESIESI
00414636 0F848D000000 JZ 004146C9 (NO JUMP)
0041463C 833DC4F1400000 CMP DWORD PTR [0040F1C4]00
00414643 7526 JNZ 0041466B (NO JUMP)
00414645 833D6417410000 CMP DWORD PTR [00411764]00
0041464C 741D JZ 0041466B (NO JUMP)
0041464E A164174100 MOV EAX[00411764]

**EAX現在的值是000010CC

00414653 030588184100 ADD EAX[00411888]

**EAX現在的值是004010CC

00414659 8945DC MOV [EBP-24]EAX

**[EBP-24]現在含的是004010CC

0041465C FF7510 PUSH DWORD PTR [EBP+10]
0041465F FF750C PUSH DWORD PTR [EBP+0C]
00414662 FF7508 PUSH DWORD PTR [EBP+08]
00414665 FF55DC CALL [EBP-24]

**假如你追過最后這個CALLnotepad.exe將再次自由運行.
由上得知 既然[EBP-24] = 004010CC 最后這句代碼就意味著壓縮過的程序在
CALL 004010CC. 如果你追進這個CALL 你會發現notepad.exe很快就會運行了.

假如你曾經追過更多shrinker v3.4壓縮的程序 你總會見到這個"CALL [EBP-24]".
所以 程序實際上正在進入已脫的程序的真正入口.

再次裝入壓縮過的notepad.exe中斷之后按F5你將中斷于004145D7行(這里你原來
設過斷點). 追進去直到你到達00414665行這里程序正要進入已脫程序的真正入口.

現在鍵入以下命令:
a eip (然后按回車)
jmp eip (然后按回車)
按下F5

這樣將改變00414665行的代碼. 你會注意到在鍵入"jmp eip"并按下回車后00414665的
指令現在是一個jmp.這將有效地使程序"暫停". 按下F5使你回到window你就可以dump
已經脫的程序到你的硬盤了.

現在又要用ProcDump了在Task的列表中的第一個list上點擊鼠標右鍵然后選擇"Refresh
list". 在Task列表中找到notepad.exe在它的上面點擊鼠標右鍵.
然后選中"Dump (Full)"給脫的程序起名存盤.
再在notepad.exe上點擊鼠標右鍵然后選中"Kill Task".

_________________________________________________________________________

改動程序入口值

如果你記得的話 脫的notepad.exe程序入口是004010CC.
再次使用ProcDump的PE Editor功能 打開已脫的notepad.exe.

在"Header Infos"一項 你會看見程序入口值是0001454F這當然是錯誤的. 如果你試著
不改動這個入口值而運行脫后的notepad.exe程序將無法運行.

改變入口值為Entry Poin=004010CC-基址(ImageBase )點擊"OK".

現在 運行脫后的notepad.exe吧它應該正常運行了. 8)

__________________________________________________________________________


最后的說明

這篇教程是為所有和我一樣的newbies而作.

我感謝和感激:

MiZ. 從他那里我學會了脫的基本技巧.

所有破解教程和CrackMe的作者以及所有一直支持我的網站論壇的Cracker們.

4、ASPack v1.083

壓縮文件:下載

如用TRW2000調試,裝載后,下命令:pnewsec就可中斷到入口點。為了提高跟蹤水平,下面以SOFTICE為例,講述跟蹤過程。

_________________________________________________________________________

尋找程序的入口點( Entry Point)


用Symbol Loader打開Notepad-ASPACK.exe,點擊Symbol loader的第二個圖標("Load the currently open module")

如SOFTICE 裝載成功,它應中斷在起始程序入口處。


當跟蹤時,你會經過許多條件跳轉指令及循環指令,要用點技巧跳出這些圈子,其形式一般這樣:

*************************************
aaaaaaaa
...
wwwwwwww
xxxxxxxx JNZ zzzzzzzz <-- 循環返回到aaaaaaaa
yyyyyyyy JMP aaaaaaaa
zzzzzzzz 新的指令

如果你跟蹤時,你將跳轉到 aaaaaaa處多次,你可將光標移到 zzzzzzzz一行,按F7讓指令直接跳到此處,可省不少時間。
*************************************


在跟蹤過程會來到:
167:0040D558 POPAD
0167:0040D559 JNZ 0040D563 (JUMP)
0167:0040D55B MOV EAX00000001
0167:0040D560 RET 000C
0167:0040D563 PUSH EAX<--EAX的值就是入口點的值=4010CC
0167:0040D564 RET <--返回到記事本的真正的入口點

*************************************
0167:004010CC PUSH EBP <--真正的入口點
0167:004010CD MOV EBPESP
0167:004010CF SUB ESP00000044
0167:004010D2 PUSH ESI

經過0167:0040D564 RET 一行,程序將來到0167:004010CC剛完全解壓的真正程序第一條指令處。
*************************************
當我們跟蹤時發現POPAD或POPFD,就要提高警惕,一般入口點就在附近了,在此程序的原始入口點是004010CC
在0167:0040D564 RET一行鍵入:
a eip (然后按回車)
jmp eip (然后按回車)
F5

這個方法是讓程序掛起,按F5回到windows下。
運行 Procdump,在Task的列表中的第一個list上點擊鼠標右鍵然后選擇"Refresh
list". 在Task列表中找到notepad.exe在它的上面點擊鼠標右鍵.
然后選中"Dump (Full)"給脫的程序起名存盤.
再在notepad.exe上點擊鼠標右鍵然后選中"Kill Task".


_________________________________________________________________________

修正入口點

的notepad.exe程序入口是004010CC.
再次使用ProcDump的PE Editor功能 打開已脫的notepad.exe.


修正入口點值=4010CC-00400000(基址)=10CC
點擊"OK".

現在 運行脫后的notepad.exe吧它應該正常運行了。

(編輯:天命孤獨)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 精品成人免费一区二区在线播放 | 中午日产幕无线码1区 | 国产在线免费 | 久久99精品久久久久久国产越南 | 一区二区三区视频在线观看 | 蜜桃麻豆视频 | 91精品国产日韩91久久久久久360 | 亚洲精品午夜电影 | 久久久av亚洲男天堂 | 久久久久久久九九九九 | 亚洲一区在线视频观看 | 久久草草影视免费网 | 91精品国产综合久久久欧美 | 色播视频在线播放 | 久久久综合 | 蜜桃成品人免费视频 | 午夜丰满少妇高清毛片1000部 | 免费黄色小视频网站 | 蜜桃视频在线观看免费 | 一本一道久久久a久久久精品91 | 久久成人精品视频 | 国产91精品久久久 | 福利在线小视频 | 免费视频a | 亚洲小视频网站 | 日本在线视频免费观看 | h视频免费看 | 国产xxxx岁13xxxxhd| 国产一级www | 高清在线观看av | 污黄视频在线播放 | 91九色福利 | 精品国产一区二区三区久久久 | hd极品free性xxx护士人 | 久久综合给合久久狠狠狠97色69 | 日日做夜夜操 | 万圣街在线观看免费完整版 | 午夜a狂野欧美一区二区 | 91一区二区三区久久久久国产乱 | 国产在线精品一区二区三区 | 免费福利在线视频 |