恶意代码分析实战 Lab17

lab17-01

程序运行脚本之后,有三个地方红色高亮

第一个是使用sidt获取IDTR寄存器值,然后和FF比较,是FF就跳转到loc_40132D处调用sub_401000函数删除自身

恶意代码分析实战 Lab17_第1张图片

第二个使用str来检测,注意三个跳转,其中loc_40124E是程序正常跳转,loc_401336最后还是会调用sub_401000删除程序

恶意代码分析实战 Lab17_第2张图片

最后一个在这里,返回值为0DDCC0000h时候正常运行,否则跳转结束程序


看一下函数内部,使用sldt来检测,并且将得到的LDT值赋给eax作为函数返回值


现在运行程序看一下结果

xp和win7下都失败,可能是因为多核吧,不过现在cpu都是多核发展,这种技术应该是少见的.感觉了解一下即可

恶意代码分析实战 Lab17_第3张图片

第二个str,还是无效,原因可能一样吧


看第三个sldt返回值为DDCC0000,还是无效的检测

恶意代码分析实战 Lab17_第4张图片

所以,分析结束,这些技术都有些过时了


lab17-02

导出函数

恶意代码分析实战 Lab17_第5张图片

搜索in,注意到只在sub_10006196函数里面调用


看到三个导出函数都调用了这个检测函数,我们将他命名为check_in,函数检测到虚拟机是返回1,否则返回0

恶意代码分析实战 Lab17_第6张图片

依照题目运行程序(程序极其庞大,功能也很多,没必要全部分析,会吐的)

看到程序创建两个文件,一个xinstall.log一个是wvselfdel.bat而且

恶意代码分析实战 Lab17_第7张图片

在后面回因cmd创建,注意到cmd删除了这个bat文件

恶意代码分析实战 Lab17_第8张图片

打开.log文件


这个.log文件告诉我们他检测到虚拟机,并且安装失败,要想安装成功,字节修改sub_10006196里面的in指令为nop即可,in也只是一个字节大小

分别找这两个文件字符,注意到.bat只在,sub_10005567函数里面调用,查看函数可以确认,这里创建.bat并且运行脚本删除自身


看到三安装函数都调用他

恶意代码分析实战 Lab17_第9张图片

同样方法查看.log文件的函数sub_10003592

注意到还有一个函数sub_10006119函数也是个检测函数,关键代码如下,不懂在做什么,课本的意思这是个函数空的?


注意开头这个判断是检查10019034偏移0Dh处是数字是不是0,(实际为5)不为0则做虚拟机检测

恶意代码分析实战 Lab17_第10张图片

现在就看一下sub_1000D3D0是怎么安装dll就好了

进入程序一路看下来应该注意到不少提示信息,足够我们推测程序是通过注入dll到iexplorer.exe来实现安装自身的

关键证据在函数sub_1000D10D里面的createremotethread调用,这个注入dll的方法应该不陌生,可以证实,eax为loadlibrary,edi为dll文件绝对路径

恶意代码分析实战 Lab17_第11张图片

因为都是熟悉的代码之前已经见过也分析过,所以只是简单这样提一下,而且本章重点也是反虚拟机技术

现在看一下第二个installSA

会发现程序基本一样,除了,最后调用的是sub_1000D920函数来安装自身

同样是见过的技术

看三个地方打开SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost注册项

恶意代码分析实战 Lab17_第12张图片

然后再这个目录项下对netsvc设置值为dll的绝对路径

恶意代码分析实战 Lab17_第13张图片

最后运行服务netsvc

恶意代码分析实战 Lab17_第14张图片

看注册表变化

恶意代码分析实战 Lab17_第15张图片

再看installSB

多调用一个sub_10005A0A函数

这个函数可以参考Lab12-04

总的说就是查找winlogon.exe向他注入线程执行sfc_os.dll的二号函数,来禁止window的文件保护

其中sub_10005778是提权函数

sub_10005937是查找winlogon.exe

最后sub_10005991是注入线程

回到函数,看最后一个sub_1000DF22函数调用

