小黑thase 发表于 2023-3-22 19:17

关于新版VLICENSE跨平台的浅析

1. 前言VL壳在当次更新中更新了新的IAT混淆措施,使得修复IAT变得稍微困难了一些,鉴于其处理了全部的绝对寻址调用,而且Jmp和CALL都被处理成了一种跳转方式,这也使得脚本需要多加一处处理方式。但是这次是基于修补东西来达到跨平台的效果,所以会比脚本的方式处理时间短一点?大概。2. 过程借用Vlicense作者发布的Unpackme做实验,我们可以看到API调用方式由6字节的FFx5INDEX方式变为了Call Sec+Random byte模式,以下是图片
既然要修补他的IAT,那我们肯定要进去一探究竟的。以下是IAT调用的过程,以下是重要的几部分







其中的过程我浅述一下:从一个随机值中进行减法处理得到EncryptedDWORDs表中拿到EnCryptedDword,是目标地址加密后的值,然后与取到的PEB指针,拿到模块基质相加,再与另外一个随机数进行运算最后获得真值。VLicense这样做,虽然很浅而易见,但是其中所用的变异规则,与随机数的生成导致很难处理。提一嘴题外话,VL作者为了防止静态脱壳,还会把其中的随机数放到壳段中,等将要运行起来再填充,坏得很。正面要分析的难度,是有点大的,毕竟为脱壳上反汇编引擎,再去一个个总结算法,其中的工作量也是相当大的,显然是没必要,那么就从EncryptedDWORDs表中下手
在其中下一个硬件断点来跟踪他的规则

这边就是未经填充的表的地址,我们来跟踪VM,既然我们找到了他的填充位置,我们接下来的分析就有眉目了。但是很不巧,前面有一座大山再挡着
这个是VL的VM入口。这就很难受了,但是我们只要算法,他还是相对简单一点的,没办法了,来都来了,窥探一下其中的奥秘吧。首先跟踪到VMdispatch这边
下断几次看有没有规律
我们可以发现,从代码来讲,eax是VMHANDLER的索引,然后这个IAT出现的位置,正好可以记住索引,来获取未经过处理的IAT地址,然后,他既然有解密算法,那就肯定对应这一个相应的加密算法,他其中没有随机值,那么我们的任务就缩减很少了。
经分析,当索引值为5F的时候,DWORD就被加密了,分析VM的过程就不概述了,我只说结果,他会减去一个DWORD值,本例为5647 D53A,之后就显而易见了,还会减去模块基质。这样我们的分析就结束了3. 总结以及修复方法我们现在获取到了绝对寻址的地址,以及他的加密算法,修复IAT跨平台的方式已经浮出水面了。我们要做的就是把绝对寻址的地址记录下来,然后储存到一个位置,对其进行IAT重建以保证地址的有效性,然后再OEP运行之前,加一段SHELLCODE填充进去,对绝对寻址的地址加密,然后填充到EncryptedDWORDS表里面,让其正常运算,最后给指向PEB的指针修正为每次正确的值。到此脱壳结束。本文之所以没提供成品的脚本以及所用的东西,就是希望大家保持着一颗学术的心,对壳的理解更加透彻,有心的人也会去实践,我觉得发出成品就没有必要了。

boot 发表于 2023-3-22 19:32

感谢分享。

小黑thase 发表于 2023-3-22 19:33

没图 先凑合看 一会恢复图片淦

陨落事件 发表于 2023-3-22 19:35

围观一波

春田花花幼稚园 发表于 2023-3-22 19:39

群里来围观

MoeRay 发表于 2023-3-22 19:43

围观围观

千里丶 发表于 2023-3-22 19:44

又见技术贴

随便杀杀 发表于 2023-3-22 19:47


又见技术贴

ssjjdns 发表于 2023-3-22 19:47

学习思路

l7518597 发表于 2023-3-22 19:51

感谢分享
页: [1] 2 3
查看完整版本: 关于新版VLICENSE跨平台的浅析