CoolWolF在eXcalibur基础上修改的壳
程序下载:

http://www.fcgchina.com/fly/viewthread.php?tid=351

OD中不选择〔特权的指令〕异常选项,加载JustUnpack.exe 程序,F9运行后会停在异常处:

003A0901  IN EAX,DX                       ; I/O 命令 <--停在这里
003A0902  XOR EAX,EAX
003A0904  POP DWORD PTR FS:[EAX]
003A0907  ADD ESP,4
003A090A  CMP EBX,564D5868
003A0910  JNZ SHORT 003A0913
003A0912  INC EAX
003A0913  TEST EAX,EAX
003A0915  JE SHORT 003A091C
003A0917  JMP 003A09C7                    ; JMP to kernel32.ExitProcess
003A091C  POPAD
003A091D  RETN                            ;<--这里下中断,Shift+F9运行到这里

F8继续运行:

003A01FC  PUSHFD
003A01FD  PUSH 63
003A01FF  JNB SHORT 003A020C                      ;考耐心
003A0201  JMP SHORT 003A0205
003A0203  MOV EDI,6E8
003A0209  ADD BH,AL
003A020B  ???                                      ; 未知命令
003A020C  JNB SHORT 003A0205
003A020E  MOV EDI,EB04C483
003A0214  ADD AL,BH
003A0216  ???                                      ; 未知命令
003A0217  DEC DWORD PTR SS:[ESP]
003A021A  JNO SHORT 003A021D
003A021C  ???                                      ; 未知命令
003A021D  JNS SHORT 003A01FF
003A021F  JPE SHORT 003A0222                       ;直接F4到这里
003A0221  MOV DWORD PTR DS:[EBX+EB9D04C4],8057C701

这种代码方式都可以使用上面的方法运行。

一直运行到这里:

003A0096  JE SHORT 003A00BC
003A0098  PUSH 0
003A009A  PUSH 0
003A009C  PUSH 4
003A009E  LEA EAX,DWORD PTR SS:[ESP+8]
003A00A2  PUSH EAX
003A00A3  PUSH 7
003A00A5  CALL DWORD PTR SS:[EBP+403306]  ; kernel32.GetCurrentProcess
003A00AB  PUSH EAX
003A00AC  CALL EDI                        ; ntdll.ZwQueryInformationProcess
003A00AE  POP EAX
003A00AF  OR EAX,EAX
003A00B1  JE SHORT 003A00BC               ;这里必须跳!修改它。
003A00B3  JMP SHORT 003A00B7

继续,到下面就是处理IAT表的代码了,我选择了不在壳中修复的方法,这里就不过它了:

