telock脫殼總結 (12千字)

看雪資料發表於2001-09-27

telock脫殼總結


telock用fi查不出,所以如何判斷是telock的殼,憑ImportRECf匯出it的結果吧,亂七八糟的那種差不多就是了。初解telock的殼會感覺比較難,不過看了2個以後就不覺得有多難了。當然我略過了手動找入口的步驟,尋找程式的入口還是脫殼的關鍵所在也是難點。

用ShadowSecurityScaner Ver3.37舉個例子吧,講的時候會比較方便

1.尋找入口:

(1)delphi:
    快速尋找入口的方法:執行程式,接著用winhex開啟程式所在的主記憶體,選擇搜尋文字,填runtime,執行搜尋,搜到後,向前找到離runtime最近的機器碼為55 8B EC的地方就是程式的oep,所以delphi程式的oep最好找了。

脫殼詳情請參考我最近寫的(delphi程式)

脫Flashfxp 1.4的殼

(2)vb:
    快速尋找入口的方法:執行程式,接著用winhex開啟程式所在的主記憶體,選擇搜尋文字,填程式的名字,執行搜尋,搜到後,向前找到離名字最近的機器碼為68(後面就不一定了,一般很短,不超過20h位元組)開頭的地方就是程式的oep,所以vb程式的oep也比較好找。

(3)vc:
    無任何規律,慢慢跟吧:(。手動脫殼方法最好熟練掌握,對付任何程式都應該有效吧:),熟悉以後就沒問題了。(難~~~)

(4)其他:
    沒試過,不知道了。


    ShadowSecurityScaner是用delphi寫的,hoho運氣真好:)。sss335以前某版肯定是用telock加的殼,不過在51下的337版沒有加殼,所以我用telock0.90給他加一個殼。用快速尋找delphi程式入口的方法:執行sss,接著用winhex編輯sss的主記憶體,選擇搜尋文字,填runtime,執行搜尋,搜到後,向前找到離runtime最近的機器碼為55 8B EC的地方就是程式的oep,對應的地址是59b9e4。


2.脫殼:

    telock的殼在dump之前需要用winhex記憶體編輯功能把400106-400107填回原來的section數(telock會改寫為ffff,使脫殼程式無法dump)。然後從入口處dump,如果不是從入口dump的,一般不能用。再有用prodump dump的程式,需要手動把oep改成正確的。用天意,trw或peditor dump的程式稍大。其中天意在我的winme系統下執行suspend當機,所以極少用,peditor dump出的程式超大。trw只有娃娃改過的1.03版才能直接g到入口處,其餘的版會非法操作的,而s-ice不會出任何問題的,cool。


    ok,回到sss。下面要在入口處脫殼,老規矩開啟SuperBPM,點erase,用trw1.03娃娃修改過的版載入sss,下g 59b9e4,下suspend,用winhex記憶體編輯功能把400106-400107填回原來的值0800,再用prodump選dump(full)就成功啦。


3.重建import table:

以sss為例,執行sss,然後用ImportRECf匯出it,是這個樣子的:

Target: D:\TOOLS\SHADOWSECURITYSCANER\SSS.EXE
OEP: 0019B9E4    IATRVA: 001AB1A0    IATSize: 000008A4

FThunk: 001AB1A4    NbFunc: 00000036
0    001AB1A4    ?    0000    009D0000
0    001AB1A8    ?    0000    009D000A
0    001AB1AC    ?    0000    009D0014
0    001AB1B0    ?    0000    009D001E

從telock重建It部分開始吧,用加了superbpm和icedump的s-ice重新載入sss,下bpm 9d0000,下g,停在這裡:

