史萊姆論壇

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

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

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

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

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-12-21, 12:05 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 金幣
預設 JDpack的脫殼

JDpack的脫殼
Fpc/CCG

using TRW2000 only


軟體名自己想~~~

一開始是smc解碼

0167:005E2000 60 PUSHA
0167:005E2001 E800000000 CALL 005E2006
0167:005E2006 5D POP EBP
0167:005E2007 8BD5 MOV EDX,EBP
0167:005E2009 81EDC62B4000 SUB EBP,00402BC6
0167:005E200F 2B9561344000 SUB EDX,[EBP+00403461]
0167:005E2015 81EA06000000 SUB EDX,06
0167:005E201B 899565344000 MOV [EBP+00403465],EDX
0167:005E2021 83BD6934400000 CMP DWORD [EBP+00403469],BYTE +00
0167:005E2028 0F85BC030000 JNZ NEAR 005E23EA
0167:005E202E C785693440000100+MOV DWORD [EBP+00403469],01
0167:005E2038 B988070000 MOV ECX,0788
0167:005E203D 8DB5182C4000 LEA ESI,[EBP+00402C18]
0167:005E2043 8A8560344000 MOV AL,[EBP+00403460]
0167:005E2049 8A1E MOV BL,[ESI]
0167:005E204B 32C3 XOR AL,BL
0167:005E204D 8806 MOV [ESI],AL
0167:005E204F 889D60344000 MOV [EBP+00403460],BL
0167:005E2055 46 INC ESI
0167:005E2056 E2EB LOOP 005E2043

到這:
0167:005E2058 9C PUSHF
0167:005E2059 58 POP EAX
0167:005E205A F6C401 TEST AH,01 <- 是否單步跟蹤
0167:005E205D 7407 JZ 005E2066 <- 這裡得跳

0167:005E205F 80B5D72F4000FF XOR BYTE [EBP+00402FD7],FF
0167:005E2066 8BB501324000 MOV ESI,[EBP+00403201]
0167:005E206C 8BC5 MOV EAX,EBP

.....


注意這個call,跟進:

0167:005E2276 E89D010000 CALL 005E2418 <- F8

0167:005E227B 83F8FF CMP EAX,BYTE -01
0167:005E227E 7504 JNZ 005E2284
0167:005E2280 61 POPA
0167:005E2281 33C0 XOR EAX,EAX
0167:005E2283 C3 RET
0167:005E2284 8B9565344000 MOV EDX,[EBP+00403465]
0167:005E228A 8BB5F1314000 MOV ESI,[EBP+004031F1]

進來後F10次:

0167:005E241D 8CC8 MOV EAX,CS
0167:005E241F 50 PUSH EAX
0167:005E2420 0F014C24FE SIDT [ESP-02]
0167:005E2425 5E POP ESI
0167:005E2426 83C618 ADD ESI,BYTE +18
0167:005E2429 8B4E04 MOV ECX,[ESI+04]
0167:005E242C 668B0E MOV CX,[ESI]
0167:005E242F 8B560C MOV EDX,[ESI+0C]
0167:005E2432 668B5608 MOV DX,[ESI+08]
0167:005E2436 8B4614 MOV EAX,[ESI+14]
0167:005E2439 668B4610 MOV AX,[ESI+10]
0167:005E243D 2BC2 SUB EAX,EDX
0167:005E243F 2BD1 SUB EDX,ECX
0167:005E2441 2BC2 SUB EAX,EDX
0167:005E2443 7406 JZ 005E244B <- 這裡得跳
0167:005E2445 E831000000 CALL 005E247B
0167:005E244A C3 RET
0167:005E244B 33C0 XOR EAX,EAX
0167:005E244D C3 RET


很快到下面:

