史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 資訊系統安全備援防護技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-04-01, 06:32 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 以理服人,巧脫EXECryptor1.53的殼

以理服人,巧脫EXECryptor1.53的殼

工具:OllyDBG1.1B中文版;Lordpe;
操作系統:Win2K/WINXP
近來關於EXECryptor1.53的脫殼很是熱鬧,有的在虛擬機裡脫;有的靠猜測脫。那麼偶呢?偶是"以理服人,巧脫EXECryptor1.53的殼"。

一、脫殼過程:
用Ollydbg載入執行後,停留載程序入口:
00401000 >CALL EXECrypt.00401029
00401005 MOV ECX,DWORD PTR SS:[ESP+C]
00401009 MOV DWORD PTR DS:[ECX],10017
0040100F MOV DWORD PTR DS:[ECX+B8],EXECrypt.004FC000
00401019 XOR EAX,EAX
0040101B MOV DWORD PTR DS:[ECX+14],EAX
0040101E MOV DWORD PTR DS:[ECX+18],EAX
00401021 AND BYTE PTR DS:[ECX+C1],0FE
00401028 RETN
00401029 XOR EAX,EAX
0040102B PUSH DWORD PTR FS:[EAX]
0040102E MOV DWORD PTR FS:[EAX],ESP
00401031 INT3
00401032 RETN
在調試設置(按ALT-O)中,異常除"記憶體訪問異常"外全部忽略(其它全打勾),在同時忽略以下指定的異常或者範圍中新增C000001E並勾上。F9執行,出現提示後選N(不執行),然後Ctr-G:004FC74B到異常處:
004FC74B LOCK CMPXCHG8B EAX ; 非法使用寄存器
修改004FC74B處的值F0為CC(int3)後,按shift-F9繼續。出現異常:
004FDFF4 MOV SS,BX ; 修正的段位寄存器
004FDFF6 PUSH 0
004FDFF8 JMP SHORT EXECrypt.004FDFFB
(弄懂原因後,就在這裡下硬體斷點,到資料轉存彈出視窗按Ctrl-G:0012ff84然後在0012FF84處下硬體斷點:硬體訪問->Dword)

