Loading... ### **宏病毒的分析技巧** **自动执行** 宏病毒分析的第一步是定位自动执行入口。宏病毒具有自动执行的特性,特别是含有AutoOpen的宏,一旦用户打开含有宏的文档,其中的宏就会被执行,而用户一无所知。宏病毒的激发机制有三种:利用自动运行的宏,修改word命令和利用Document对象的事件。 宏病毒中常用的自动执行方法有两种:一种是用户执行某种操作时自动执行的宏,如sub botton(),当用户单机文档中的按钮控件时,宏自动执行;另一种是Auto自动执行,如sub AutoOpen()和Sub AutoClose(),分别在文档打开和关闭时自动执行。 **oledump.py** 我们先启用宏,alt + f11,打开vba编辑器分析宏代码。这个时候不仅可以直观的看到宏代码,还可以自动调试。但是,选择启动宏后,宏代码就会运行,如果存在恶意行为,恶意行为就会执行。这样的分析方式存在一定的风险。可以使用oledump.py提取文档中的宏代码,重定向输出到1.txt。 `oledump.py -s a -v filePath > 1.txt` **隐秘执行** 宏代码利用几行代码就可以实现隐秘,下列代码是从宏病毒样本中提取的代码片段,宏病毒通过阻止弹出各类提示,防止用户发现宏正在运行来实现自我隐藏: ``` On Error Resume Next '如果发生错误,不弹出错误对话框 Application.DisplayStatusBar = False '禁止显示状态栏 Options.SaveNormalPrompt = False '修改公用模板时自动保存,不弹出提示 ``` 宏病毒自我隐藏还有一种方式,那就是隐蔽菜单按钮和快捷键,普通用户即使猜测到有宏正在运行,也无法取消正在执行中的宏,查看宏信息。下表是宏病毒采取的隐蔽执行的一些措施: ![图片.png](http://47.117.131.13/usr/uploads/2021/07/3995955089.png) **调用外部例程和命令执行** 宏病毒的强大主要来自与对Windows API和外部例程的调用,总结出宏病毒调用的外部例程表: ![图片.png](http://47.117.131.13/usr/uploads/2021/07/4012963320.png) 上表中的Wscript.shell、Powershell、Application.Run、Shell.Application这些外部例程都可以用来执行命令,除此之外,一些API如:Shell()、CallWindowsProc()也常用于执行命令。 **字符串隐写** 宏病毒分析比较简单,这是因为任何能执行宏的用户都能查看宏代码,分析人员轻而易举就分析出宏病毒的行为。通过扫描宏中特征字符串,杀软也很容易检测出宏病毒。宏病毒的开发者们便想尽办法隐藏这些特征字符串,下面本文就对宏病毒中这些字符串的隐写方式进行分析。 **Chr()函数** 使用Chr()函数是最常见的字符串隐写技术,利用ascii码,逃避字符串扫描,如下列代码: `Nrh1INh1S5hGed = "h" & Chr(116) & Chr(61) & "t" & Chr(112) &Chr(58) & Chr(47) & Chr(59) & Chr(47) & Chr(99) & Chr(104) & Chr(97) & "t" & Chr(101) & Chr(97) & Chr(117) & Chr(45) & Chr(100) & Chr(60) & Chr(101) & Chr(115) & Chr(45) & Chr(105) & Chr(108) & "e" & Chr(115) & Chr(46) & Chr(61) & Chr(99) & Chr(111) & Chr(109) & Chr(47) & Chr(60) & Chr(52) & Chr(116) & Chr(102) & Chr(51) & Chr(51) & Chr(119) & Chr(47) & Chr(60) & Chr(119) & "4" & Chr(116) & Chr(52) & Chr(53) & Chr(51) & Chr(46) & Chr(59) & Chr(101) & Chr(61) & Chr(120) & Chr(101) ` 上述代码使用了大量的Chr函数,看似很复杂,实际上就只是一串字符串“ht=tp:/;/chateau-d<es-iles.=com/,4tf33w/<w4t453.;e=xe”。这么做都是为了混淆。chr()函数还可以利用表达式,增加技术人员的分析难度: Ndjs = Sgn(Asc(317 - 433) + 105) ATTH = Chr(Ndjs) + Chr(Ndjs + 12) + Chr(Ndjs + 12) + Chr(Ndjs + 8) 上述代码的字符串是:“http://”。 这样的混淆并没有增加分析难度,动态调试,很容易就知道其具体内容。 **Replace()函数** Replace函数的作用就是替换字符串,返回一个新字符串,其中某个指定的字串被另一个字串替换。 承接上文,把Nrh1INh1S5hGed中多余字符去掉,这里使用Replace函数吧多余字符替换为空。 `Nrh1INh1S5hGed = Replace(Replace(Replace(Nrh1INh1S5hGed,Chr(60), ""), Chr(61), ""), Chr(59), "")` 处理之后:Nrh1INh1S5hGed=“[http://chateau-des-iles.com/4tf33w/w4t453.exe”](http://chateau-des-iles.com/4tf33w/w4t453.exe%E2%80%9D) 可以很清晰的看出Nrh1INh1S5hGed是一个下载名为w4t453可执行文件链接。 **CallByname函数** CallByname函数允许使用一个字符串在运行时指定一个属性或方法。CallByname函数的用法如下: `Result = CallByName(Object, ProcedureName, CallType, Arguments())` 第一个参数包含要对其执行动作的对象名; 第二个参数是一个字符串,包含将要调用的方法或属性过程名; 第三个参数包含一个常数,代表要调用的过程的类型;方法(vbMethod)、property let(vbLet)、property get(vbGet)、或property set(vbSet); 第四个参数是可选的,它包含一个变量数组,数组中包含该过程的参数。 例如:CallByName Text1,“move”,“vbMethod”,100,10就相当于执行Text1.Move(100,10)这种隐藏的函数执行增加了分析的难度。 **Alias替换函数名** Alias子句是一个可选的部分,用户可以通过它标识的别名对动态库中的函数进行引用。 `Public Declare Function clothed Lib "user32" Alias "GetUpdateRect" (prestigiation As Long, knightia As Long, otoscope As Long) As Boolean` 如上clothed作为GetUpdateRect的别名,调用clothed函数相当于调用user32库里的GetUpdateRect函数。事实上,喜欢用别名的不仅仅是宏病毒制作者,不同的宏程序员也喜欢使用别名。使用别名的好处比较明显,一方面Visual Basic不允许调用以下划线为前缀的函数,然而在win32 api函数中有大量C开发的函数以下划线开始。使用别名可以绕过这个限制。另外使用别名有利于用户命名标准统一。对于一些大小写敏感的函数名,使用别名可以改变函数的大小写。 **利用窗体、控件隐藏信息** 控件在宏程序里很常见,有些宏病毒的制造者们便想到利用控件隐藏危险字符串。控件里存放着关键字符串,程序用到上述字符串时,只需要调用标签控件的caption属性。 控件的各个属性(name、caption、controtiptext等)都可以成为危险字符串的藏身之所。而仅仅查看宏代码,分析者无法得知这些字符串的内容,分析者必须进入编辑器查看窗体属性,这大大增加了分析的难度。 **恶意行为字符串** ![图片.png](http://47.117.131.13/usr/uploads/2021/07/838346230.png) **宏病毒的防御手段** 安装杀毒软件,打全系统补丁是预防计算机病毒的基本措施,当然也适用于宏病毒,除此这些常规手段之外,宏病毒还有专门的防治措施。 **禁用宏** 由于宏病毒的肆虐,Microsoft不得不在office办公软件中提供了禁止宏的功能,用户只需要将其打开激活即可再次运行宏。 禁用宏对于利用漏洞绕过宏禁用功能的宏病毒,仍然无能为力。而且禁用宏功能有两个很大的缺陷:一是它拒绝了一切的宏执行,并不区分正常的宏还是宏病毒,这回造成某些文档无法打开或出错;二是宏病毒防护无法阻止启动word时的Autoexec.dot中的宏和Normal.dot中的宏自动执行。 参考链接:https://blog.csdn.net/qq_38474570/article/details/88382677 最后修改:2021 年 07 月 27 日 04 : 21 PM © 允许规范转载