0187:006ACE09 FF0424            INC    DWord Ptr [ESP]
0187:006ACE0C 0483              ADD    AL,83
0187:006ACE0E 2424              AND    AL,24
0187:006ACE10 03833C240074      ADD    EAX,[EBX+7400243C]
0187:006ACE16 36833C2401        CMP    DWord Ptr SS:[ESP],00000001
0187:006ACE1B 744D              JZ      006ACE6A
0187:006ACE1D 833C2402          CMP    DWord Ptr [ESP],00000002
0187:006ACE21 7422              JZ      006ACE45
0187:006ACE23 C144240C10        ROL    DWord Ptr [ESP+0C],10
0187:006ACE28 668B44240C        MOV    AX,[ESP+0C]
0187:006ACE2D 66AB              STOSW
0187:006ACE2F 8BC3              MOV    EAX,EBX
0187:006ACE31 C1E803            SHR    EAX,03
0187:006ACE34 83E003            AND    EAX,00000003
0187:006ACE37 8A440404          MOV    AL,[ESP+1*EAX+04]
0187:006ACE3B AA                STOSB
0187:006ACE3C B0C3              MOV    AL,C3
0187:006ACE3E AA                STOSB
0187:006ACE3F 66B8FF35          MOV    AX,35FF
0187:006ACE43 EB2D              JMP    006ACE72
0187:006ACE45 8B442408          MOV    EAX,[ESP+08]
0187:006ACE49 AB                STOSD
0187:006ACE4A 4F                DEC    EDI
0187:006ACE4B EBEF              JMP    006ACE3C
0187:006ACE4D 668B44240C        MOV    AX,[ESP+0C]
0187:006ACE52 66AB              STOSW
0187:006ACE54 B0C3              MOV    AL,C3
0187:006ACE56 AA                STOSB
0187:006ACE57 8BC3              MOV    EAX,EBX
0187:006ACE59 C1E803            SHR    EAX,03
0187:006ACE5C 83E003            AND    EAX,00000003
0187:006ACE5F 8A440404          MOV    AL,[ESP+1*EAX+04]
0187:006ACE63 AA                STOSB
0187:006ACE64 66B8FF35          MOV    AX,35FF
0187:006ACE68 EB08              JMP    006ACE72
0187:006ACE6A 8B442410          MOV    EAX,[ESP+10]
0187:006ACE6E AB                STOSD
0187:006ACE6F 4F                DEC    EDI
0187:006ACE70 EBCA              JMP    006ACE3C
0187:006ACE72 E28C              LOOP    006ACE00
0187:006ACE74 66AB              STOSW
0187:006ACE76 83C414            ADD    ESP,00000014
0187:006ACE79 61                POPAD
0187:006ACE7A 89BD9AB04000      MOV    [EBP+0040B09A],EDI  //MOV    [EBP+0040B09A],EBX
              899D9AB04000
0187:006ACE80 8BBD9AB04000      MOV    EDI,[EBP+0040B09A]  //MOV    EDI,[EBP+0040B0A2]
              8BBDA2B04000
