對幻影v1.5b3中Anti-Debug程式碼的一點分析
【宣告】
我寫文章以交流為主,希望大家在轉載時能保持文章的完整性。
【前言】
不能上網的日子真是難熬,就把幻影加殼的程式分析了一下。最近寫了個"幻影1.5b3解密脫殼的小工具"。今天(2000-08-25)上網一小段時間,就把他發給D.Boy看看。這裡我說一點幻影中的Anti-Debug程式碼。
作者: ljttt
寫作日期: 2000-08-23
:0041246A 6A00
push 00000000
<---大迴圈開始處
:0041246C 6A00
push 00000000
:0041246E 6A00
push 00000000
:00412470 6A00
push 00000000
:00412472 6A00
push 00000000
:00412474 6A00
push 00000000
:00412476 56
push esi
:00412477 FF95A3BB4000 call dword ptr
[ebp+0040BBA3] <---這裡的Call呼叫實際上就是呼叫CreateFileA函式
:0041247D 83F8FF
cmp eax, FFFFFFFF
:00412480 7568
jne 004124EA
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00412486(C)
|
:00412482 46
inc esi
<---小迴圈開始
:00412483 803E00
cmp byte ptr [esi], 00
:00412486 75FA
jne 00412482
<---小迴圈結束
:00412488 46
inc esi
:00412489 803E00
cmp byte ptr [esi], 00
:0041248C 75DC
jne 0041246A
<---大迴圈結束處
:0041248E EB5A
jmp 004124EA
..............(省略中間的程式碼)
:004124EA 83F8FF
cmp eax, FFFFFFFF
:004124ED 7406
je 004124F5
:004124EF FF956CBF4000 call dword ptr
[ebp+0040BF6C] <---ExitProcess()
我們來看一下幻影是怎樣來超度我們的。
call dword ptr [ebp+0040BBA3]實際上就是CreateFileA函式呼叫。在大迴圈中他反覆地想建立檔案,也就是看你跟蹤他沒有,所以在
cmp eax,FFFFFFFF 後跳轉程式碼處,你就看著辦吧。如果你想繼續跟蹤,就要跳走。 esi 指向的地址有以下檢測內容。
\\.\TRW <---檢測TRW
\\.\TRW2000 <---檢測TRW2000
\\.\TRWDEBUG <---檢測TRW2000
\\.\REGVXD <---檢測RegMON
\\.\NTICE <---檢測SoftICE
\\.\SICE <---檢測SoftICE
\\.\VKEYPROD <---檢測....,這是什麼東東帶的,我還不清楚。:-(
\\.\FILEVXD <---檢測FileMON
大迴圈結束後,透過判斷eax是否為-1,來確定幻影加殼的程式是否被跟蹤。
【後記】
幻影加殼的程式中破壞了跟蹤環境 int 1 和 int 3 的環境,如果你想直接進行跟蹤,門都沒有。(你有門,快告訴我一聲)。所以必須處理一下,才能動態跟蹤。我80%是靜態分析出來的。看上面的,W32Dasm反彙編的,西西。幻影中有許多值得研究的地方,不過由於這是D.Boy的秘密,不便洩露。所以.....西西。我可不想D.Boy在幻影新版中給我來一段。
Call_killljttt()
{ if( Call_尋找跟蹤者()=="ljttt" || Call_尋找跟蹤者()=="ljtt" )
{ for(int i=0;i<1000000;i++)
{ Call_傳送超級龜派氣功("ljttt");
}
return 你死去吧!
}
}