看见大家提到的ExeCryptor壳的IAT都是用
0x00000000隔开的标准形式,用脚本可以解开。
我现在遇到这种IAT:
006AD000 008D3196 test.008D3196
006AD004 0088685D test.0088685D
006AD008 008A8529 test.008A8529
006AD00C 008BBF31 test.008BBF31
006AD010 008A215C test.008A215C
006AD014 008C27E8 test.008C27E8
006AD018 00000000
006AD01C 00000000
006AD020 00000001
006AD024 00000002
006AD028 00000003
006AD02C 00000004
006AD030 00000005
006AD034 00000006
006AD06C 00000000
006AD070 00889A45 test.00889A45
006AD074 0043A627 test.0043A627
006AD078 008B4B39 test.008B4B39
这些序号也是API地址。
改动一下脚本,避开0x00000001这种序号形式的项,可以解开其它正常项的API地址,
006AD000 >77DCC41B advapi32.RegOpenKeyA
006AD004 >77DA7883 advapi32.RegQueryValueExA
006AD008 >77DA761B advapi32.RegOpenKeyExA
006AD00C >77DCD5BB advapi32.RegCreateKeyA
006AD010 >77DAEBE7 advapi32.RegSetValueExA
006AD014 >77DA6BF0 advapi32.RegCloseKey
006AD018 00000000
006AD01C 00000000
006AD020 00000001
006AD024 00000002
006AD028 00000003
006AD02C 00000004
006AD030 00000005
006AD034 00000006
006AD06C 00000000
006AD070 >7C801EEE kernel32.GetStartupInfoA
006AD074 >7C81082F kernel32.CreateThread
那对于这些序号形式的,怎么处理,老大们给点思路。
还有个问题:
这个时候已经确定OEP了,dump(只修复了找到的IAT 项)并处理stolen code后,
0065116C > $ 6A 60 push 60
0065116E . 68 C0316D00 push 006D31C0
00651173 . E8 F02E0000 call 00654068
00651178 . BF 94000000 mov edi, 94
0065117D . 8BC7 mov eax, edi
0065117F . E8 8CD9FFFF call 0064EB10
00651184 . 8965 E8 mov dword ptr [ebp-18], esp
00651187 . 8BF4 mov esi, esp
00651189 . 893E mov dword ptr [esi], edi
0065118B . 56 push esi ; /pVersionInformation
0065118C . FF15 50D16A00 call dword ptr [<&kernel32.GetVersionExA>] ; \GetVersionExA
00651192 . 8B4E 10 mov ecx, dword ptr [esi+10]
00651195 . 890D 28AD7300 mov dword ptr [73AD28], ecx
0065119B . 8B46 04 mov eax, dword ptr [esi+4]
0065119E . A3 34AD7300 mov dword ptr [73AD34], eax
006511A3 . 8B56 08 mov edx, dword ptr [esi+8]
006511A6 . 8915 38AD7300 mov dword ptr [73AD38], edx
006511AC . 8B76 0C mov esi, dword ptr [esi+C]
006511AF . 81E6 FF7F0000 and esi, 7FFF
006511B5 . 8935 2CAD7300 mov dword ptr [73AD2C], esi
006511BB . 83F9 02 cmp ecx, 2
006511BE . 74 0C je short 006511CC
006511C0 . 81CE 00800000 or esi, 8000
006511C6 . 8935 2CAD7300 mov dword ptr [73AD2C], esi
006511CC > C1E0 08 shl eax, 8
006511CF . 03C2 add eax, edx
006511D1 . A3 30AD7300 mov dword ptr [73AD30], eax
006511D6 . 33F6 xor esi, esi
006511D8 . 56 push esi ; /pModule => NULL
006511D9 . 8B3D 7CD16A00 mov edi, dword ptr [<&kernel32.GetModuleH>; |kernel32.GetModuleHandleA
006511DF . FFD7 call edi ; \GetModuleHandleA
发现在调用GetCommandLineA之后,调用GetStartInfoA之前,
代码还是会跳转到stolen code地址范围内(jmp 00651183),请问这是什么原因?
如果更改那个跳转指令,程序也可以出现界面,但过一会就退出了。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法