首页
社区
课程
招聘
请教ExeCryptor壳的IAT解密问题
发表于: 2007-2-24 16:12 4551

请教ExeCryptor壳的IAT解密问题

2007-2-24 16:12
4551
看见大家提到的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虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2791
活跃值: (6509)
能力值: ( LV13,RANK:409 )
在线值:
发帖
回帖
粉丝
2
不知道是不是我DUMP的时候代码还没解压完?

我是通过脚本找到OEP的,不过原来的脚本不能完整运行,我更改了一下脚本
,就是NOP掉了ZwCreateThread中的call,脚本就可以执行完。
2007-2-25 09:01
0
雪    币: 226
活跃值: (179)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
原因很简单,因为EXEC放再OEP那儿的代码,是它壳要用的,直接修复还原以前的代码会破坏它壳的结构,所以会出错

解决办法也有,你再执行完被抽掉的OEP代码后,想办法恢复被壳替换的代码即可解决这个问题~
2007-2-25 10:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
请问你们是如何手动脱壳的啊!
我DUMP后程序老是修复不了啊,要么“应用程序运行错误。。。”
要么“遇到问题要关闭,。。。。”
http://dong.9yz.com.cn/Article/Images/biglogo.gif
2007-2-25 10:18
0
雪    币: 2791
活跃值: (6509)
能力值: ( LV13,RANK:409 )
在线值:
发帖
回帖
粉丝
5
如果你程序都不能加载,可能就是IAT修复的问题了
2007-2-25 11:56
0
游客
登录 | 注册 方可回帖
返回
//