首页
社区
课程
招聘
[求助]VMP程序如何分析
发表于: 2012-5-6 20:07 8880

[求助]VMP程序如何分析

2012-5-6 20:07
8880
请教各位大牛,程序VMP之后,堆栈,代码都乱了,应该如何分析与往上回溯呢?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
2
这是个难以形容的话题
2012-5-6 20:54
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
3
记得论坛上有大牛们写过VMP的分析文档
2012-5-6 21:00
0
雪    币: 201
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哪位有空儿帮分析个东西啊?可以有偿。。这个VMP太让我蛋疼了
2012-5-6 21:16
0
雪    币: 500
活跃值: (965)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
VMP要回溯...貌似不可能,只能说,通过分析来找到开头处!然后分析
2012-5-7 15:57
0
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
6
VM处理过的代码通过堆栈回溯,不太可能了。

一般用VM的处理都是整个Call处理,或许Call中部分Code处理。比如下面:
004CE2B8   .  55            push    ebp
004CE2B9   .  8BEC          mov     ebp, esp
004CE2BB   .  50            push    eax
004CE2BC   .  B8 08000000   mov     eax, 8
004CE2C1   >  81C4 04F0FFFF add     esp, -0FFC
004CE2C7   .  50            push    eax
004CE2C8   .  48            dec     eax
004CE2C9   .^ 75 F6         jnz     short 004CE2C1
004CE2CB   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004CE2CE   .  83C4 EC       add     esp, -14
004CE2D1   .  53            push    ebx
004CE2D2   .  56            push    esi
004CE2D3   .  57            push    edi
004CE2D4   .  8995 F87FFFFF mov     dword ptr [ebp+FFFF7FF8], edx
004CE2DA   .  8985 EC7FFFFF mov     dword ptr [ebp+FFFF7FEC], eax
004CE2E0   .- E9 A060DB21   jmp     22284385                         ;  这里跳到了VM里面处理。在Runtrace的记录中,004CE2E0直接到了另外一个内存片地址。这里肯定是Call的入口或者附近了。
..............省略XXX行.............

22284385    68 38952722     push    22279538                         ; ASCII "筑!広"
2228438A  ^ E9 51F5FEFF     jmp     222738E0
222738E0    60              pushad
222738E1    9C              pushfd
222738E2    FC              cld
222738E3    E8 00000000     call    222738E8
222738E8    5F              pop     edi
222738E9    81EF E8382722   sub     edi, 222738E8
222738EF    8BC7            mov     eax, edi
..............省略XXX行.............

我有个小技巧,用OD的Runtrace,在日志中,看ImageAddr,不在同一个内存片的连续2条指令。
那么很可能就是Call的入口地址。

方法很土,我很菜。
2012-5-9 01:11
0
雪    币: 201
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
可是VMP了之后都是循环,要怎么Runtrace?不是一直在循环。。
2012-5-13 18:00
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
VMP 是以 handler 模拟 x86,中间插入大量无效 handler 作为干扰 ,用 runtrace 跟踪要有技巧,
通用逆向模式(单指我等菜鸟,可用 脚本提取 或 写个插件记录提取关键数值,特定监控相关的 handler
那么基本简易被虚拟的算法,可完整逆向还原出来  。。。。。。 呵呵

(现行的所有关于 vmp 的插件没有做到(估计后台有,但没放出)
( 做的最出色的是该是 np 和 ximo ),至于老外的那个什么(名字忘了),我看就算了。。

把每个 handler 分析一次,这是最基本的入门
2012-5-13 19:23
0
游客
登录 | 注册 方可回帖
返回
//