shift-f9繼續。出現:
004FF225 MOV SS,AX ; 修正的段位寄存器
堆棧彈出視窗顯示:
0012FF60 /0012FF7C 指針到下一個 SEH 記錄
0012FF64 |004FF00D SE 句柄
0012FF68 |004FC35C 返回到 EXECrypt.004FC35C 來自 EXECrypt.004FEF70
0012FF6C |004FC347 返回到 EXECrypt.004FC347 來自 EXECrypt.004FC354
0012FF70 |004FE0BE 返回到 EXECrypt.004FE0BE 來自 EXECrypt.004FE0CB
0012FF74 |004FE113 返回到 EXECrypt.004FE113 來自 EXECrypt.004FC327
0012FF78 |004FE076 返回到 EXECrypt.004FE076 來自 EXECrypt.004FE081
0012FF7C \0012FFE0 指針到下一個 SEH 記錄
0012FF80 004FDD6E SE 句柄
0012FF84 77E80978 kernel32.GetModuleHandleA
0012FF88 77E80B09 kernel32.GetProcAddress
0012FF8C 77E8007F kernel32.LoadLibraryA
0012FF90 77E806A9 kernel32.FreeLibrary
0012FF94 77E7E815 kernel32.VirtualProtect
上面第2行指示SEH異常處理地址:004FF00D,於是到004FF00D處按F2設斷。(熟練後,這步可以省略,主要是為了給大家弄清原因)
再看0012FF84為函數GetModuleHandleA入口地址。到資料轉存彈出視窗按Ctrl-G:0012ff84然後在0012FF84處下硬體斷點:硬體訪問->Dword(後面會告訴你為什麼,如果在前一異常處下了硬體斷點這裡就不要再下)
Shift-F9繼續執行到004FF00D斷下後再F2取消斷點。
004FF00D MOV ECX,DWORD PTR SS:[ESP+C]
004FF011 MOV DWORD PTR DS:[ECX],10017
按F7一路下來到004FF027後開始分析(每行//後面為分析說明)。
004FF027 MOV EAX,DWORD PTR DS:[ECX+B0]
//[ecx+b0]為異常時的EAX值,EAX=0:GetModuleHandleA;EAX=1:GetProcAddress;EAX=2:LoadLibraryA;EAX=3:FreeLibrary;EAX=4:VirtualProtect
004FF02D SHL EAX,2 //EAX乘以4,每個函數的入口地址為4字元。
004FF030 ADD EAX,DWORD PTR DS:[ECX+4] //[ECX+4]=DR0,通過DR0來傳送儲存5個函數入口地址的起始地址。沒有被調試時[ecx+4]=DR0=0012FF84,程序正常執行.如果程序被調試時,win2k/winxp下OllyDBG會置DR0=0,那麼就得不到函數正確地址。由於前面設置了硬體斷點為0012FF84而讓除錯器Ollydbg給DR0附值=0012ff84,即[ecx+4]=0012FF84,這就是前面為什麼要設置硬體斷點的原因。而且這點也在win98下得到驗證,win98下OllyDBG不支持硬體斷點,所以[ecx+4](DR0)就是對應的該堆棧的值(不過不是12ff84,而是72fdfc,同樣指向該5個函數的地址).值得一提的是,win9x下該殼是怎麼檢測Ollydbg的?是通過判斷LoadLibrayA/GetModuleHandleA/_lopen等函數入口命令是否修改.因為OllyDBG除錯器HooK了上述的API.
004FF033 MOV DWORD PTR DS:[ECX+B0],EAX //[EAX]單元為相應函數的入口地址,修改[ECX+B0](異常時的EAX)
004FF039 ADD DWORD PTR DS:[ECX+B8],7 //改變EIP為異常時的eip加7.
004FF040 CALL EXECrypt.004FF050
此時在命令彈出視窗設置斷點:bp VirtualProtect+1,為什麼加1?因為殼會判斷函數入口命令是否為0CC(int3)/0CD(INT)/68(PUSH)/0E9(JMP)等.
再次修改調試設置(按ALT-O),把異常全部忽略(全打勾)。F9繼續。斷在VirtualProtect+1處:
77E7E816 MOV EBP,ESP
77E7E818 PUSH DWORD PTR SS:[EBP+14]
77E7E81B PUSH DWORD PTR SS:[EBP+10]
77E7E81E PUSH DWORD PTR SS:[EBP+C]
77E7E821 PUSH DWORD PTR SS:[EBP+8]
77E7E824 PUSH -1
77E7E826 CALL kernel32.VirtualProtectEx
F9繼續,第2次斷下後,一路F8直到返回到程序的領空。
然後F7到下面代碼開始打掃戰場。
004FEDBD PUSH EDI
004FEDBE MOV EDI,EXECrypt.004FEBAD
004FEDC3 PUSH ECX
004FEDC4 MOV ECX,222
004FEDC9 CLD
004FEDCA MOV AL,68
004FEDCC STOS BYTE PTR ES:[EDI]
004FEDCD MOV EAX,EXECrypt.004FEE03
004FEDD2 STOS DWORD PTR ES:[EDI]
004FEDD3 MOV AL,0C3
004FEDD5 REPNE STOS BYTE PTR ES:[EDI]
004FEDD7 POP ECX
004FEDD8 POP EDI
004FEDD9 JMP SHORT EXECrypt.004FEE03
再一路F7到:
004FEE26 >ADD ESP,4
004FEE29 >RETN //返回到004B58E5,程序入口+1:

004B58E5 MOV EBP,ESP
004B58E7 ADD ESP,-18
004B58EA PUSH EBX
明白的原因大家完全可以簡化以上步驟。偶就不囉嗦了。

二、WIN9X下用twx2002脫殼
WIN9X用twx2002脫殼更簡單,只要用BPX VirtualProtect+2,在第2次斷下後一步一步跟,就到了OEP.所以EXECryptor1.53算是弱殼。
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 06:35 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2021, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1