宏混淆工具

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

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

Macro_pack分为专业模式和普通模式,专业模式包含了更多的混淆手段,如高级反恶意软件绕过,VBOM安全绕过,自解码VBA等,但源码现在并未公开出来。普通模式的混淆手段包括了“名称混淆”、“字符串混淆”以及“格式混淆”。

f9ec1f60ce3ded7b5017112ae2289140.png

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

e139e7cadb2866dd3f1700a860b49080.png

名称混淆

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

a05f500d9ed76ad14c7541ea7b82d4f0.png

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

3bb0f66473d332fd76d4a003e3b971e1.png

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

a5dd746a1a02d019df08161c6bdc052f.png

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

7b9e60052d2a8b20397adc09e157211d.png

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

0eb64974b37d59310a3b724f5a4e9c18.png

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

5f11a4be75dffdf5d5b13878344ebd63.png

字符串混淆

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

66dadabb725d90b90b5c22e304470929.png

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

22db8701e3e68831c2d4e3d4131f6daa.png

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

44f666fb1f983256887ad84741cd08fa.png

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

37fc091df087c8e5a636ad68ad89689d.png

格式混淆

移除宏代码中的注释:

f5cef6a56e950fd801138940c990949e.png

将制表符替换为空格:

27fd76299f553d59ba0bb8c4c0d15cd7.png

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

631ee7dea1c964335b4428055008feab.png

混淆效果

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

✎ 非混淆

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

dd74ec801b6c5a2a990e7c78dc27341b.png

✎ 混淆

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

4ea395920cd0b0edd457c4358fb03ed3.png

写在最后

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