原程序下载地址:
http://www.dataexplore.net/software/dataexplore_setup.exe
查壳:PEID94 Themida/WinLicense V1.8.X-V2.X -> Oreans Technologies * Sign.By.fly * 20080131 [Overlay] *
PEID95 Themida 1.8.x.x -> Oreans Technologies [Overlay] *
脚本侦壳为 1910-1930 Themida Professional 1.910
脱壳过程:
OD载入:
0088B014 > B8 00000000 MOV EAX,0
0088B019 60 PUSHAD
0088B01A 0BC0 OR EAX,EAX
0088B01C 74 68 JE SHORT DataExpl.0088B086
0088B01E E8 00000000 CALL DataExpl.0088B023
0088B023 58 POP EAX
0088B024 05 53000000 ADD EAX,53
0088B029 8038 E9 CMP BYTE PTR DS:[EAX],0E9
0088B02C 75 13 JNZ SHORT DataExpl.0088B041
0088B02E 61 POPAD
0088B02F EB 45 JMP SHORT DataExpl.0088B076
0088B031 DB2D 37B08800 FLD TBYTE PTR DS:[88B037]
0088B037 FFFF ??? ; 未知命令
0088B039 FFFF ??? ; 未知命令
0088B03B FFFF ??? ; 未知命令
0088B03D FFFF ??? ; 未知命令
0088B03F 3D 40E80000 CMP EAX,0E840
0088B044 0000 ADD BYTE PTR DS:[EAX],AL
0088B046 58 POP EAX
0088B047 25 00F0FFFF AND EAX,FFFFF000
0088B04C 33FF XOR EDI,EDI
运行脚本(ThemidaScript.for.V1.9.10+.0.4.By.fxyang.oSc)
005D0D08 68 F8F45C00 PUSH DataExpl.005CF4F8
005D0D0D 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
005D0D13 50 PUSH EAX
005D0D14 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10]
005D0D18 896C24 10 MOV DWORD PTR SS:[ESP+10],EBP
005D0D1C 8D6C24 10 LEA EBP,DWORD PTR SS:[ESP+10]
005D0D20 2BE0 SUB ESP,EAX
005D0D22 53 PUSH EBX
005D0D23 56 PUSH ESI
005D0D24 57 PUSH EDI
005D0D25 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
005D0D28 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
005D0D2B 50 PUSH EAX
005D0D2C 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
005D0D2F C745 FC FFFFFFF>MOV DWORD PTR SS:[EBP-4],-1
005D0D36 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
005D0D39 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
005D0D3C 64:A3 00000000 MOV DWORD PTR FS:[0],EAX
005D0D42 C3 RETN
005D0D43 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
查看OD堆栈数值:
0012FF8C 00B1F1DA DataExpl.00B1F1DA
0012FF90 0066CB20 DataExpl.0066CB20
记录此处值为 2
0012FF94 00000060
记录此处值为 1
0012FF98 2AF8609C
0012FF9C 0012FFE0
记录EIP 005D0D08 值为 3
F8运行到 RETN 返回
OD中CTRL+m 代码段 F2 ,F9 继续 停在此处:
005CEDD0 3D 00100000 CMP EAX,1000
005CEDD5 73 0E JNB SHORT DataExpl.005CEDE5
005CEDD7 F7D8 NEG EAX
005CEDD9 03C4 ADD EAX,ESP
005CEDDB 83C0 04 ADD EAX,4
005CEDDE 8500 TEST DWORD PTR DS:[EAX],EAX
005CEDE0 94 XCHG EAX,ESP
005CEDE1 8B00 MOV EAX,DWORD PTR DS:[EAX]
005CEDE3 50 PUSH EAX
005CEDE4 C3 RETN
查看寄存器 EAX 00000094
记录当前EIP 005CEDD0 为4
执行到返回
OD中CTRL+m 代码段 F2 ,F9 继续 停在此处:
010DD700 FF33 PUSH DWORD PTR DS:[EBX] ; kernel32.GetVersionExA
010DD702 ^ E9 DB31FBFF JMP 010908E2
010DD707 80FB 02 CMP BL,2
010DD70A ^ 0F85 5BC3FDFF JNZ 010B9A6B
010DD710 68 7A3F0000 PUSH 3F7A
010DD715 890C24 MOV DWORD PTR SS:[ESP],ECX
010DD718 B9 EC050000 MOV ECX,5EC
010DD71D 81C1 CE17B863 ADD ECX,63B817CE
010DD723 01F9 ADD ECX,EDI
010DD725 81E9 CE17B863 SUB ECX,63B817CE
010DD72B 0001 ADD BYTE PTR DS:[ECX],AL
010DD72D E9 2A9B0600 JMP 0114725C
窗口显示 DS:[006474E0]=7C812B7E (kernel32.GetVersionExA)
006474E0 记录为 5
F8 OD中CTRL+m 代码段 F2 ,F9 继续 停在此处:
010D6447 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
010D6449 68 2D2E0000 PUSH 2E2D
010D644E 890C24 MOV DWORD PTR SS:[ESP],ECX
010D6451 FF3424 PUSH DWORD PTR SS:[ESP]
010D6454 59 POP ECX
010D6455 83C4 04 ADD ESP,4
010D6458 8B3C24 MOV EDI,DWORD PTR SS:[ESP]
010D645B 55 PUSH EBP
010D645C E9 663F0100 JMP 010EA3C7
010D6461 83C4 04 ADD ESP,4
010D6464 53 PUSH EBX
010D6465 BB 8101EF77 MOV EBX,77EF0181
010D646A 01D8 ADD EAX,EBX
010D646C 8B1C24 MOV EBX,DWORD PTR SS:[ESP]
查看寄存器 EAX
0075F368 此处记录为6
F7 F8 OD中CTRL+m 代码段 F2 ,F9 继续 停在此处:
005CC51B A3 74F37500 MOV DWORD PTR DS:[75F374],EAX
005CC520 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
005CC523 8915 78F37500 MOV DWORD PTR DS:[75F378],EDX
005CC529 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C]
005CC52C 81E6 FF7F0000 AND ESI,7FFF
005CC532 8935 6CF37500 MOV DWORD PTR DS:[75F36C],ESI
005CC538 83F9 02 CMP ECX,2
005CC53B 74 0C JE SHORT DataExpl.005CC549
005CC53D 81CE 00800000 OR ESI,8000
005CC543 8935 6CF37500 MOV DWORD PTR DS:[75F36C],ESI
005CC549 C1E0 08 SHL EAX,8
005CC54C 03C2 ADD EAX,EDX
005CC54E A3 70F37500 MOV DWORD PTR DS:[75F370],EAX
005CC553 33F6 XOR ESI,ESI
005CC555 56 PUSH ESI
005CC556 8B3D 08756400 MOV EDI,DWORD PTR DS:[647508] ; kernel32.GetModuleHandleA
005CC55C FFD7 CALL EDI
005CC55E 66:8138 4D5A CMP WORD PTR DS:[EAX],5A4D
005CC563 75 1F JNZ SHORT DataExpl.005CC584
005CC565 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C]
005CC568 03C8 ADD ECX,EAX
005CC56A 8139 50450000 CMP DWORD PTR DS:[ECX],4550
005CC570 75 12 JNZ SHORT DataExpl.005CC584
标准的VC7格式,向上看。
005CC4E8 C3 RETN
005CC4E9 D228 SHR BYTE PTR DS:[EAX],CL
OEP
005CC4EB 55 PUSH EBP
005CC4EC 7B E8 JPO SHORT DataExpl.005CC4D6
005CC4EE AE SCAS BYTE PTR ES:[EDI]
005CC4EF B7 AA MOV BH,0AA
005CC4F1 4E DEC ESI
005CC4F2 FE ??? ; 未知命令
005CC4F3 DE02 FIADD WORD PTR DS:[EDX]
005CC4F5 A0 F2E544A3 MOV AL,BYTE PTR DS:[A344E5F2]
005CC4FA 8990 5AFFFA27 MOV DWORD PTR DS:[EAX+27FAFF5A],EDX
005CC500 2F DAS
005CC501 71 42 JNO SHORT DataExpl.005CC545
005CC503 10AA 51A304BE ADC BYTE PTR DS:[EDX+BE04A351],CH
005CC509 5D POP EBP
005CC50A 8472 12 TEST BYTE PTR DS:[EDX+12],DH
005CC50D 850F TEST DWORD PTR DS:[EDI],ECX
005CC50F 5B POP EBX
005CC510 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O 命令
005CC511 A9 79E02B2A TEST EAX,2A2BE079
005CC516 AB STOS DWORD PTR ES:[EDI]
005CC517 FA CLI
005CC518 7B E7 JPO SHORT DataExpl.005CC501
005CC51A DCA3 74F37500 FSUB QWORD PTR DS:[EBX+75F374]
005CC520 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
005CC523 8915 78F37500 MOV DWORD PTR DS:[75F378],EDX
005CC529 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C]
005CC52C 81E6 FF7F0000 AND ESI,7FFF
005CC532 8935 6CF37500 MOV DWORD PTR DS:[75F36C],ESI
OEP 1CC4E9 汗,被偷这么多代码
看一下标准的VC7的原码:
00463558 > $ 6A 60 PUSH 60 ; (Initial CPU selection) 1
0046355A . 68 C82A4900 PUSH ExcelSca.00492AC8 2
0046355F . E8 68380000 CALL ExcelSca.00466DCC 3
00463564 . BF 94000000 MOV EDI,94
00463569 . 8BC7 MOV EAX,EDI
0046356B . E8 60230000 CALL ExcelSca.004658D0 4
00463570 . 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
00463573 . 8BF4 MOV ESI,ESP
00463575 . 893E MOV DWORD PTR DS:[ESI],EDI
00463577 . 56 PUSH ESI ; /pVersionInformation
00463578 . FF15 A4B24800 CALL DWORD PTR DS:[<&KERNEL32.GetVersion>; \GetVersionExA 5
0046357E . 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10]
00463581 . 890D ECCC4A00 MOV DWORD PTR DS:[4ACCEC],ECX 6
00463587 . 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4]
0046358A . A3 F8CC4A00 MOV DWORD PTR DS:[4ACCF8],EAX
0046358F . 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
00463592 . 8915 FCCC4A00 MOV DWORD PTR DS:[4ACCFC],EDX
00463598 . 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C]
0046359B . 81E6 FF7F0000 AND ESI,7FFF
004635A1 . 8935 F0CC4A00 MOV DWORD PTR DS:[4ACCF0],ESI
004635A7 . 83F9 02 CMP ECX,2
004635AA . 74 0C JE SHORT ExcelSca.004635B8
004635AC . 81CE 00800000 OR ESI,8000
004635B2 . 8935 F0CC4A00 MOV DWORD PTR DS:[4ACCF0],ESI
004635B8 > C1E0 08 SHL EAX,8
004635BB . 03C2 ADD EAX,EDX
004635BD . A3 F4CC4A00 MOV DWORD PTR DS:[4ACCF4],EAX
004635C2 . 33F6 XOR ESI,ESI
004635C4 . 56 PUSH ESI ; /pModule => NULL
004635C5 . 8B3D 98B24800 MOV EDI,DWORD PTR DS:[<&KERNEL32.GetModu>; |kernel32.GetModuleHandleA
004635CB . FFD7 CALL EDI ; \GetModuleHandleA
004635CD . 66:8138 4D5A CMP WORD PTR DS:[EAX],5A4D
004635D2 . 75 1F JNZ SHORT ExcelSca.004635F3
004635D4 . 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C]
004635D7 . 03C8 ADD ECX,EAX
004635D9 . 8139 50450000 CMP DWORD PTR DS:[ECX],4550
004635DF . 75 12 JNZ SHORT ExcelSca.004635F3
004635E1 . 0FB741 18 MOVZX EAX,WORD PTR DS:[ECX+18]
004635E5 . 3D 0B010000 CMP EAX,10B
004635EA . 74 1F JE SHORT ExcelSca.0046360B
004635EC . 3D 0B020000 CMP EAX,20B
004635F1 . 74 05 JE SHORT ExcelSca.004635F8
004635F3 > 8975 E4 MOV DWORD PTR SS:[EBP-1C],ESI
修复代码 LORDPE dump 程序。。。。。
OEP 1CC4E9 IAT 247000 长度:CE4 修复DUMP的文件。
执行一闪而过。OD载入,下GetFileSize 断点
005F1C77 8BF9 MOV EDI,ECX
005F1C79 50 PUSH EAX
005F1C7A FF77 04 PUSH DWORD PTR DS:[EDI+4]
005F1C7D FF15 9C756400 CALL DWORD PTR DS:[64759C] ; kernel32.GetFileSize
005F1C83 83F8 FF CMP EAX,-1
005F1C86 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
005F1C89 75 19 JNZ SHORT DataExpl.005F1CA4
005F1C8B 56 PUSH ESI
005F1C8C 8B35 60736400 MOV ESI,DWORD PTR DS:[647360] ; ntdll.RtlGetLastWin32Error
005F1C92 FFD6 CALL ESI
005F1C94 85C0 TEST EAX,EAX
005F1C96 74 0B JE SHORT DataExpl.005F1CA3
005F1C98 FF77 0C PUSH DWORD PTR DS:[EDI+C]
005F1C9B FFD6 CALL ESI
005F1C9D 50 PUSH EAX
005F1C9E E8 10250000 CALL DataExpl.005F41B3
005F1CA3 5E POP ESI
005F1CA4 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
005F1CA7 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
005F1CAA 5F POP EDI
005F1CAB C9 LEAVE
005F1CAC C3 RETN
返回后向下看:
0045D758 /EB 06 JMP SHORT DataExpl.0045D760
0045D75A |8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX]
0045D760 \0108 ADD DWORD PTR DS:[EAX],ECX
0045D762 83C0 04 ADD EAX,4
0045D765 3D 447E6A00 CMP EAX,DataExpl.006A7E44
0045D76A ^ 7C F4 JL SHORT DataExpl.0045D760
0045D76C 3B4C2E FC
CMP ECX,DWORD PTR DS:[ESI+EBP-4] 比较文件长度。
0045D770 74 18 JE SHORT DataExpl.0045D78A 不跳EXIT。
0045D772 E8 30141B00 CALL DataExpl.0060EBA7
0045D777 8B40 04 MOV EAX,DWORD PTR DS:[EAX+4]
0045D77A 8B40 2C MOV EAX,DWORD PTR DS:[EAX+2C]
0045D77D 6A 00 PUSH 0
0045D77F 6A 00 PUSH 0
0045D781 6A 12 PUSH 12
0045D783 50 PUSH EAX
0045D784 FF15 88796400 CALL DWORD PTR DS:[647988] ; USER32.PostThreadMessageW
0045D78A C686 FFFF7F00 4>MOV BYTE PTR DS:[ESI+7FFFFF],4D
0045D791 C686 FEFF7F00 5>MOV BYTE PTR DS:[ESI+7FFFFE],5A
两种方法 第一种:只接改跳走即可。第二种,改文件最后四个字节为AEX的值也可。
保存OK。
执行 正常进入程序 5秒后 退出。惨
OD载入
005646DD . 52 PUSH EDX
005646DE . EB 11 JMP SHORT DataExpl.005646F1
005646E0 > 68 90AE6500 PUSH DataExpl.0065AE90
005646E5 . 68 80AE6500 PUSH DataExpl.0065AE80
005646EA . 8D85 70FDFFFF LEA EAX,DWORD PTR SS:[EBP-290]
005646F0 . 50 PUSH EAX
005646F1 > E8 619A0600 CALL DataExpl.005CE157
005646F6 . 83C4 0C ADD ESP,0C
005646F9 .
CC INT3 停在这,程序无法调试
005646FA . B9 02000000 MOV ECX,2
005646FF . 894D D4 MOV DWORD PTR SS:[EBP-2C],ECX
00564702 . B8 20000000 MOV EAX,20
00564707 . 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX
0056470A . 8945 DC MOV DWORD PTR SS:[EBP-24],EAX
0056470D . 894D E0 MOV DWORD PTR SS:[EBP-20],ECX
00564710 . 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
00564713 . 51 PUSH ECX
00564714 . 57 PUSH EDI
00564715 . 8BCE MOV ECX,ESI
00564717 . E8 24F9FFFF CALL DataExpl.00564040
难道壳脱的有问题,请高手指点。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!