003A0380  MOV EAX,DWORD PTR DS:[<&KERNEL32.LoadLibraryA>]
003A0385  CALL 003A01BA
003A038A  CALL EAX
003A038C  TEST EAX,EAX
003A038E  JE 003A0986
003A0394  CALL 003A039A
003A0399  IMUL EBX,DWORD PTR DS:[ECX-21],402A82BD
003A03A0  ADD BH,BL
003A03A2  LODS DWORD PTR DS:[ESI]
003A03A3  SUB BYTE PTR DS:[EDX],40
003A03A6  ADD BL,CH
003A03A8  ADD EAX,EDI
003A03AA  TEST BYTE PTR DS:[EBX+FFFDFFE8],CL
003A03B0  JMP FAR EBX                                          ; 非法使用寄存器
003A03B2  ADD EAX,EDI
003A03B4  TEST BYTE PTR DS:[EDX+344F8589],BL
003A03BA  INC EAX
003A03BB  ADD BYTE PTR DS:[EDX],CH
003A03BE  POP DWORD PTR SS:[EBP+40344B]
003A03C4  JMP SHORT 003A03C9
003A03C6  MOV DWORD PTR DS:[EBX+ECX*4+C085068B],2B3C958B
003A03D1  INC EAX
003A03D2  ADD BYTE PTR SS:[EBP+3],DH
003A03D5  MOV EAX,DWORD PTR DS:[ESI+10]
003A03D8  JMP SHORT 003A03DD
003A03DA  MOV DWORD PTR DS:[ECX+EBP*2+8503C203],40344B
003A03E5  JMP SHORT 003A03EA
003A03E7  MOV DWORD PTR DS:[ECX+EBP*2+D3F7188B],7E8B1089
003A03F2  ADC BL,CH
003A03F4  ADD EAX,EDI
003A03F6  TEST BYTE PTR DS:[ECX+3],CH
003A03F9  CLI
003A03FA  ADD EDI,DWORD PTR SS:[EBP+40344B]
003A0400  TEST EBX,EBX
003A0402  JE 003A089B
003A0408  PUSHFD
003A0409  PUSH 63
003A040B  JNB SHORT 003A0418
003A040D  JMP SHORT 003A0411
003A040F  CALL 0040ECFC
003A0414  ADD BYTE PTR DS:[EAX],AL
003A0416  CALL E9317803
003A041B  CALL EB3EC8A3
003A0420  ADD CH,AL
003A0422  CALL 715E1126
003A0427  ADD EAX,EBP
003A0429  JNS SHORT 003A040B
003A042B  JPE SHORT 003A042E
003A042D  CALL 9D3EC8B5
003A0432  JMP SHORT 003A0435
003A0434  CALL 003AC830
003A0439  ADD BYTE PTR DS:[EAX+85C60C74],AL
003A043F  PUSH EBX
003A0440  XOR AL,40
003A0442  ADD BYTE PTR DS:[ECX],AL
003A0444  JMP 003A057F
003A0449  MOV BYTE PTR SS:[EBP+403453],0
003A0450  ADD EBX,EDX
003A0452  PUSHFD
003A0453  PUSH 63
003A0455  JNB SHORT 003A0462
003A0457  JMP SHORT 003A045B
003A0459  IMUL EBP,DWORD PTR DS:[ECX-18],6
003A0460  IMUL EBP,DWORD PTR DS:[ECX+73],836969F7
003A0467  LES EAX,FWORD PTR DS:[EBX+EBP*8]                     ; 修正的段位寄存器
003A046A  ADD CH,BYTE PTR DS:[ECX+69]
003A046D  DEC DWORD PTR SS:[ESP]
003A0470  JNO SHORT 003A0473
003A0472  IMUL EDI,DWORD PTR DS:[ECX-20],8369017A
003A0479  LES EAX,FWORD PTR DS:[EBX*4+B86901EB]                ; 修正的段位寄存器
003A0480  CLC
003A0481  MOV BYTE PTR SS:[EBP+53],DH
003A0485  SUB ECX,ECX
003A0487  MOV CL,BYTE PTR DS:[EBX]
003A0489  XOR CL,AL
003A048B  PUSHFD
003A048C  PUSH 63
003A048E  JNB SHORT 003A049B
003A0490  JMP SHORT 003A0494
003A0492  JMP 0040ED80
003A0497  ADD BYTE PTR DS:[EAX],AL
003A0499  JMP EA317887
003A049E  JMP EB3EC926
003A04A3  ADD CH,CL
003A04A5  JMP 715E11A9
003A04AA  ADD ECX,EBP
003A04AC  JNS SHORT 003A048E
003A04AE  JPE SHORT 003A04B1
003A04B0  JMP 9D3EC938
003A04B5  JMP SHORT 003A04B8
003A04B7  JMP 6AD6D0BE
003A04BC  ARPL WORD PTR DS:[EBX+B],SI
003A04BF  JMP SHORT 003A04C3
003A04C1  CALL 0040EDAE
003A04C6  ADD BYTE PTR DS:[EAX],AL
003A04C8  CALL E93178B5
003A04CD  CALL EB3EC955
003A04D2  ADD CH,AL
003A04D4  CALL 715E11D8
003A04D9  ADD EAX,EBP
003A04DB  JNS SHORT 003A04BD
003A04DD  JPE SHORT 003A04E0
003A04DF  CALL 9D3EC967
003A04E4  JMP SHORT 003A04E7
003A04E6  CALL 6AD6CD15
003A04EB  ARPL WORD PTR DS:[EBX+B],SI
003A04EE  JMP SHORT 003A04F2
003A04F0  JMP 0040EDDE
003A04F5  ADD BYTE PTR DS:[EAX],AL
003A04F7  JMP EA3178E5
003A04FC  JMP EB3EC984
003A0501  ADD CH,CL
003A0503  JMP 715E1207
003A0508  ADD ECX,EBP
003A050A  JNS SHORT 003A04EC
003A050C  JPE SHORT 003A050F
003A050E  JMP 9D3EC996
003A0513  JMP SHORT 003A0516
003A0515  JMP 9CAEC5DB
003A051A  PUSH 63
003A051C  JNB SHORT 003A0529
003A051E  JMP SHORT 003A0522
003A0520  JMP 0040EE0E
003A0525  ADD BYTE PTR DS:[EAX],AL
003A0527  JMP EA317915
003A052C  JMP EB3EC9B4
003A0531  ADD CH,CL
003A0533  JMP 715E1237
003A0538  ADD ECX,EBP
003A053A  JNS SHORT 003A051C
003A053C  JPE SHORT 003A053F
003A053E  JMP 9D3EC9C6
003A0543  JMP SHORT 003A0546
003A0545  JMP 857D10D2
003A054A  LEAVE
003A054B  JNZ 003A0487
003A0551  POP EBX
003A0552  PUSHFD
003A0553  PUSH 63
003A0555  JNB SHORT 003A0562
003A0557  JMP SHORT 003A055B
003A0559  CALL 0040EE46
003A055E  ADD BYTE PTR DS:[EAX],AL
003A0560  CALL E931794D
003A0565  CALL EB3EC9ED
003A056A  ADD CH,AL
003A056C  CALL 715E1270
003A0571  ADD EAX,EBP
003A0573  JNS SHORT 003A0555
003A0575  JPE SHORT 003A0578
003A0577  CALL 9D3EC9FF
003A057C  JMP SHORT 003A057F
003A057E  CALL 0039E904
003A0583  ???                                                  ; 未知命令
003A0585  PUSH EBX
003A0586  PUSH DWORD PTR SS:[EBP+40344F]
003A058C  PUSHFD
003A058D  PUSH 63
003A058F  JNB SHORT 003A059C
003A0591  JMP SHORT 003A0595
003A0593  CALL 0040EE80
003A0598  ADD BYTE PTR DS:[EAX],AL
003A059A  CALL E9317987
003A059F  CALL EB3ECA27
003A05A4  ADD CH,AL
003A05A6  CALL 715E12AA
003A05AB  ADD EAX,EBP
003A05AD  JNS SHORT 003A058F
003A05AF  JPE SHORT 003A05B2
003A05B1  CALL 9D3ECA39
003A05B6  JMP SHORT 003A05B9
003A05B8  CALL 409B355E
003A05BD  ADD AL,CH
003A05BF  IDIV EBX
003A05C1  ???                                                  ; 未知命令
003A05C3  CALL EAX
003A05C5  TEST EAX,EAX
003A05C7  JE 003A0993
003A05CD  PUSHFD
003A05CE  PUSH 63
003A05D0  JNB SHORT 003A05DD
003A05D2  JMP SHORT 003A05D6
003A05D4  JMP 0040EEC2
003A05D9  ADD BYTE PTR DS:[EAX],AL
003A05DB  JMP EA3179C9
003A05E0  JMP EB3ECA68
003A05E5  ADD CH,CL
003A05E7  JMP 715E12EB
003A05EC  ADD ECX,EBP
003A05EE  JNS SHORT 003A05D0
003A05F0  JPE SHORT 003A05F3
003A05F2  JMP 9D3ECA7A
003A05F7  JMP SHORT 003A05FA
003A05F9  JMP 0035C1E6
003A05FE  JMP DWORD PTR DS:[EAX-64]
003A0601  PUSH 63
003A0603  JNB SHORT 003A0610
003A0605  JMP SHORT 003A0609
003A0607  CALL FAR 0000:0006E89A                               ; 远距呼叫
003A060E  CALL FAR 839A:9AF7739A                               ; 远距呼叫
003A0615  LES EAX,FWORD PTR DS:[EBX+EBP*8]                     ; 修正的段位寄存器
003A0618  ADD BL,BYTE PTR DS:[EDX+240CFF9A]
003A061E  JNO SHORT 003A0621
003A0620  CALL FAR 839A:017AE079                               ; 远距呼叫
003A0627  LES EAX,FWORD PTR DS:[EBX*4+BB9A01EB]                ; 修正的段位寄存器
003A062E  INC EDI
003A062F  POPAD
003A0630  INC EAX
003A0631  ADD BYTE PTR SS:[EBP+4028D38D],CL
003A0637  ADD BYTE PTR DS:[EBX],AL
003A0639  SBB DWORD PTR DS:[ECX+DB639],EAX
003A063F  ADD BYTE PTR DS:[EDI],CL
003A0641  AND DWORD PTR DS:[ECX],2
003A0644  ADD BYTE PTR DS:[EAX],AL
003A0646  PUSH EBX
003A0647  PUSHFD
003A0648  PUSH 63
003A064A  JNB SHORT 003A0657
003A064C  JMP SHORT 003A0650
003A064E  LEA ECX,DWORD PTR SS:[EBP+6E8]
003A0654  ADD BYTE PTR SS:[EBP+8DF7738D],CL
003A065A  LEA EAX,DWORD PTR DS:[EBX+2EB04C4]
003A0660  LEA ECX,DWORD PTR SS:[EBP+71240CFF]
003A0666  ADD DWORD PTR SS:[EBP+17AE079],ECX
003A066C  LEA EAX,DWORD PTR DS:[EBX+EB9D04C4]
003A0672  ADD DWORD PTR SS:[EBP+636A9C57],ECX
003A0678  JNB SHORT 003A0685
003A067A  JMP SHORT 003A067E
003A067C  MOV ECX,DWORD PTR DS:[EBX+6E8]
003A0682  ADD BYTE PTR DS:[EBX+8BF7738B],CL
003A0688  MOV EAX,DWORD PTR DS:[EBX+2EB04C4]
003A068E  MOV ECX,DWORD PTR DS:[EBX+71240CFF]
003A0694  ADD DWORD PTR DS:[EBX+17AE079],ECX
003A069A  MOV EAX,DWORD PTR DS:[EBX+EB9D04C4]
003A06A0  ADD DWORD PTR DS:[EBX+80108A51],ECX
003A06A6  CLI
003A06A7  PUSH EAX
003A06A8  JB SHORT 003A06AF
003A06AA  CMP DL,5F
003A06AD  JBE SHORT 003A06E9
003A06AF  CMP DL,6A
003A06B2  JE SHORT 003A06ED
003A06B4  CMP DL,68
003A06B7  JE SHORT 003A06F1
003A06B9  CMP DL,0B0
003A06BC  JB SHORT 003A06C3
003A06BE  CMP DL,0B7
003A06C1  JBE SHORT 003A06ED
003A06C3  LEA ESI,DWORD PTR SS:[EBP+403454]
003A06C9  PUSH 4
003A06CB  POP ECX
003A06CC  MOV DL,BYTE PTR DS:[ESI]
003A06CE  CMP BYTE PTR DS:[EAX],DL
003A06D0  JNZ SHORT 003A06E4
003A06D2  MOV EDI,ECX
003A06D4  PUSH 3F
003A06D6  POP ECX
003A06D7  MOV DL,0C0
003A06D9  CMP BYTE PTR DS:[EAX+1],DL
003A06DC  JE SHORT 003A06ED
003A06DE  INC DL
003A06E0  LOOPD SHORT 003A06D9
003A06E2  MOV ECX,EDI
003A06E4  INC ESI
003A06E5  LOOPD SHORT 003A06CC
003A06E7  JMP SHORT 003A074A
003A06E9  MOV DL,1
003A06EB  JMP SHORT 003A06F3
003A06ED  MOV DL,2
003A06EF  JMP SHORT 003A06F3
003A06F1  MOV DL,5
003A06F3  PUSH 3
003A06F5  POP ECX
003A06F6  MOV WORD PTR DS:[EBX],1EB
003A06FB  MOV BYTE PTR DS:[EBX+2],AL
003A06FE  ADD DWORD PTR SS:[EBP+4028D3],ECX
003A0704  ADD EBX,ECX
003A0706  PUSHFD
003A0707  PUSH 63
003A0709  JNB SHORT 003A0716
003A070B  JMP SHORT 003A070F
003A070D  MOV EDI,6E8
003A0713  ADD BH,AL
003A0715  ???                                                  ; 未知命令
003A0716  JNB SHORT 003A070F
003A0718  MOV EDI,EB04C483
003A071E  ADD AL,BH
003A0720  ???                                                  ; 未知命令
003A0721  DEC DWORD PTR SS:[ESP]
003A0724  JNO SHORT 003A0727
003A0726  ???                                                  ; 未知命令
003A0727  JNS SHORT 003A0709
003A0729  JPE SHORT 003A072C
003A072B  MOV DWORD PTR DS:[EBX+EB9D04C4],B60FC701
003A0735  ROL BYTE PTR DS:[ECX],CL
003A0737  XCHG EAX,EBP
003A0738  SHR DWORD PTR DS:[EAX],CL
003A073A  INC EAX
003A073B  ADD BYTE PTR DS:[EDX+400B8808],CL
003A0741  INC EBX
003A0742  DEC EDX
003A0743  JNZ SHORT 003A073C
003A0745  JMP 003A06A3
003A074A  POP ECX
003A074B  PUSHFD
003A074C  PUSH 63
003A074E  JNB SHORT 003A075B
003A0750  JMP SHORT 003A0754
003A0752  IMUL EBP,DWORD PTR DS:[ECX-18],6
003A0759  IMUL EBP,DWORD PTR DS:[ECX+73],836969F7
003A0760  LES EAX,FWORD PTR DS:[EBX+EBP*8]                     ; 修正的段位寄存器
003A0763  ADD CH,BYTE PTR DS:[ECX+69]
003A0766  DEC DWORD PTR SS:[ESP]
003A0769  JNO SHORT 003A076C
003A076B  IMUL EDI,DWORD PTR DS:[ECX-20],8369017A
003A0772  LES EAX,FWORD PTR DS:[EBX*4+6A6901EB]                ; 修正的段位寄存器
003A0779  ADD EAX,636A9C5A
003A077E  JNB SHORT 003A078B
003A0780  JMP SHORT 003A0784
003A0782  MOV EDI,6E8
003A0788  ADD BH,AL
003A078A  ???                                                  ; 未知命令
003A078B  JNB SHORT 003A0784
003A078D  MOV EDI,EB04C483
003A0793  ADD AL,BH
003A0795  ???                                                  ; 未知命令
003A0796  DEC DWORD PTR SS:[ESP]
003A0799  JNO SHORT 003A079C
003A079B  ???                                                  ; 未知命令
003A079C  JNS SHORT 003A077E
003A079E  JPE SHORT 003A07A1
003A07A0  MOV DWORD PTR DS:[EBX+EB9D04C4],C32BC701
003A07AA  SUB EAX,EDX
003A07AC  MOV BYTE PTR DS:[EBX],0E9
003A07AF  MOV DWORD PTR DS:[EBX+1],EAX
003A07B2  ADD DWORD PTR DS:[ECX],EDX
003A07B4  PUSHFD
003A07B5  PUSH 63
003A07B7  JNB SHORT 003A07C4
003A07B9  JMP SHORT 003A07BD
003A07BB  JMP 0040F0A9
003A07C0  ADD BYTE PTR DS:[EAX],AL
003A07C2  JMP EA317BB0
003A07C7  JMP EB3ECC4F
003A07CC  ADD CH,CL
003A07CE  JMP 715E14D2
003A07D3  ADD ECX,EBP
003A07D5  JNS SHORT 003A07B7
003A07D7  JPE SHORT 003A07DA
003A07D9  JMP 9D3ECC61
003A07DE  JMP SHORT 003A07E1
003A07E0  JMP E89A6044
003A07E5  ADC EAX,68000000
003A07EA  XCHG ESI,EDX
003A07EC  ADC AL,BYTE PTR DS:[EAX]
003A07EE  XOR DWORD PTR SS:[ESP],12D687
003A07F5  RETN
003A07F6  ADD BYTE PTR DS:[EAX],AL
003A07F8  ADD BYTE PTR DS:[EAX],AL
003A07FA  ADD BYTE PTR DS:[EAX],AL
003A07FC  ADD BYTE PTR DS:[EAX],AL
003A07FE  POP ESI
003A07FF  PUSH EAX
003A0800  CALL DWORD PTR SS:[EBP+403344]
003A0806  ROR EAX,7
003A0809  MOV DWORD PTR SS:[EBP+4030C3],EAX
003A080F  POP EDX
003A0810  XOR EDX,EAX
003A0812  MOV DWORD PTR SS:[EBP+4030BC],EDX
003A0818  MOV ECX,0D
003A081D  PUSHAD
003A081E  LEA EDI,DWORD PTR SS:[EBP+4030CC]
003A0824  CMP DWORD PTR DS:[EDI],ECX
003A0826  JA SHORT 003A0846
003A0828  MOV ECX,1000
003A082D  PUSH ECX
003A082E  PUSH 4
003A0830  PUSH 3000
003A0835  PUSH ECX
003A0836  PUSH 0
003A0838  CALL DWORD PTR DS:[<&KERNEL32.VirtualAlloc>]         ; kernel32.VirtualAlloc
003A083E  POP ECX                                              ;申请一个临时空间放变形的跳转表
003A083F  MOV DWORD PTR DS:[EDI],ECX
003A0841  SUB EDI,4
003A0844  MOV DWORD PTR DS:[EDI],EAX
003A0846  POPAD
003A0847  MOV EDI,DWORD PTR SS:[EBP+4030C8]
003A084D  PUSH EDI
003A084E  PUSH ECX
003A084F  PUSHFD
003A0850  CLD
003A0851  REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
003A0853  POPFD
003A0854  POP ECX
003A0855  SUB DWORD PTR SS:[EBP+4030CC],ECX
003A085B  ADD DWORD PTR SS:[EBP+4030C8],ECX
003A0861  POP EAX
003A0862  MOV DWORD PTR SS:[ESP+1C],EAX
003A0866  POPAD
003A0867  MOV DWORD PTR DS:[EDI],EAX
003A0869  ADD DWORD PTR SS:[EBP+40344B],4
003A0870  POPAD
003A0871  CMP BYTE PTR SS:[EBP+403453],0
003A0878  JNZ SHORT 003A0896
003A087A  FISTP QWORD PTR SS:[EBP+402A82]
003A0880  FILD QWORD PTR SS:[EBP+402A82]
003A0886  JMP SHORT 003A088A
003A0888  VxDJump 2C9B858D
003A088E  INC EAX
003A088F  ADD BYTE PTR DS:[EAX-17],DL
003A0892  SBB BH,CL
003A0894  ???                                                  ; 未知命令
003A0896  JMP 003A03C9
003A089B  PUSH 5
003A089D  POP ECX
003A089E  XCHG ESI,EDI
003A08A0  REP STOS DWORD PTR ES:[EDI]
003A08A2  XCHG ESI,EDI
003A08A4  MOV EDX,DWORD PTR SS:[EBP+402B3C]
003A08AA  JMP 003A0316
003A08AF  POPAD                                               ;直接到这里出来
003A08B0  RETN


