南强小屋 Design By 杰米
#0x00 狭路相逢
"偶然"碰到了一个网络验证,广告语写着"全新的虚拟机架构,虚拟机超强变异,让您的软件难以分析", 看上去好像很好玩, 于是我(emmm)就弄了几个极速模式的样本分析看看, 见识一下这个全新的虚拟机架构, 至于是啥网络验证,这次我就不点名了, 本文也不提供样本。
**以下讨论的是该网络验证基于极速模式加密的样本**
#0x01 猫捉老鼠
根据描述,还可以加密64位文件,但是加密后的文件打开运行却是32位程序,猜测有把原程序写到硬盘的操作。由于其严酷的拉黑机制(反调试 - -!)(你干点啥它都拉黑你, 这就是所谓的超强的反调试, 但其实根本没啥用),考虑先不用调试器,绕路走,用某剑监视其程序操作,部分关键操作如下。
写出Registration.tmp 猜测跟解密相关

写出exe,猜测是登录后释放的原exe

转到目录下查看,发现一个43k大小的exe,不符合加密前exe大小。

但是,在...目录下发现了一个很可疑的exe

复制出来运行提示未经授权运行,估计它就是我们要找的原程序了。

#0x02 林中小屋
监控发现原程序读取了Registration.tmp

用x32dbg看一下,发现这入口一股浓浓的Themida味(这网络验证是Themida的作者写的?)

运行起来CE搜一遍字符串,这确实是WinLicense没错,

把Registration.tmp和原程序复制出来,回滚虚拟机快照后,再把Registration.tmp放回去,发现可以直接运行原程序。(但是无法再次运行,会提示未经授权运行。并且更换机器做同样的操作也无法运行。)

根据以上行为特征,可以大致猜出该网络验证的流程:
**发送卡号并上传机器码 -> 验证通过 -> 下发锁定机器码以及运行次数为1的key ->释放原程序(WL授权加密) -> 运行原程序**
虽然下发的key回滚快照可以一直使用,用监控程序监视它读写了哪些注册表和文件,再统统删掉也可以无限使用,但是它锁定了机器码,总归是不方便。为了速战速决, 考虑脱壳。
#0x03 旧事重提
到达OEP以后修一下IAT,处理下虚拟机内部的pause就能脱下来了。这里不提供脚本,只讲下到达OEP和修IAT的思路。
OEP的话,用祖传VirtualProtect大法。VirtualProtect下断,运行,看到代码段(401000)出现两次后,执行到返回,取消断点。


对代码段下内存执行断点。

再运行一次就到OEP了。

OEP虽然被虚拟化了,但是可以不修。
WL没有抹掉原来的IAT表,而是随机将部分IAT填充到自己的壳代码了,图中下划线为白色的就是被壳抽取的IAT。

这里使用的是x32dbg,撸脚本也方便。修复脚本基本思路为:
逐个获取IAT表里的pointer,用mod.isexport判断是否为1,不为1说明被抽取或者为该pointer为0,如果是被抽取,记录当前cip和csp,将cip设置为取得的pointer,并且对csp-4设置硬件写断点,run 3-5次并判断mod.isexport,为1则将[csp-4]写到IAT表对应的位置,并将cip和csp设置回去。
需要注意,ExitProcess貌似被WL特殊照顾,无法用这种办法取得,没想到修复办法,就只能手动填充了。暂时没发现其他的IAT有这种问题,图中47C294处就是脚本无法修复的ExitProcess。

修复完IAT,记得扫描一遍内存,处理掉所有的pause,jmp或者全部nop都可以,特征如图

全部处理完,就能运行了。

**以下讨论的是该网络验证基于极限模式加密的样本**
#0x04 黑洞的极限运动
上面说的是极速模式下的样本,那极限模式的样本呢?尝试按照以上方法脱下来以后,跨平台运行会崩溃。
推测极限模式是WinLicense的全保护,不过问题不大。多分析分析也能脱下来。
该极限模式样本有两种防dump(不知道有没有更多防dump,只加了两个虚拟化水印)
一种是在到达OEP前加密存储kernel32.dll的基址,然后虚拟化水印会读取基址+随机偏移,因为不同机子以及重启后系统dll基址会改变的关系,程序会崩溃。OEP虚拟化也会用这种防dump。

另外一种是运行到该处水印代码后,虚拟机将代码解密写回原来的位置。

虚拟机运行完毕后。

过kernel32基址的防dump,可以分配一块跟当时一样地址的内存,WL只读取,并没有对里面的值做校验,如果有其他dll占用了也可以直接过。
另一种防dump,可以把存放在WL区段的VirtualProtect 地址,修改到自己代码的FF25 ,如果不巧,程序IAT没有VirtualProtect,就得自己加上了。
#0x05 梦一场
!!!!所以这里根本没有什么所谓的超强虚拟机, 全新的虚拟机架构?搞半天就是用WinLicense做了个授权, 我好像是来找自写虚拟壳来着,怎么最后在脱WinLicense了。
后续将会提供脱壳脚本以及特征,方便大家研究学习。
"偶然"碰到了一个网络验证,广告语写着"全新的虚拟机架构,虚拟机超强变异,让您的软件难以分析", 看上去好像很好玩, 于是我(emmm)就弄了几个极速模式的样本分析看看, 见识一下这个全新的虚拟机架构, 至于是啥网络验证,这次我就不点名了, 本文也不提供样本。
**以下讨论的是该网络验证基于极速模式加密的样本**
#0x01 猫捉老鼠
根据描述,还可以加密64位文件,但是加密后的文件打开运行却是32位程序,猜测有把原程序写到硬盘的操作。由于其严酷的拉黑机制(反调试 - -!)(你干点啥它都拉黑你, 这就是所谓的超强的反调试, 但其实根本没啥用),考虑先不用调试器,绕路走,用某剑监视其程序操作,部分关键操作如下。
写出Registration.tmp 猜测跟解密相关

