有關判斷各種軟體加殼標誌的方法------在PECompact中找到的。
作者: 該職位空缺,有意者可與本人聯絡。限額一名,MM優先。
寫作日期: 2000-08-06
【前言】
在掌握了對PECompact v1.40b1的脫殼後,一直沒太注意這個軟體。今天為了尋找一下該壓縮加殼軟體的加殼標誌,就又重新找出來了。跟蹤一遍才發現,程式編的簡潔高效。(看來作者很了不起哦,有可能是用Win32ASM編寫的,當然跟蹤起來很方便了,不象跟蹤有些軟體,就象到垃圾場裡去撿垃圾。)不過有意思的是該軟體對其他壓縮軟體已經加殼過的程式不再加殼,哈哈,這樣剩了我不少時間,不用一一去分析其他加殼軟體的加殼標誌了。從這裡找就是了。(注:當然這種方法找出的標誌不一定有用。因為加殼軟體其自身的判斷標準可能與此不同。這個軟體說不定也是找一種偷懶的方法來判斷的。和我一樣
--- 哈哈,兩個懶蟲,一個不如一個。:-) )
以下是我找到的程式分析加殼標誌的程式碼部分。我加了點註釋。(也可能與實際有出入,懶得去驗證了)
●第一部分:主程式程式碼
:0040385D 66813E5045 cmp word
ptr [esi], 4550 <--這裡當然是判斷是否是可執行檔案的PE標誌了
:00403862 0F85FF000000 jne 00403967
<--不同,那還有戲唱...
:00403868 833DC9A3400001 cmp dword ptr [0040A3C9],
00000001
:0040386F 740D
je 0040387E
:00403871 817E0C5045434F cmp dword ptr [esi+0C],
4F434550 <--判斷是否是 'PECO',這是PECompact加殼的標誌
:00403878 0F841C010000 je 0040399A
<--相等,那還用說,自然去顯示你的程式被加殼了。
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040386F(C)
|
:0040387E 56
push esi
:0040387F E8E42F0000 call 00406868
<--該呼叫測試是否被NeoLite加殼了
:00403884 0F820E020000 jb 00403A98
<--小於0,說明加殼了
:0040388A 56
push esi
:0040388B E8B72F0000 call 00406847
<--該呼叫測試是否被BitArts加殼了
:00403890 0F8228020000 jb 00403ABE
<--小於0,說明加殼了
:00403896 56
push esi
:00403897 E8762F0000 call 00406812
<--該呼叫測試.....自已看E文吧....The
selected file appears to have already a symbiote of some type installed, it
may or may not function after compression.
:0040389C 0F8242020000 jb 00403AE4
<--小於0,.....看懂了上面的話,自己來說吧!幹嘛!
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403AE8(C), :00403B03(C)
|
:004038A2 0FB74614 movzx
eax, word ptr [esi+14]
:004038A6 83C018
add eax, 00000018
:004038A9 03C6
add eax, esi
<--EAX定位到Section的Name指標處
:004038AB 81382E736872 cmp dword ptr
[eax], 7268732E <--判斷是否是 '.shr',測試是否被Shrinker加殼了
:004038B1 0F8495010000 je 00403A4C
<--相等,以後我懶得說了
:004038B7 813855505830 cmp dword ptr
[eax], 30585055 <--判斷是否是 'UPX0',測試是否被UPX加殼了
:004038BD 0F84AF010000 je 00403A72
:004038C3 56
push esi
:004038C4 E8E02E0000 call 004067A9
:004038C9 81382E575750 cmp dword ptr
[eax], 5057572E <--判斷是否是 '.WWP',測試是否被WWPack32加殼了
:004038CF 0F8417010000 je 004039EC
:004038D5 83E828
sub eax, 00000028
:004038D8 81382E617370 cmp dword ptr
[eax], 7073612E <--判斷是否是 '.asp',測試是否被ASPack加殼了
:004038DE 0F8446010000 je 00403A2A
:004038E4 81382E706B6C cmp dword ptr
[eax], 6C6B702E <--判斷是否是 '.pkl',測試是否被PKLite32加殼了
:004038EA 0F841B010000 je 00403A0B
●第二部分:子程式程式碼部分
①第一個子程式段
* Referenced by a CALL at Address:
|:0040387F
|
:00406868 C8000000 enter
0000, 00
:0040686C 60
pushad
:0040686D FF7508
push [ebp+08]
:00406870 E834FFFFFF call 004067A9
<--該呼叫返回Sections的Name的指標到EAX
:00406875 81382E6E656F cmp dword ptr
[eax], 6F656E2E <--判斷是否是 '.neo',這是加殼標誌
:0040687B 7406
je 00406883
<--相等,加殼了
:0040687D 61
popad
:0040687E F8
clc
:0040687F C9
leave
:00406880 C20400
ret 0004
②第二個子程式段
* Referenced by a CALL at Address:
|:0040388B
|
:00406847 C8000000 enter
0000, 00
:0040684B 60
pushad
:0040684C FF7508
push [ebp+08]
:0040684F E855FFFFFF call 004067A9
<--該呼叫返回Sections的Name的指標到EAX
:00406854 813842697441 cmp dword ptr
[eax], 41746942 <--判斷是否是 'BitA',這是BitArts加殼標誌
:0040685A 7406
je 00406862
:0040685C 61
popad
:0040685D F8
clc
:0040685E C9
leave
:0040685F C20400
ret 0004
③跳轉後的顯示部分,這還用去解釋嗎?
:00403A98 837D1001 cmp
dword ptr [ebp+10], 00000001
:00403A9C 0F8515FFFFFF jne 004039B7
:0040399A 837D1001 cmp
dword ptr [ebp+10], 00000001
:0040399E 7517
jne 004039B7
:004039A0 6A10
push 00000010
* Possible StringData Ref from Code Obj ->"PECompact v1.40b1, "
|
:004039A2 6808B24000 push 0040B208
* Possible StringData Ref from Code Obj ->"File appears to already be compressed."
|
:004039A7 68BBB24000 push 0040B2BB
:004039AC FF351CB94000 push dword ptr
[0040B91C]
:004039B2 E8CD090000 call 00404384
【後記】
我們已經知道了PECompact判斷的方法,修改跳轉就很簡單了。我用Notepad.exe加殼後測試了一下,加一道殼,有三個Sections,加兩道殼,又加了二個Section,以後再加殼,就沒加Section了。yi,是不是PECompact開始只做表面功夫了,我一下加了八道殼,開始跟蹤,結果在記憶體中跳來跳去的,我頭也跟暈了....。又加了幾十道殼,Notepad.exe開始變得越來越肥大,但還可以執行。以後有時間再分析分析其他加殼軟體的加殼標誌,然後來個交叉加殼。每個各加三遍..........然後再............。老天,以後你不會用這種方法加殼你的軟體來對付我吧........@#$@#$@
昏倒...@#$@#$@#$。
補充:從跟蹤ASPack v2.1和ASProtect v1.0的情況來看,好象PECompact檢測加殼標誌的方法與其自身判斷方法不同哦。