这段代码好像没有作用:

003A094B  PUSHAD
003A094C  MOV EAX,30
003A0951  PUSH DWORD PTR FS:[EAX]
003A0954  POP EAX
003A0955  TEST EAX,EAX
003A0957  JS SHORT 003A0968
003A0959  MOV EAX,DWORD PTR DS:[EAX+C]
003A095C  MOV EAX,DWORD PTR DS:[EAX+C]
003A095F  MOV DWORD PTR DS:[EAX+20],-1
003A0966  JMP SHORT 003A0984
003A0968  PUSH 0
003A096A  CALL DWORD PTR DS:[<&KERNEL32.GetModuleHandleA>]     ; kernel32.GetModuleHandleA
003A0970  TEST EDX,EDX
003A0972  JNS SHORT 003A0984
003A0974  CMP DWORD PTR DS:[EDX+8],-1
003A0978  JNZ SHORT 003A0984
003A097A  MOV EDX,DWORD PTR DS:[EDX+4]
003A097D  MOV DWORD PTR DS:[EDX+50],-1
003A0984  POPAD
003A0985  RETN

这里就到了隐藏线程的代码了:

003A00E1  PUSH 1
003A00E3  PUSH DWORD PTR SS:[EBP+40340F]
003A00E9  CALL DWORD PTR SS:[EBP+40338F]                   ; USER32.EnableWindow
003A00EF  PUSH EAX
003A00F0  PUSH EAX
003A00F1  FISTP QWORD PTR SS:[ESP]
003A00F4  POP EAX
003A00F5  POP EAX
003A00F6  PUSH 0
003A00F8  PUSH ESP
003A00F9  PUSH 0
003A00FB  PUSH 0
003A00FD  PUSH 4019A5                                    ;<--看看这个参数就是OEP(线程的入口)
003A0102  PUSH 0
003A0104  PUSH 0
003A0106  CALL DWORD PTR SS:[EBP+4032D1]                 ; kernel32.CreateThread
/////////////////////////////////////////////////////////////////
0012FF98   003A010C  /CALL 到 CreateThread 来自 003A0106
0012FF9C   00000000  |pSecurity = NULL
0012FFA0   00000000  |StackSize = 0
0012FFA4   004019A5  |ThreadFunction = JustUnpa.004019A5   //把主程序当成一个线程运行,运行的入口就是这个地址.
0012FFA8   00000000  |pThreadParm = NULL
0012FFAC   00000000  |CreationFlags = 0
0012FFB0   0012FFB4  \pThreadId = 0012FFB4

