首页
社区
课程
招聘
[原创]Vmprotect3.5.1 壹之型 — 暗月·宵之宫
发表于: 2022-2-19 00:52 36105

[原创]Vmprotect3.5.1 壹之型 — 暗月·宵之宫

2022-2-19 00:52
36105

在很久很久以前,,神奇的nooby有了个天才的想法,通过修改themida的引擎,使其强制输出了没有混淆和加密的程序,很轻松的就分析完了外壳逻辑和vm的逻辑,盖亚。
图片描述
通过nooby的想法,我们也将vmp3.5.1的引擎进行了修改,使其强行输出了没有混淆和vm后的代码,便于我们分析外壳和handler的逻辑,今天先来看看vmp的反调试原理,先将vmp配置成如下,避免其他功能的干扰。
图片描述
保护后得到了非常干净的程序。
图片描述

图片描述
如图,这时的入口不再是骇人的 push 0xXXXXXX / call xxxxxx
而是

sub_4F4664()是一个非常大的函数,vmp整个外壳的逻辑所在,内存保护,导入表保护,资源保护,压缩等等就是在这个函数中处理的。
第一步,先获取ntdll的版本信息
图片描述
根据ntdll的版本初始化一些HardCode,后面会用到
图片描述
接着我们直奔诸葛亮三轮车,vmp自己封装了一个从模块的导出表直接得到地址的函数,这种方式在shellcode中比较常见。
图片描述
比较完善,还还考虑了转发的情况
图片描述
接着通过GetExportAddress和上面通过ntdll定位的syscall序号进行反调试检测。
图片描述
vmp分别通过了
IsDebuggerPresent,CheckRemoteDebuggerPresent, NtQueryInformationProcess,以及ZwSetInformationThread进行用户态反调试,vmp在调用函数之前,会检测头部是不是0xCC,然后直接报错。
还有就是直接syscall直接调用比较有效。

图片描述
那么,剩下的贰之型·珠华弄月再说..

 
int start()
{
  if ( (unsigned int)sub_4F4664() == 1 )
    return mainCRTStartup();
  sub_4F44EC();
  return 0xDEADC0DE;
}
int start()
{

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

最后于 2022-2-19 02:50 被冰鸡编辑 ,原因:
收藏
免费 11
支持
分享
打赏 + 50.00雪花
打赏次数 1 雪花 + 50.00
 
赞赏  Editor   +50.00 2022/03/14 恭喜您获得“雪花”奖励,安全圈有你而精彩!
最新回复 (40)
雪    币: 29
活跃值: (1599)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
冰鸡师傅真厉害,一般引擎是不加密的,直接分析console就能翻到
2022-2-19 01:24
0
雪    币: 1860
活跃值: (3141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大佬厉害! 请教下大佬如何修改vmp的引擎!
2022-2-19 09:13
0
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
good idea看vmp分析从来没有这么清楚过, 哈哈
2022-2-19 09:16
0
雪    币: 6535
活跃值: (4491)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
思路很好,是不是可以举一反三去弄其他壳了, 怎么改引擎有没有人抛砖呢
2022-2-19 12:04
1
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
6b
2022-2-19 12:18
0
雪    币: 8739
活跃值: (5205)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
值得我辈学习。希望能多分享这样有营养的文章。
2022-2-19 13:23
0
雪    币: 2903
活跃值: (2828)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
太厉害了,都是大神级人物
2022-2-19 14:49
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
9
bin呢?
放个bin出来不是更好?
2022-2-19 15:47
1
雪    币: 2253
活跃值: (6603)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
10
66666666
2022-2-19 16:28
0
雪    币: 59
活跃值: (1481)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
赞一个!
2022-2-19 17:09
0
雪    币: 1790
活跃值: (3781)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
赞一个!期待后续文件及BIN文件。
2022-2-19 21:00
0
雪    币: 175
活跃值: (2501)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
期待放出VMP3.51版本。
2022-2-21 12:31
0
雪    币: 12329
活跃值: (9371)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
无bin无真相[手动狗头]
2022-2-21 13:53
0
雪    币: 6124
活跃值: (4641)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
15
放个bin!(伸手
2022-2-26 18:09
0
雪    币: 180
活跃值: (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
return 0xDEADC0DE 中 0xDEADC0DE 是什么东西
2022-2-27 10:23
0
雪    币: 914
活跃值: (2443)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
17
顾名思义,Dead Code
2022-3-1 09:39
0
雪    币: 199
活跃值: (816)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
能放个bin就更好了
2022-3-1 11:28
0
雪    币: 897
活跃值: (5916)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
为该程序的早期版本制作一个通用补丁。
2022-3-3 19:10
0
雪    币: 43
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
是不是可以举一反三去弄其他壳
2022-3-4 07:01
0
雪    币: 3876
活跃值: (163265)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21

楼主思路不错,学习了,顺便问一下,nooby的帖还能看到么,搜了下,没找到。研究了下,发现确实可以实现。期待楼主下一篇新作,无意班门弄斧,仅仅是感兴趣学习下而已。

回复很多人想要个bin,我发个初期研究成果吧,user-debug模式、VMP3.3、只去了VM没处理代码混淆的bin。

链接:https://pan.baidu.com/s/1T6pO311X5SrJ4Q2sXJSn8Q 

提取码:tsb9 

30天有效期,过期不补!have fun ~



2022-3-4 14:32
1
雪    币: 897
活跃值: (5916)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
飘零丶 楼主思路不错,学习了,顺便问一下,nooby的帖还能看到么,搜了下,没找到。研究了下,发现确实可以实现。期待楼主下一篇新作,无意班门弄斧,仅仅是感兴趣学习下而已。回复很多人想要个bin,我发个初期研究 ...
我们谈论的是保护器本身的原始补丁文件。
我们可以自己组装任何项目。
这对于生成虚拟指令的统计信息非常有用。
2022-3-4 18:28
0
雪    币: 3876
活跃值: (163265)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
Alfik 我们谈论的是保护器本身的原始补丁文件。 我们可以自己组装任何项目。 这对于生成虚拟指令的统计信息非常有用。
哦 那我理解有误 抱歉。
2022-3-4 20:53
0
雪    币: 1378
活跃值: (3067)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
思路真不错,  最后一张图片真恶心 
2022-3-4 21:16
0
雪    币: 897
活跃值: (5916)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
飘零丶 哦 那我理解有误 抱歉。
您的示例也非常好,但并未涵盖所有处理器指令。谢谢你的例子!
2022-3-4 21:26
0
游客
登录 | 注册 方可回帖
返回
//