0167:005E23CE 8907 MOV [EDI],EAX
0167:005E23D0 8385FD31400004 ADD DWORD [EBP+004031FD],BYTE +04
0167:005E23D7 E93BFFFFFF JMP 005E2317
0167:005E23DC 83C614 ADD ESI,BYTE +14
0167:005E23DF 8B9565344000 MOV EDX,[EBP+00403465]
0167:005E23E5 E9A8FEFFFF JMP 005E2292
0167:005E23EA EB16 JMP SHORT 005E2402 <- 在這設斷點
0167:005E23EC 45 INC EBP
0167:005E23ED 4D DEC EBP
0167:005E23EE 42 INC EDX


到005E2402很快就到oep:
push eax
ret <- 到oep

在oep處makepe即可
enjoy!
鐵甲2.01與JDpack1.01脫殼綜述



鐵甲和JDpack是由中國人姜東開發的加殼軟體。隨著版本的昇級程序的易用
性得到了用戶的信賴,儘管加殼技術並不成熟。比方說他自身的加密,鐵甲2.01
軟體,只要把系統時間調到2001年7月1日以前,就能正常使用。

通過對由他們加殼的程序的跟蹤發現,在鐵甲和JDpack加殼的程序上存在著
對偵錯工具的防範措施,但是使用的技術很簡單。兩個軟體原理基本相同,但是
程式碼和方法可能有所不同,下面以鐵甲2.01來說一下。

===============================================================================

使用鐵甲加殼windows內已含有notepad.exe,然後偵錯分析:

啟動trw2000,然後載入notepad.exe,程序被攔截到TRW2000領域,開始使用
F8鍵繼續跟蹤,一直跟蹤到如下程式碼:

0167:0040D04B 32C3 XOR AL,BL
0167:0040D04D 8806 MOV [ESI],AL
0167:0040D04F 889D00244000 MOV [EBP+00402400],BL
0167:0040D055 46 INC ESI //--下指令G 40D058
0167:0040D056 E2EB LOOP 0040D043 //---循環
0167:0040D058 9C PUSHF //---游標跳到這裡,程式碼發生變化
0167:0040D059 46 INC ESI
0167:0040D05A B074 MOV AL,74
0167:0040D05C 7501 JNZ 0040D05F
0167:0040D05E 07 POP ES
0167:0040D05F F8 CLC
0167:0040D060 5D POP EBP
0167:0040D061 684A0A0A81 PUSH DWORD 810A0A4A
0167:0040D066 347D XOR AL,7D


======================變化後的程式碼================================
0167:0040D04B 32C3 XOR AL,BL
0167:0040D04D 8806 MOV [ESI],AL
0167:0040D04F 889D00244000 MOV [EBP+00402400],BL
0167:0040D055 46 INC ESI
0167:0040D056 E2EB LOOP 0040D043
0167:0040D058 9C PUSHF //---游標在這裡
0167:0040D059 58 POP EAX
0167:0040D05A F6C401 TEST AH,01
0167:0040D05D 7406 JZ 0040D065 //--R FL Z跳過,否則
0167:0040D05F FFA535224000 JMP NEAR [EBP+00402235] //執行這個非法
0167:0040D065 8BB549224000 MOV ESI,[EBP+00402249] //跳到這裡

===================================================================

F10開始繼續跟蹤,應該經過如下程式碼段3次,不要理會,當過了 CALL 0040D3F4
3次後,要小心了,因為程序的反跟蹤程式碼就在這裡開始第一次檢查:

0167:0040D0A9 F3A4 REP MOVSB
0167:0040D0AB 8BB529224000 MOV ESI,[EBP+00402229]
0167:0040D0B1 8BB84D224000 MOV EDI,[EAX+0040224D]
0167:0040D0B7 03FA ADD EDI,EDX
0167:0040D0B9 57 PUSH EDI
0167:0040D0BA 56 PUSH ESI
0167:0040D0BB E834030000 CALL 0040D3F4 //循環3次後,F10仔細跟蹤
0167:0040D0C0 5E POP ESI
0167:0040D0C1 5F POP EDI
0167:0040D0C2 58 POP EAX
0167:0040D0C3 5E POP ESI
======================================================================