////////////////////////////////////////////////////////////////
003A010C  MOV EDI,DWORD PTR SS:[EBP+4033CA]
003A0112  OR EDI,EDI
003A0114  JE SHORT 003A011F
003A0116  PUSH 0
003A0118  PUSH 0
003A011A  PUSH 11
003A011C  PUSH EAX
003A011D  CALL EDI                                        ; ntdll.ZwSetInformationThread
003A011F  CALL DWORD PTR SS:[EBP+4032F1]                  ; kernel32.GetCurrentThread
//获得当前线程的伪句柄
003A0125  PUSH EAX
003A0126  CALL DWORD PTR SS:[EBP+4032E2]                  ; kernel32.ExitThread
//关闭当前线程
003A012C  PUSHFD
003A012D  PUSH 63
003A012F  JNB SHORT 003A013C
003A0131  JMP SHORT 003A0135


这个思想看起来不错,只是留下的痕迹太明显。现在知道了主程序的入口地址就可以在CreateThread函数前直接jump到入口地址。

jmp  JustUnpa.004019A5:

004019A5  PUSH 1                                 <--OEP 停在这里 dump下程序
004019A7  CALL DWORD PTR DS:[401024]
004019AD  PUSH EAX
004019AE  PUSH 0
004019B0  PUSH 0
004019B2  CALL DWORD PTR DS:[40101C]
004019B8  PUSH EAX
004019B9  CALL JustUnpa.00401985
004019BE  PUSH EAX
004019BF  CALL DWORD PTR DS:[401020]

