首页
社区
课程
招聘
关于unicorn去搞VMP的iat那点事
发表于: 2021-12-27 11:00 27228

关于unicorn去搞VMP的iat那点事

2021-12-27 11:00
27228

首先感谢!浩哥!龟哥!二木哥!小路哥哥!黎叔!存哥!曾哥!荣神!醒哥!砍老板!震哥!2st师傅!枪手师傅!hook师傅!VF师傅!彭指导!等等大师傅们的教导!!!!

其实看了很多帖子,关于unicorn去搞vmp的事情,最开始来源于 大表哥的github项目 unicorn_pe,于是自己也研究了一下unicorn和capstone的东西感觉很好用!于是乎准备写一下,一起来学!呜呜呜,本人技术比较垃圾,写的可能大师傅们几乎都会,所以不喜勿喷,留情!

其实关于vmp去找OEP的这一步我觉得是很关键的,因为在最开始加完vmp后,可以发现对应的text段,data段都是空的

image-20211227101512991

image-20211227101529683

可以看到是没有数据的,vmp在运行后,会动态的解密,这样text段就会有数据了

一般我们写代码都会用到像编译器这种东西,用什么vs呀,易语言呀,vc++ 6.0呀 等等等的,他们这些东西编译出来的都会有一点框架,所以我们一般对相应的遇见的第一个api下段就可以找到入口点,一般的api也就是GetVersion,GetSystemTimeAsFileTime,如果下段后的栈回溯在text段内,那么我们继续回溯即可

可以看到相应的可以对上了,我们直接溯到call jmp的位置进行dump即可

image-20211227102849337

我们先分析没有加壳的代码

image-20211223104539097

可以发现call 为 FF 15 call (当然还有 FF 25) (mov reg,iat call reg / jmp reg)

这里以 FF 15 call 为例子,这里面都变成了 E8 call,因为要保持原来的6个字节的问题 所以一般 都是 push reg call xxxx / call xxxx ret

image-20211223104817486

以第一个 push eax call sub_4FBE6B 为例子

可以看到上面的流程最后一个retn 又因为xchg交换了 eax和esp的内存,所以可以判定出 iat的地址有关系的几句汇编是

iat = [28153F+0E151]+4C084ACD

image-20211223105335161

可以看到表示的没有问题

这里我使用的是unicorn来获取到对应的api,因为在恶意样本的操作的时候,一定会用到api做一些恶意的功能,也会对分析来说多了一点帮助

使用方法:

用x64dbg转到对应的段的内存布局进行文件dump

讲文件放在项目的目录下,以及将当前环境的reg的值填入(这里我延用了周壑老师的代码,进行了修改)

image-20211223105529537

因为周壑老师说的是抛异常的形式,那么我就按照异常的形式来捕获iat,因为对于api的这些内存的位置,我是没有map到内存中的,所以遇到iat就会出现异常

因为我看了很多地方都是E8 call,而且在text段中 call的位置为vmp段,所以直接暴搜E8 call即可,把这些位置记录下来然后遍历即可,根据ldr以及pe的解析就可以搞出来iat啦!

效果:

image-20211223105749933

 
 
 
 
 
 
 
 
 

[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 12
支持
分享
最新回复 (20)
雪    币: 4709
活跃值: (1605)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
源神!
2021-12-27 11:09
0
雪    币: 4794
活跃值: (4494)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
vmp是如何计算出将要执行的下一条指令的 它是从哪知道的   这些基础门槛我都分析过 但关于vmp是如何计算出下一条该要执行的指令我没分析过 
2021-12-27 11:38
0
雪    币: 4794
活跃值: (4494)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
003310D4    c0c4 52         rol ah,0x52
003310D7    D2C8            ror al,cl
003310D9    c0dc 57         rcr ah,0x57
003310DC    8D92 81D982CC   lea edx,dword ptr ds:[edx-0x337D267F]
003310E2    c1e0 26         shl eax,0x26
003310E5    66:0FBDC7       bsr ax,di
003310E9    3BEA            cmp ebp,edx
003310EB    F7D2            not edx
003310ED    8D92 FB71961D   lea edx,dword ptr ds:[edx+0x1D9671FB]
003310F3    33DA            xor ebx,edx
003310F5    81EE 04000000   sub esi,0x4
003310FB    0facc0 c5       shrd eax,eax,0xc5
003310FF    F8              clc
00331100    8916            mov dword ptr ds:[esi],edx
00331102    66:c1e8 c2      shr ax,0xc2
00331106    0FBAF0 C0       btr eax,0xC0
0033110A    8B07            mov eax,dword ptr ds:[edi]
0033110C    66:81FC 4444    cmp sp,0x4444

像这样lea edx,dword ptr ds:[edx-0x337D267F]的它是怎么知道要去这个偏移的地址处取数据的

2021-12-27 11:55
0
雪    币: 4794
活跃值: (4494)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
edx-0x337D267F 这些偏移每次重新运行程序貌似还都会变化
2021-12-27 11:56
0
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark一下
2021-12-27 12:53
0
雪    币: 8466
活跃值: (5066)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
7
源神!
2021-12-27 15:53
0
雪    币: 2134
活跃值: (3911)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
8
源神!
2021-12-27 15:54
0
雪    币: 3998
活跃值: (5136)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
源神!
2021-12-27 16:50
0
雪    币: 341
活跃值: (1005)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
木志本柯 vmp是如何计算出将要执行的下一条指令的 它是从哪知道的 这些基础门槛我都分析过 但关于vmp是如何计算出下一条该要执行的指令我没分析过
看看这个是不是:https://blog.csdn.net/pureman_mega/article/details/121750280
2021-12-27 16:56
0
雪    币: 1918
活跃值: (6420)
能力值: ( LV7,RANK:118 )
在线值:
发帖
回帖
粉丝
11
源神牛逼
2021-12-27 17:28
0
雪    币: 1918
活跃值: (6420)
能力值: ( LV7,RANK:118 )
在线值:
发帖
回帖
粉丝
12
快进到源vmp unpacker 
2021-12-27 17:30
0
雪    币: 2042
活跃值: (4950)
能力值: ( LV13,RANK:278 )
在线值:
发帖
回帖
粉丝
13
源神牛逼!!!!!!
2021-12-27 17:33
0
雪    币: 924
活跃值: (2050)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
源神源神
2021-12-27 17:53
0
雪    币: 7851
活跃值: (2089)
能力值: ( LV4,RANK:42 )
在线值:
发帖
回帖
粉丝
15
源神!
2021-12-27 20:51
0
雪    币: 9227
活跃值: (6445)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
牛逼
2021-12-28 03:37
0
雪    币: 246
活跃值: (4527)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
17
IAT没用,不管是内核还是应用层,都是采用动态获取函数地址调用的,IAT中能看到的都是让你看到的
2021-12-28 11:47
0
雪    币: 139
活跃值: (1180)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
源神果然秀
2022-1-14 20:13
0
雪    币: 132
活跃值: (543)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
这是vmp几啊
2022-2-6 11:29
0
雪    币: 1935
活跃值: (4185)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark 好
2022-11-20 19:24
0
雪    币: 424
活跃值: (992)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
21
很好,这个有启发性
2023-8-16 12:04
0
游客
登录 | 注册 方可回帖
返回
//