過來以後,發現一段程式碼:
0167:0040D1B6 EB00 JMP SHORT 0040D1B8
0167:0040D1B8 83C602 ADD ESI,BYTE +02
0167:0040D1BB E2B8 LOOP 0040D175
0167:0040D1BD EB9E JMP SHORT 0040D15D
0167:0040D1BF E8FE010000 CALL 0040D3C2 //--ANTI-Debug ,F8跟進去
0167:0040D1C4 8B9505244000 MOV EDX,[EBP+00402405]
0167:0040D1CA 8BB539224000 MOV ESI,[EBP+00402239]
0167:0040D1D0 03F2 ADD ESI,EDX
==========================

F8跟進去到了這裡,典型的ANTI-Debug的基本模式:
0167:0040D3BF C20400 RET 04
0167:0040D3C2 8CC8 MOV EAX,CS
0167:0040D3C4 50 PUSH EAX
0167:0040D3C5 0F014C24FE SIDT [ESP-02] //----利用IDT來檢測,F8繼續
0167:0040D3CA 5E POP ESI
0167:0040D3CB 83C618 ADD ESI,BYTE +18
0167:0040D3CE 8B4E04 MOV ECX,[ESI+04]
0167:0040D3D1 668B0E MOV CX,[ESI]
0167:0040D3D4 8B560C MOV EDX,[ESI+0C]
0167:0040D3D7 668B5608 MOV DX,[ESI+08]
0167:0040D3DB 8B4614 MOV EAX,[ESI+14]
0167:0040D3DE 668B4610 MOV AX,[ESI+10]
0167:0040D3E2 2BC2 SUB EAX,EDX
0167:0040D3E4 2BD1 SUB EDX,ECX //--注意這裡EAX=10
0167:0040D3E6 2BC2 SUB EAX,EDX //--為使結果為0,可以使用指令R修改EDX=10
0167:0040D3E8 7409 JZ 0040D3F3 //結果為0就跳走,不為0就顯示藍色
// 如果不修改EDX,可以在這裡R FL Z,讓程序
// 躲避過第一次檢測
0167:0040D3EA 8B44241C MOV EAX,[ESP+1C]
0167:0040D3EE 03C2 ADD EAX,EDX
0167:0040D3F0 FFD0 CALL EAX
0167:0040D3F2 C3 RET
0167:0040D3F3 C3 RET
0167:0040D3F4 60 PUSHA
===========================================================================================
好了躲過了第一次檢測,程序還有第二次檢測,同樣是使用CALL 0040D3C2,所以F8繼續跟蹤
到以下程式碼:
0167:0040D240 53 PUSH EBX
0167:0040D241 FFB541224000 PUSH DWORD [EBP+00402241]
0167:0040D247 FF9580234000 CALL NEAR [EBP+00402380]
0167:0040D24D 8907 MOV [EDI],EAX
0167:0040D24F 83854522400004 ADD DWORD [EBP+00402245],BYTE +04 //從這裡G 0040D266
0167:0040D256 EBAB JMP SHORT 0040D203
0167:0040D258 83C614 ADD ESI,BYTE +14
0167:0040D25B 8B9505244000 MOV EDX,[EBP+00402405]
0167:0040D261 E96CFFFFFF JMP 0040D1D2
0167:0040D266 E857010000 CALL 0040D3C2 //跳到檢測口,F8跟進去,如同上一個檢測處理
0167:0040D26B 83BD7D22400001 CMP DWORD [EBP+0040227D],BYTE +01
0167:0040D272 7505 JNZ 0040D279
0167:0040D274 E9F9000000 JMP 0040D372
0167:0040D279 8DB5A5224000 LEA ESI,[EBP+004022A5]

======================

