目的:單純研究,討論用...

(1)使用 PEiD 0.93 ,發現為 Xprotector 1.07


(2)使用 LordPE ,dump full memory,結果...不能 dump memory

(3) 由於 Xprotector 工作在 Ring 0 ,及有 anti Debug anti Dump
      所以我們,必須借助,這個工具 R0cmd,來看看,它在搞啥鬼....

(4)先抓出,未變動的 SST AND IDT

r0cmd /dumpsst_nt:sst1.bin
r0cmd /viewidt:IDT1.txt 

然後再 RUN XP.EXE

(5)再抓出,被修改的 SST AND IDT

r0cmd /dumpsst_nt:sst2.bin
r0cmd /viewidt:IDT2.txt

(6) 比較 SST1.BIN SST2.BIN  我們會發現,有 7 個位址,被改變

0044:SST1: 805957E4    ==>SST2: F39AEBC4  ==>NtAllocateVirtualMemory
00D4:SST1: 805B2404    ==>SST2: F39AECBE  ==>NtCreateThread
00E8:SST1: 8061CBB4    ==>SST2: F39AF1A0  ==>NtDebugContinue
02C8:SST1: 8059B7AE    ==>SST2: F39AEACA  ==>NtQueryVirtualMemory
02E8:SST1: 8059C2DA    ==>SST2: F39AE014  ==>NtReadVirtualMemory
0404:SST1: 805B3BF2    ==>SST2: F39AE9D0  ==>NtTerminateProcess
0454:SST1: 8059C3DE    ==>SST2: F39AE000  ==>NtWriteVirtualMemory

(7) 抓出來,看看,寫了啥東東...
r0cmd /dump xp_sst.bin F39AE000 2000





用 W32Dasm 看看,發現 Xprotector 代碼
   在位址  0xA20 判斷值 47616420


(6) 再比較 IDT1.txt IDT2.txt  我們會發現,有 3 個中斷,被改變

IDT1:1  interrupt 8:8053203C    IDT2:1 interrupt  8:FFFFFFFF
     3  interrupt 8:80532384         3 interrupt  8:FFFFFFFF
    14  interrupt 8:80533EEC        14 interrupt  8:F8AAC000

我們可以發現,INT 1 AND INT 3 都為 0xFFFFFFFF,也就是,當使用
  INT 1 或 INT 3 時,會產生 Page Fault ,也就等於是,產生 INT 14 中斷
 所以,它的秘密,在 INT 14 裡面,我們 抓出來,看看,寫了啥東東.
r0cmd /dump int14.bin F8AAC000 200




在位址  0x166 判斷值 47616420

用 W32Dasm 看看,發現以 47616420 值,來決定,是否要產生真正 INT 1 ,INT 3
   在位址  0x166 判斷值 47616420 ,我們將修改 0x16c=74 19 => EB 19


(7)將 SST 還原,及修正 INT 14 CODE

先用
r0cmd /dump INT14.BIN F8AAC16C 1
再將 int14.bin 內容 74 改成 EB
 
在還原....
r0cmd /loadsst_nt:sst1.bin
r0cmd /load INT14.BIN F8AAC16C 1 

(8)最後,你現在可以打開 OLLYDBG=> LOAD XP.EXE  功能,去 TRACE
    
    Xprotector 開始進入點.....


期待,大家都能解開 Xprotector 之謎..cc

引用參考網站;
http://cracklab.ru/art/xprot.php 作者:dragon
http://saccopharynx.iespana.es/  作者:SACCOPHARYNX

附件:R0cmd.rar