Macro_Pack中的宏代码混淆方法分析

2019-08-09 6,117

宏混淆工具


    Macro_Pack是一个用于自动化混淆及生成Office文档、VB脚本、快捷方式等文件的工具,其主要用于渗透测试、demo以及社会工程学评估。macro_pack的目标是简化利用流程,反恶意软件绕过,并自动化实现从vba生成到最终Office文档生成的过程。


    Github:https://github.com/sevagas/macro_pack


    Macro_Pack分为专业模式和普通模式,专业模式包含了更多的混淆手段,但源码现在并未公开出来。普通模式的混淆手段包括“名称混淆”、“字符串混淆”以及“格式混淆”。

Macro_pack模式功能.png 

    如下为混淆执行流程,普通模式只会执行”ObfuscateNames”、”ObfuscateStrings”以及”ObfuscateForm”;而专业模式还会执行”AvBypass”、”UACBypass”等,通过函数名猜测其应该为杀软绕过、UAC绕过等功能,可以看出专业模式确实很强大且过于“武器化”,作者也是出于这方面考虑才没有公开。

图片1.png


名称混淆


    通过关键字的正则匹配,查找出保留函数以外的自定义过程(Sub)及函数(Function)名称,并保存到列表vbaFunctions中:

图片2.png 

    保留函数为VBA的一些开始函数,如”AutoOpen”、”Workbook_Open”:

图片3.png

    逐行查找vbaFunctions列表中的函数名,在定义及调用处将其替换为随机字符串:

图片4.png

    同样的,通过“String”、”Integer”等关键字的正则匹配查找出变量声明,然后在其声明及使用处将其替换为随机字符串:

图片5.png

    对常数“0”“1”“2”,在开头使用随机字符串定义为Const常量,然后在后面使用这3个常数的地方将其替换:

图片6.png 

    最后,用同样的方式将导入函数名替换为随机字符串:

图片7.png 

 

字符串混淆


    识别到宏代码中的字符串后,将其随机进行切分后用“&”连接:

图片8.png

    将字符串编码为16进制,并作为参数传给16进制解码函数“HexToStr”:

图片9.png

    HexToStr函数如下,用于在VBA运行起来后解码字符串:

图片10.png 

    HexToStr函数名及其中使用的变量名用随机字符串替换:

图片11.png

 

格式混淆


    移除宏代码中的注释:

图片12.png 

    将制表符替换为空格:

图片13.png 

    移除每行宏代码前的空格,即缩进,降低代码可读性:

图片14.png 

 

混淆效果


    使用macro_pack可分别生成非混淆和混淆的宏,效果如下:

    非混淆:

    结构清晰,可读性强,能够看到包含明显的特征信息。

图片15.png 

    混淆:

    上面的宏混淆后如下,可以看到混淆后的宏代码静态已经几乎不可读,并且也抹去了很多特征信息。

图片16.png 

写在最后


    防止逆向工程并不是Macro_Pack混淆的主要目的,其主要目的是防止防病毒检测。以上内容主要是针对Macro_Pack工具对宏代码的混淆方法进行分析,供测试人员,安全研究人员或其他有学习目的的人交流学习使用。

本文作者:Further_eye

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/110487.html

Tags:
评论  (0)
快来写下你的想法吧!

Further_eye

文章数:212 积分: 1700

深信服科技旗下安全实验室,致力于网络安全攻防技术的研究和积累,深度洞察未知网络安全威胁,解读前沿安全技术。

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号