0187:006ACE86 8B85A2B04000      MOV    EAX,[EBP+0040B0A2]
0187:006ACE8C 03859AAF4000      ADD    EAX,[EBP+0040AF9A]
0187:006ACE92 8B8D9EB04000      MOV    ECX,[EBP+0040B09E]
0187:006ACE98 8908              MOV    [EAX],ECX
0187:006ACE9A 83859EB040000A    ADD    DWord Ptr [EBP+0040B09E],0000000A
0187:006ACEA1 EB08              JMP    006ACEAB
0187:006ACEA3 838D9AB04000FF    OR      DWord Ptr [EBP+0040B09A],FFFFFFFF
0187:006ACEAA 61                POPAD
0187:006ACEAB 03BD9AAF4000      ADD    EDI,[EBP+0040AF9A]
0187:006ACEB1 85DB              TEST    EBX,EBX
0187:006ACEB3 0F84B4000000      JZ      006ACF6D
0187:006ACEB9 F7C300000080      TEST    EBX,80000000
0187:006ACEBF 6A00              PUSH    00000000
0187:006ACEC1 7506              JNZ    006ACEC9
0187:006ACEC3 8D5C1302          LEA    EBX,[EBX+1*EDX+02]
0187:006ACEC7 EB3C              JMP    006ACF05
0187:006ACEC9 FF0424            INC    DWord Ptr [ESP]
0187:006ACECC 8B8596AF4000      MOV    EAX,[EBP+0040AF96]
0187:006ACED2 3B858AB04000      CMP    EAX,[EBP+0040B08A]
0187:006ACED8 752B              JNZ    006ACF05
0187:006ACEDA 81E3FFFFFF7F      AND    EBX,7FFFFFFF
0187:006ACEE0 8BD3              MOV    EDX,EBX
0187:006ACEE2 8D1495FCFFFFFF    LEA    EDX,[FFFFFFFC+4*EDX]
0187:006ACEE9 8B9D96AF4000      MOV    EBX,[EBP+0040AF96]
0187:006ACEEF 8B433C            MOV    EAX,[EBX+3C]
0187:006ACEF2 8B441878          MOV    EAX,[EAX+1*EBX+78]
0187:006ACEF6 035C181C          ADD    EBX,[EAX+1*EBX+1C]
0187:006ACEFA 8B041A            MOV    EAX,[EDX+1*EBX]
0187:006ACEFD 038596AF4000      ADD    EAX,[EBP+0040AF96]
0187:006ACF03 EB13              JMP    006ACF18
0187:006ACF05 81E3FFFFFF7F      AND    EBX,7FFFFFFF
0187:006ACF0B 53                PUSH    EBX
0187:006ACF0C FFB596AF4000      PUSH    DWord Ptr [EBP+0040AF96]
0187:006ACF12 FF9504AF4000      CALL    Near [`KERNEL32!GetProcAddress`]  //取函式名
0187:006ACF18 40                INC    EAX
0187:006ACF19 48                DEC    EAX
0187:006ACF1A 7532              JNZ    006ACF4E
0187:006ACF1C 58                POP    EAX
0187:006ACF1D F9                STC   
0187:006ACF1E 0F829BFDFFFF      JB      006ACCBF
0187:006ACF24 47                INC    EDI
0187:006ACF25 44                INC    ESP
0187:006ACF26 49                DEC    ECX
0187:006ACF27 3332              XOR    ESI,[EDX]
0187:006ACF29 2E44              INC    ESP
0187:006ACF2B 4C                DEC    ESP
0187:006ACF2C 4C                DEC    ESP
0187:006ACF2D 55                PUSH    EBP
0187:006ACF2E 53                PUSH    EBX
0187:006ACF2F 45                INC    EBP
0187:006ACF30 52                PUSH    EDX
0187:006ACF31 3332              XOR    ESI,[EDX]
0187:006ACF33 2E44              INC    ESP
0187:006ACF35 4C                DEC    ESP
0187:006ACF36 4C                DEC    ESP
0187:006ACF37 53                PUSH    EBX
0187:006ACF38 48                DEC    EAX
0187:006ACF39 45                INC    EBP
0187:006ACF3A 4C                DEC    ESP
0187:006ACF3B 4C                DEC    ESP
0187:006ACF3C 3332              XOR    ESI,[EDX]
0187:006ACF3E 2E44              INC    ESP
0187:006ACF40 4C                DEC    ESP
0187:006ACF41 4C                DEC    ESP
0187:006ACF42 4B                DEC    EBX
0187:006ACF43 45                INC    EBP
0187:006ACF44 52                PUSH    EDX
0187:006ACF45 4E                DEC    ESI
0187:006ACF46 45                INC    EBP
0187:006ACF47 4C                DEC    ESP
0187:006ACF48 3332              XOR    ESI,[EDX]
0187:006ACF4A 2E44              INC    ESP
0187:006ACF4C 4C                DEC    ESP
0187:006ACF4D 4C                DEC    ESP
0187:006ACF4E 8907              MOV    [EDI],EAX  //將函式名放回正確的位置
0187:006ACF50 58                POP    EAX
0187:006ACF51 48                DEC    EAX
0187:006ACF52 740D              JZ      006ACF61
0187:006ACF54 40                INC    EAX
0187:006ACF55 F8                CLC   
0187:006ACF56 668943FE          MOV    [EBX-02],AX
0187:006ACF5A 8803              MOV    [EBX],AL
0187:006ACF5C 43                INC    EBX
0187:006ACF5D 3803              CMP    [EBX],AL
0187:006ACF5F 75F9              JNZ    006ACF5A
0187:006ACF61 83859AAF400004    ADD    DWord Ptr [EBP+0040AF9A],00000004
0187:006ACF68 E9D4FDFFFF        JMP    006ACD41
0187:006ACF6D 83C614            ADD    ESI,00000014
0187:006ACF70 8B95AEAF4000      MOV    EDX,[EBP+0040AFAE]
0187:006ACF76 E9B1FCFFFF        JMP    006ACC2C    //迴圈
0187:006ACF7B 61                POPAD
0187:006ACF7C C3                RET   