1.png
写出exe,猜测是登录后释放的原exe

2.png
转到目录下查看,发现一个43k大小的exe,不符合加密前exe大小。

3.png
但是,在...目录下发现了一个很可疑的exe

4.png
复制出来运行提示未经授权运行,估计它就是我们要找的原程序了。

5.png
#0x02 林中小屋
监控发现原程序读取了Registration.tmp

6.png
用x32dbg看一下,发现这入口一股浓浓的Themida味(这网络验证是Themida的作者写的?)

7.png
运行起来CE搜一遍字符串,这确实是WinLicense没错,

8.png
把Registration.tmp和原程序复制出来,回滚虚拟机快照后,再把Registration.tmp放回去,发现可以直接运行原程序。(但是无法再次运行,会提示未经授权运行。并且更换机器做同样的操作也无法运行。)

9.png
根据以上行为特征,可以大致猜出该网络验证的流程:
**发送卡号并上传机器码 -> 验证通过 -> 下发锁定机器码以及运行次数为1的key ->释放原程序(WL授权加密) -> 运行原程序**
虽然下发的key回滚快照可以一直使用,用监控程序监视它读写了哪些注册表和文件,再统统删掉也可以无限使用,但是它锁定了机器码,总归是不方便。为了速战速决, 考虑脱壳。
#0x03 旧事重提
到达OEP以后修一下IAT,处理下虚拟机内部的pause就能脱下来了。这里不提供脚本,只讲下到达OEP和修IAT的思路。
OEP的话,用祖传VirtualProtect大法。VirtualProtect下断,运行,看到代码段(401000)出现两次后,执行到返回,取消断点。

10.png

11.png
对代码段下内存执行断点。

12.png
再运行一次就到OEP了。

13.png
OEP虽然被虚拟化了,但是可以不修。
WL没有抹掉原来的IAT表,而是随机将部分IAT填充到自己的壳代码了,图中下划线为白色的就是被壳抽取的IAT。

14.png
这里使用的是x32dbg,撸脚本也方便。修复脚本基本思路为:
逐个获取IAT表里的pointer,用mod.isexport判断是否为1,不为1说明被抽取或者为该pointer为0,如果是被抽取,记录当前cip和csp,将cip设置为取得的pointer,并且对csp-4设置硬件写断点,run 3-5次并判断mod.isexport,为1则将[csp-4]写到IAT表对应的位置,并将cip和csp设置回去。
需要注意,ExitProcess貌似被WL特殊照顾,无法用这种办法取得,没想到修复办法,就只能手动填充了。暂时没发现其他的IAT有这种问题,图中47C294处就是脚本无法修复的ExitProcess。

15.png
修复完IAT,记得扫描一遍内存,处理掉所有的pause,jmp或者全部nop都可以,特征如图

16.png
全部处理完,就能运行了。

17.png
**以下讨论的是该网络验证基于极限模式加密的样本**
#0x04 黑洞的极限运动
上面说的是极速模式下的样本,那极限模式的样本呢?尝试按照以上方法脱下来以后,跨平台运行会崩溃。
推测极限模式是WinLicense的全保护,不过问题不大。多分析分析也能脱下来。
该极限模式样本有两种防dump(不知道有没有更多防dump,只加了两个虚拟化水印)
一种是在到达OEP前加密存储kernel32.dll的基址,然后虚拟化水印会读取基址+随机偏移,因为不同机子以及重启后系统dll基址会改变的关系,程序会崩溃。OEP虚拟化也会用这种防dump。

18.png
另外一种是运行到该处水印代码后,虚拟机将代码解密写回原来的位置。

19.png
虚拟机运行完毕后。

20.png
过kernel32基址的防dump,可以分配一块跟当时一样地址的内存,WL只读取,并没有对里面的值做校验,如果有其他dll占用了也可以直接过。
另一种防dump,可以把存放在WL区段的VirtualProtect 地址,修改到自己代码的FF25 ,如果不巧,程序IAT没有VirtualProtect,就得自己加上了。
#0x05 梦一场
!!!!所以这里根本没有什么所谓的超强虚拟机, 全新的虚拟机架构?搞半天就是用WinLicense做了个授权, 我好像是来找自写虚拟壳来着,怎么最后在脱WinLicense了。
后续将会提供脱壳脚本以及特征,方便大家研究学习。
标签:
某某云网络验证脱壳
南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米
暂无某某云网络验证脱壳的评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。