现在来修复IAT表,壳中修复比较麻烦,还使用了时间效验。
先看看现在的IAT表:
00401000  A0 01 3B 00 AD 01 3B 00  ?;.?;.
00401008  BA 01 3B 00 00 00 00 00  ?;.....
00401010  00 00 3B 00 0D 00 3B 00  ..;...;.
00401018  1A 00 3B 00 27 00 3B 00  .;.'.;.
00401020  34 00 3B 00 41 00 3B 00  4.;.A.;.
00401028  4E 00 3B 00 5B 00 3B 00  N.;.[.;.
00401030  68 00 3B 00 75 00 3B 00  h.;.u.;.
00401038  82 00 3B 00 8F 00 3B 00  ?;.?;.
00401040  9C 00 3B 00 A9 00 3B 00  ?;.?;.
00401048  B6 00 3B 00 C3 00 3B 00  ?;.?;.
00401050  D0 00 3B 00 DD 00 3B 00  ?;.?;.
00401058  EA 00 3B 00 F7 00 3B 00  ?;.?;.
00401060  04 01 3B 00 11 01 3B 00  ;.;.
00401068  1E 01 3B 00 2B 01 3B 00  ;.+;.
00401070  38 01 3B 00 00 00 00 00  8;.....
00401078  45 01 3B 00 52 01 3B 00  E;.R;.
00401080  5F 01 3B 00 6C 01 3B 00  _;.l;.
00401088  79 01 3B 00 86 01 3B 00  y;.?;.
00401090  93 01 3B 00 00 00 00 00  ?;.....

被指向临时空间加密的跳转表:
003B0000  PUSH B8404DD4
003B0005  XOR DWORD PTR SS:[ESP],B8002C93
003B000C  RETN
003B000D  PUSH B8404DC9
003B0012  XOR DWORD PTR SS:[ESP],B8002C93
003B0019  RETN
003B001A  PUSH B8404DCC
003B001F  XOR DWORD PTR SS:[ESP],B8002C93
003B0026  RETN
003B0027  PUSH B8404DFB
003B002C  XOR DWORD PTR SS:[ESP],B8002C93
003B0033  RETN
003B0034  PUSH B8404DFE
003B0039  XOR DWORD PTR SS:[ESP],B8002C93
003B0040  RETN
003B0041  PUSH B8404D1B
003B0046  XOR DWORD PTR SS:[ESP],B8002C93
003B004D  RETN
003B004E  PUSH B8404D1E
003B0053  XOR DWORD PTR SS:[ESP],B8002C93
003B005A  RETN
003B005B  PUSH B8404D0C
003B0060  XOR DWORD PTR SS:[ESP],B8002C93
003B0067  RETN
003B0068  PUSH B8404D27
003B006D  XOR DWORD PTR SS:[ESP],B8002C93
003B0074  RETN
003B0075  PUSH B8404D5A
003B007A  XOR DWORD PTR SS:[ESP],B8002C93
003B0081  RETN
003B0082  PUSH B8404D4D
003B0087  XOR DWORD PTR SS:[ESP],B8002C93
003B008E  RETN
003B008F  PUSH B8404D74
003B0094  XOR DWORD PTR SS:[ESP],B8002C93
003B009B  RETN
003B009C  PUSH B8404D7F
003B00A1  XOR DWORD PTR SS:[ESP],B8002C93
003B00A8  RETN
003B00A9  PUSH B8404E99
003B00AE  XOR DWORD PTR SS:[ESP],B8002C93
003B00B5  RETN
003B00B6  PUSH CC404E8B
003B00BB  XOR DWORD PTR SS:[ESP],CC002C93
003B00C2  RETN
003B00C3  PUSH CC404EBD
003B00C8  XOR DWORD PTR SS:[ESP],CC002C93
003B00CF  RETN
003B00D0  PUSH CC404EA0
003B00D5  XOR DWORD PTR SS:[ESP],CC002C93
003B00DC  RETN
003B00DD  PUSH CC404EAB
003B00E2  XOR DWORD PTR SS:[ESP],CC002C93
003B00E9  RETN
003B00EA  PUSH CC404EAE
003B00EF  XOR DWORD PTR SS:[ESP],CC002C93
003B00F6  RETN
003B00F7  PUSH CC404ED1
003B00FC  XOR DWORD PTR SS:[ESP],CC002C93
003B0103  RETN
003B0104  PUSH CC404EC3
003B0109  XOR DWORD PTR SS:[ESP],CC002C93
003B0110  RETN
003B0111  PUSH CC404EC6
003B0116  XOR DWORD PTR SS:[ESP],CC002C93
003B011D  RETN
003B011E  PUSH CC404EC9
003B0123  XOR DWORD PTR SS:[ESP],CC002C93
003B012A  RETN
003B012B  PUSH CC404EFB
003B0130  XOR DWORD PTR SS:[ESP],CC002C93
003B0137  RETN
003B0138  PUSH CC404EFE
003B013D  XOR DWORD PTR SS:[ESP],CC002C93
003B0144  RETN
003B0145  PUSH CC404EE8
003B014A  XOR DWORD PTR SS:[ESP],CC002C93
003B0151  RETN
003B0152  PUSH CC404E05
003B0157  XOR DWORD PTR SS:[ESP],CC002C93
003B015E  RETN
003B015F  PUSH CC404E22
003B0164  XOR DWORD PTR SS:[ESP],CC002C93
003B016B  RETN
003B016C  PUSH CC404E25
003B0171  XOR DWORD PTR SS:[ESP],CC002C93
003B0178  RETN
003B0179  PUSH CC404E5A
003B017E  XOR DWORD PTR SS:[ESP],CC002C93
003B0185  RETN
003B0186  PUSH CC404E4F
003B018B  XOR DWORD PTR SS:[ESP],CC002C93
003B0192  RETN
003B0193  PUSH CC404E7C
003B0198  XOR DWORD PTR SS:[ESP],CC002C93
003B019F  RETN
003B01A0  PUSH CC404F95
003B01A5  XOR DWORD PTR SS:[ESP],CC002C93
003B01AC  RETN
003B01AD  PUSH CC404F87
003B01B2  XOR DWORD PTR SS:[ESP],CC002C93
003B01B9  RETN
003B01BA  PUSH CC404FB1
003B01BF  XOR DWORD PTR SS:[ESP],CC002C93
003B01C6  RETN

写个代码恢复跳转地址:

00406000 >  60              PUSHAD
00406001    9C              PUSHFD
00406002    B8 00003B00     MOV EAX,3B0000                                   ; ASCII "hGa@"
00406007    8B50 08         MOV EDX,DWORD PTR DS:[EAX+8]
0040600A    3150 01         XOR DWORD PTR DS:[EAX+1],EDX
0040600D    8D40 0D         LEA EAX,DWORD PTR DS:[EAX+D]
00406010    3D C7013B00     CMP EAX,3B01C7
00406015    7F 04           JG SHORT JustUnpa.0040601B
00406017  ^ EB EE           JMP SHORT JustUnpa.00406007
00406019    90              NOP
0040601A    90              NOP
0040601B    9D              POPFD
0040601C    61              POPAD
0040601D  - E9 83B9FFFF     JMP JustUnpa.004019A5
00406022    90              NOP

变成这样:
003B0000  PUSH 406147
003B0005  XOR DWORD PTR SS:[ESP],B8002C93
003B000C  RETN
003B000D  PUSH 40615A
003B0012  XOR DWORD PTR SS:[ESP],B8002C93
003B0019  RETN
003B001A  PUSH 40615F
003B001F  XOR DWORD PTR SS:[ESP],B8002C93
003B0026  RETN
003B0027  PUSH 406168
003B002C  XOR DWORD PTR SS:[ESP],B8002C93
003B0033  RETN
003B0034  PUSH 40616D
003B0039  XOR DWORD PTR SS:[ESP],B8002C93
003B0040  RETN
003B0041  PUSH 406188
003B0046  XOR DWORD PTR SS:[ESP],B8002C93
003B004D  RETN
003B004E  PUSH 40618D
003B0053  XOR DWORD PTR SS:[ESP],B8002C93
003B005A  RETN
003B005B  PUSH 40619F
003B0060  XOR DWORD PTR SS:[ESP],B8002C93
003B0067  RETN
003B0068  PUSH 4061B4
003B006D  XOR DWORD PTR SS:[ESP],B8002C93
003B0074  RETN
003B0075  PUSH 4061C9
003B007A  XOR DWORD PTR SS:[ESP],B8002C93
003B0081  RETN
003B0082  PUSH 4061DE
003B0087  XOR DWORD PTR SS:[ESP],B8002C93
003B008E  RETN
003B008F  PUSH 4061E7
003B0094  XOR DWORD PTR SS:[ESP],B8002C93
003B009B  RETN
003B009C  PUSH 4061EC
003B00A1  XOR DWORD PTR SS:[ESP],B8002C93
003B00A8  RETN
003B00A9  PUSH 40620A
003B00AE  XOR DWORD PTR SS:[ESP],B8002C93
003B00B5  RETN
003B00B6  PUSH 406218
003B00BB  XOR DWORD PTR SS:[ESP],CC002C93
003B00C2  RETN
003B00C3  PUSH 40622E
003B00C8  XOR DWORD PTR SS:[ESP],CC002C93
003B00CF  RETN
003B00D0  PUSH 406233
003B00D5  XOR DWORD PTR SS:[ESP],CC002C93
003B00DC  RETN
003B00DD  PUSH 406238
003B00E2  XOR DWORD PTR SS:[ESP],CC002C93
003B00E9  RETN
003B00EA  PUSH 40623D
003B00EF  XOR DWORD PTR SS:[ESP],CC002C93
003B00F6  RETN
003B00F7  PUSH 406242
003B00FC  XOR DWORD PTR SS:[ESP],CC002C93
003B0103  RETN
003B0104  PUSH 406250
003B0109  XOR DWORD PTR SS:[ESP],CC002C93
003B0110  RETN
003B0111  PUSH 406255
003B0116  XOR DWORD PTR SS:[ESP],CC002C93
003B011D  RETN
003B011E  PUSH 40625A
003B0123  XOR DWORD PTR SS:[ESP],CC002C93
003B012A  RETN
003B012B  PUSH 406268
003B0130  XOR DWORD PTR SS:[ESP],CC002C93
003B0137  RETN
003B0138  PUSH 40626D
003B013D  XOR DWORD PTR SS:[ESP],CC002C93
003B0144  RETN
003B0145  PUSH 40627B
003B014A  XOR DWORD PTR SS:[ESP],CC002C93
003B0151  RETN
003B0152  PUSH 406296
003B0157  XOR DWORD PTR SS:[ESP],CC002C93
003B015E  RETN
003B015F  PUSH 4062B1
003B0164  XOR DWORD PTR SS:[ESP],CC002C93
003B016B  RETN
003B016C  PUSH 4062B6
003B0171  XOR DWORD PTR SS:[ESP],CC002C93
003B0178  RETN
003B0179  PUSH 4062C9
003B017E  XOR DWORD PTR SS:[ESP],CC002C93
003B0185  RETN
003B0186  PUSH 4062DC
003B018B  XOR DWORD PTR SS:[ESP],CC002C93
003B0192  RETN
003B0193  PUSH 4062EF
003B0198  XOR DWORD PTR SS:[ESP],CC002C93
003B019F  RETN
003B01A0  PUSH 406306
003B01A5  XOR DWORD PTR SS:[ESP],CC002C93
003B01AC  RETN
003B01AD  PUSH 406314
003B01B2  XOR DWORD PTR SS:[ESP],CC002C93
003B01B9  RETN
003B01BA  PUSH 406322
003B01BF  XOR DWORD PTR SS:[ESP],CC002C93
003B01C6  RETN

再写个代码恢复IAT表:

00406000 >PUSHAD
00406001  PUSHFD
00406002  MOV EAX,JustUnpa.00401000
00406007  MOV EDX,DWORD PTR DS:[EAX]
00406009  CMP EDX,0
0040600C  JE SHORT JustUnpa.00406013
0040600E  MOV ECX,DWORD PTR DS:[EDX+1]
00406011  MOV DWORD PTR DS:[EAX],ECX
00406013  LEA EAX,DWORD PTR DS:[EAX+4]
00406016  CMP EAX,JustUnpa.00401098                ; ASCII "ZwOpenSection"
0040601B  JE SHORT JustUnpa.00406023
0040601D  JMP SHORT JustUnpa.00406007
0040601F  NOP
00406020  NOP
00406021  NOP
00406022  NOP
00406023  POPFD
00406024  POPAD
00406025  JMP JustUnpa.004019A5

恢复后的表:
00401000  06 63 40 00 14 63 40 00  c@.c@.
00401008  22 63 40 00 00 00 00 00  "c@.....
00401010  47 61 40 00 5A 61 40 00  Ga@.Za@.
00401018  5F 61 40 00 68 61 40 00  _a@.ha@.
00401020  6D 61 40 00 88 61 40 00  ma@.坅@.
00401028  8D 61 40 00 9F 61 40 00  峚@.焌@.
00401030  B4 61 40 00 C9 61 40 00  碼@.蒩@.
00401038  DE 61 40 00 E7 61 40 00  轪@.鏰@.
00401040  EC 61 40 00 0A 62 40 00  靉@..b@.
00401048  18 62 40 00 2E 62 40 00  b@..b@.
00401050  33 62 40 00 38 62 40 00  3b@.8b@.
00401058  3D 62 40 00 42 62 40 00  =b@.Bb@.
00401060  50 62 40 00 55 62 40 00  Pb@.Ub@.
00401068  5A 62 40 00 68 62 40 00  Zb@.hb@.
00401070  6D 62 40 00 00 00 00 00  mb@.....
00401078  7B 62 40 00 96 62 40 00  {b@.朾@.
00401080  B1 62 40 00 B6 62 40 00  眀@.禸@.
00401088  C9 62 40 00 DC 62 40 00  蒪@.躡@.
00401090  EF 62 40 00 00 00 00 00  颾@.....

使用ImportREC的数据追踪1就可以得到正确的IAT表:

目标 : C:\Downloads\justunpack\JustUnpack.exe
OEP: 000019A5  IATRVA: 00001000  IAT大小: 00000098

FThunk: 00001000  NbFunc: 00000003
1  00001000  advapi32.dll  010E  GetSecurityInfo
1  00001004  advapi32.dll  021F  SetEntriesInAclA
1  00001008  advapi32.dll  0234  SetSecurityInfo

FThunk: 00001010  NbFunc: 00000019
1  00001010  kernel32.dll  0252  MapViewOfFile
1  00001014  kernel32.dll  0031  CloseHandle
1  00001018  kernel32.dll  0355  UnmapViewOfFile
1  0000101C  kernel32.dll  0170  GetModuleHandleA
1  00001020  kernel32.dll  00B1  ExitProcess
1  00001024  kernel32.dll  0104  GetCommandLineA
1  00001028  kernel32.dll  0246  LocalFree
1  0000102C  kernel32.dll  0203  HeapFree
1  00001030  kernel32.dll  01FD  HeapAlloc
1  00001034  kernel32.dll  0207  HeapReAlloc
1  00001038  kernel32.dll  00EB  FreeLibrary
1  0000103C  kernel32.dll  023C  LoadLibraryA
1  00001040  kernel32.dll  0192  GetProcAddress
1  00001044  kernel32.dll  0365  VirtualAlloc
1  00001048  kernel32.dll  028C  QueryPerformanceCounter
1  0000104C  kernel32.dll  01CC  GetTickCount
1  00001050  kernel32.dll  0139  GetCurrentThreadId
1  00001054  kernel32.dll  0137  GetCurrentProcessId
1  00001058  kernel32.dll  01B8  GetSystemTimeAsFileTime
1  0000105C  kernel32.dll  016E  GetModuleFileNameA
1  00001060  kernel32.dll  0341  TerminateProcess
1  00001064  kernel32.dll  0136  GetCurrentProcess
1  00001068  kernel32.dll  02BF  RtlUnwind
1  0000106C  kernel32.dll  0215  InterlockedExchange
1  00001070  kernel32.dll  036D  VirtualQuery

FThunk: 00001078  NbFunc: 00000007
1  00001078  user32.dll  009F  DialogBoxParamA
1  0000107C  user32.dll  0200  PostMessageA
1  00001080  user32.dll  01DD  MessageBoxA
1  00001084  user32.dll  01BC  LoadIconA
1  00001088  user32.dll  0248  SetClassLongA
1  0000108C  user32.dll  0237  SendDlgItemMessageA
1  00001090  user32.dll  00C7  EndDialog

修复dump下的程序,删除壳的段,用LordPE重建程序,完成脱壳。
脱壳版下载:
http://www.fcgchina.com/fly/attachment.php?aid=156


                                               fxyang
                                              2005.2.4

  • 标 题: 答复
  • 作 者:forgot
  • 时 间:2005-02-04 12:12

fxyang:这段是anti dump,你用lordpe correct imagesize的话就没用了,od dump直接可以忽略掉

003A094B  PUSHAD
003A094C  MOV EAX,30
003A0951  PUSH DWORD PTR FS:[EAX]
003A0954  POP EAX
003A0955  TEST EAX,EAX
003A0957  JS SHORT 003A0968
003A0959  MOV EAX,DWORD PTR DS:[EAX+C]
003A095C  MOV EAX,DWORD PTR DS:[EAX+C]
003A095F  MOV DWORD PTR DS:[EAX+20],-1
003A0966  JMP SHORT 003A0984
003A0968  PUSH 0
003A096A  CALL DWORD PTR DS:[<&KERNEL32.GetModuleHandleA>]     ; kernel32.GetModuleHandleA
003A0970  TEST EDX,EDX
003A0972  JNS SHORT 003A0984
003A0974  CMP DWORD PTR DS:[EDX+8],-1
003A0978  JNZ SHORT 003A0984
003A097A  MOV EDX,DWORD PTR DS:[EDX+4]
003A097D  MOV DWORD PTR DS:[EDX+50],-1
003A0984  POPAD
003A0985  RETN