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