處理好第二個以後,程序出口到了程式碼:
0167:0040D266 E857010000 CALL 0040D3C2 //檢測成功,程序執行下一行
0167:0040D26B 83BD7D22400001 CMP DWORD [EBP+0040227D],BYTE +01 // 與01比較,
0167:0040D272 7505 JNZ 0040D279 // 程序不能跳,跳了就非法
0167:0040D274 E9F9000000 JMP 0040D372 //----跳到程序的OEP入口---->>>>>
0167:0040D279 8DB5A5224000 LEA ESI,[EBP+004022A5]
0167:0040D27F 56 PUSH ESI
0167:0040D280 FF9588234000 CALL NEAR [EBP+00402388]
0167:0040D286 83F800 CMP EAX,BYTE +00
0167:0040D289 7408 JZ 0040D293
0167:0040D28B 8985A1224000 MOV [EBP+004022A1],EAX
0167:0040D291 EB07 JMP SHORT 0040D29A

=======================

成功的到達程序OEP入口處: 典型的 JMP EAX

0167:0040D370 EB00 JMP SHORT 0040D372
0167:0040D372 8B9505244000 MOV EDX,[EBP+00402405] //---跳到這裡
0167:0040D378 8B8535224000 MOV EAX,[EBP+00402235]
0167:0040D37E 03C2 ADD EAX,EDX
0167:0040D380 5D POP EBP
0167:0040D381 FFE0 JMP EAX //----程序的正確入口! 這裡pedump出解壓的文件
0167:0040D383 55 PUSH EBP
0167:0040D384 8BEC MOV EBP,ESP
0167:0040D386 50 PUSH EAX


=======================================================================================

完成脫殼了。在JMP EXA上F10一次,程序直接從NOTEPAD.hmjd跳到NOTEPAD.text,程式碼如下:
0167:004010C0 25322E3264 AND EAX,64322E32
0167:004010C5 0000 ADD [EAX],AL
0167:004010C7 000D0A000055 ADD [5500000A],CL
0167:004010CD 8BEC MOV EBP,ESP
0167:004010CF 83EC44 SUB ESP,BYTE +44
0167:004010D2 56 PUSH ESI
0167:004010D3 FF15E4634000 CALL `KERNEL32!GetCommandLineA`
0167:004010D9 8BF0 MOV ESI,EAX
0167:004010DB 8A00 MOV AL,[EAX]
0167:004010DD 3C22 CMP AL,22
0167:004010DF 751B JNZ 004010FC
0167:004010E1 56 PUSH ESI
0167:004010E2 FF15F4644000 CALL `USER32!CharNextA`

呵呵,驗證無誤,OK,該休息了,脫殼到了0:19分。

=================================================================================

在本電腦上Jdpe 2.01的入口是10CC,用TRW2000脫出後,就可以修復ITA,完成脫殼和修
復工作。

接著看了看JDpack的殼,大致情形一樣,但是我沒有跟到他的ANTI-Debug,在這裡要說的
是跟蹤的時候注意幾個循環和跳轉的處理,比較累了,得休息了,明天繼續研究寫個jdpack
的脫殼程序。

CrackerABC 2002/07/31

================================================================================

JDPack 1.01脫殼

由於沒有跟蹤到JDPack的Anti-Debug程式碼,加上迷惑處很多,所以就直接使用trw2000來

動態脫殼。

首先使用衝擊波檢測到程序入口為40DC50,所以在TRW2000中下斷點BPX 40DC50,然後運

行被加殼的程序,成功攔截以後,PEDUMP出解壓文件。

然後,啟動加殼後的程序,然後啟動ImportREC,從程序工作中選項被加殼的程序,然後

手動輸入入口點DC50,自動搜尋ITA表內容,然後獲取輸入表,發現所有的函數都有效,直接

修復脫殼出來的程序,執行,完全正常。

這裡要提一點:如果在中斷後,使用suspend指令掛起TRW2000,然後使用Procdump來脫

出文件,則文件可以直接執行,但是,無法反編譯後看到字串。如果嘗試使用ImportREC來

修復ITA,程序就會非法,還得去分析非法原因,所以不如直接使用TRW2000脫殼出來修復來

的快和好。而且脫出來的程序也就大了4K左右。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



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

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


所有時間均為台北時間。現在的時間是 05:15 AM


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


SEO by vBSEO 3.6.1