有關判斷各種軟體加殼標誌的方法------在PECompact中找到的。 (6千字)

看雪資料發表於2000-08-07

有關判斷各種軟體加殼標誌的方法------在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檢測加殼標誌的方法與其自身判斷方法不同哦。

相關文章