按我的方法把006ACE7A和006ACE80改成這個樣子,就可以用ImportRECf了。
0187:006ACE7A 89BD9AB04000      MOV    [EBP+0040B09A],EDI  //MOV    [EBP+0040B09A],EBX
              899D9AB04000
0187:006ACE80 8BBD9AB04000      MOV    EDI,[EBP+0040B09A]  //MOV    EDI,[EBP+0040B0A2]
              8BBDA2B04000

這樣做完所有的函式都可以認出,但還有一個問題,就是該分段的地址還是被telock寫入了東西,這樣ImportRECf就無法識別,還好按我的改法認不出來的地方都是該分段的地方。

類似這樣
1    001AB24C    KERNEL32.dll    0181    GetFileType
1    001AB250    KERNEL32.dll    00BA    CreateFileA
1    001AB254    KERNEL32.dll    00A1    CloseHandle
0    001AB258    ?    0000    009D01C2
1    001AB25C    USER32.dll    0115    GetKeyboardType
1    001AB260    USER32.dll    01AB    LoadStringA
1    001AB264    USER32.dll    01BA    MessageBoxA
1    001AB268    USER32.dll    0027    CharNextA
0    001AB26C    ?    0000    009E0028
1    001AB270    ADVAPI32.dll    00F8    RegQueryValueExA
1    001AB274    ADVAPI32.dll    00F0    RegOpenKeyExA
1    001AB278    ADVAPI32.dll    00D9    RegCloseKey

只需手工把它改成如下就可以了,比原來的方法要快些:),具體的動手試試吧。

1    001AB24C    KERNEL32.dll    0181    GetFileType
1    001AB250    KERNEL32.dll    00BA    CreateFileA
1    001AB254    KERNEL32.dll    00A1    CloseHandle

FThunk: 001AB25C    NbFunc: 00000004
1    001AB25C    USER32.dll    0115    GetKeyboardType
1    001AB260    USER32.dll    01AB    LoadStringA
1    001AB264    USER32.dll    01BA    MessageBoxA
1    001AB268    USER32.dll    0027    CharNextA

FThunk: 001AB270    NbFunc: 00000003
1    001AB270    ADVAPI32.dll    00F8    RegQueryValueExA
1    001AB274    ADVAPI32.dll    00F0    RegOpenKeyExA
1    001AB278    ADVAPI32.dll    00D9    RegCloseKey

做完這些後用ImportRECf修復後的程式可以正常執行了。


完活,哪位大哥有其他好方法可用的話,千萬記得告訴我呀,謝啦。
另外可以參考hying和fpc大哥關於telock的脫文。

感謝你能夠堅持下來hoho:)
telock的殼除了手動找入口比較難外,其它的還是比較簡單的。


關於sss的註冊:

這是我對付以前用telock加過殼的那個sss的patch,sss任意版都只需改2個位元組變成無限制版

#Process Patcher Configuration File
Version=3.93

DisplayName=My Test Program
Filename=sss.exe
Filesize=1043968
Arguments=/quiet
Address=0x58ec5d:0x75:0xeb

#End of Configuration File


再有用這個key強制註冊後,就是註冊版。

UserName=SSSRussian
DigitalSignature=Vu3xB7ar69mR3Vt6hru4piTtDpPOVALxT+SXLg5nALwNVGDHbzWyEA4UAxQktR2arkd5klsvjHCTQVvO0zz9RU



2001.9.27
zombieys[CCG]

―――――――――――――――――――――――――――――――>
                .-"      "-.      unpacked by zombieys[CCG] >
                /         \      qq:1789655                >
              |      ★    |    http://zombieys.yeah.net  >
              |,  .-.  .-.  ,|    http://zombieys.126.com  >
                |)(__/  \__)(|      zombieys.cn.hongnet.com  >
                |/    /\    \|                                >
      (@_@)    (_    ^^    _)      Thanks for your supports  >
    _  )\_______\__|IIIIII|__/_____                          >
_)@8@8{}<________|-\IIIIII/-|____China Crack Group_zombieys___>

相關文章