注意到那些提示字符串还有下面两个函数调用,推测是复制恶意代码到系统目录替换某个dll文件

恶意代码分析实战 Lab17_第16张图片

我们直接运行程序,看注册表变化,可以直观看出,可以知道程序替换的是ntmssvc.dll

恶意代码分析实战 Lab17_第17张图片

恶意代码分析实战 Lab17_第18张图片

最后看一下三个安装的日志文件,要想程序不删除自身,最好还是把DVM后面的5改成0,不用管in

恶意代码分析实战 Lab17_第19张图片

最后说一下这个程序极大而且功能极多,在此不详细分析每个功能,日后有时间我们再战.


Lab17-03

c程序开头存在两个函数调用分别使用两种反虚拟机技术,sub_401A80和sub_4011c0

恶意代码分析实战 Lab17_第20张图片

其中sub_401A80是in检测,函数检测出来返回1,没测出来返回0

恶意代码分析实战 Lab17_第21张图片

看一下sub_4011c0函数,参数是注册表 相关,应该是通过查找vmware再注册表痕迹来检测

打开注册项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses

恶意代码分析实战 Lab17_第22张图片

读取项类名和子项数量

恶意代码分析实战 Lab17_第23张图片

取出之前那个项下面的第一个子项名,

然后sub_401060函数将项名转化为小写,

sub_4010B0将项名和vmware比较,函数返回1代表比较成功,则对var_8赋值1,最后赋给eax作为sub_4011c0返回值

恶意代码分析实战 Lab17_第24张图片

如果匹配失败这会向下搜索,继续调用sub_4011c0最多搜索两层,第三个参数决定

所以这个,函数其实是遍历HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses下面的子项深度为2,查找是否存在子项名字为vmware

这便是加载资源然后解密,返回资源数据地址


sub_401400函数则对之前得到的C:\Windows\System32\svchost.exe进行进程替换,用资源函数内容(参考12-2)


不同的是在上面两个函数的开头都存在呢反虚拟机技术

在sub_401670里面

先是得到返回数据大小


然后去申请空间,

恶意代码分析实战 Lab17_第25张图片

然后再次调用

恶意代码分析实战 Lab17_第26张图片

上面调用成功后就得到IP_ADAPTER_INFO结构的链表

下面比较type是以太网或者无线适配器802.11,都不是就链表指向下一个

恶意代码分析实战 Lab17_第27张图片

找到呢以太网或无线适配器后,比较长度大于2,否则还是链表指向下一个

最后用前面函数开头的数据,和address(这里比较的的是mac地址开头为00:0c::29ollydbg实测)比较如果存在相同的,那么说明程序在虚拟机里面

恶意代码分析实战 Lab17_第28张图片

那个var_40被设为1,程序不会加载资源文件就退出函数

再看sub_401400函数的反虚拟机技术


这一这里面都没有明文信息比较,所以不太好理解,要知道第一个参数就是一个密文,第二个参数是长度

函数先得到进程链表,然后调用sub_401060函数得到进程名的前6个字符的小写,arg_4就是第二个参数6


注意这里的sub_401000函数有两个参数,第一个是上面函数的返回值,头六个字符的小写,第二个还是arg_4,注意esp加4

恶意代码分析实战 Lab17_第29张图片

这个函数是个加密函数,对六个字符加密得到返回值和0F30D12A5h作比较,如果相等说明存在虚拟机中(我们推测应该是检测以vmware开头的进程),则函数返回1,然后sub_401400函数也会结束,不会做进程的替换

ollydbg跟踪发现前三种技术都检测出来然而最后一个技术没有检测出来,虚拟机进程中,不存在vmware开头进程的,但是存在vmtool开头进程,所以实际上应该检测vmtool而不是vmware

为了验证检测的是vmware可以使用ollydbg修改函数sub_401400的参数为vmware看返回值,如下图,注意到返回值正是第一个参数的值

恶意代码分析实战 Lab17_第30张图片

分析结束,至于程序的其他部分和lab12-02是一样的,可以参考之前的文章.

你可能感兴趣的:(恶意代码分析实战 Lab17)