对某病毒样本的分析——第一弹之解压部分

其实事情的起因是这样的 有天在某CTF群里 看到有人发了这样的一个帖子

http://a4.qpic.cn/psb?/4e6b6aae-9885-4fcf-b081-8487a3b92f5d/f4JwfnroB981LELmD4Fy2PrTw02lT5S1aVzzZfbLGqU!/b/dAcBAAAAAAAA&ek=1&kp=1&pt=0&bo=PQM.AgAAAAAFACE!&su=074649921&tm=1519257600&sce=0-12-12&rf=2-9

帖子里说的很玄乎,又反虚拟机,又反OD,各种反,通篇帖子没用任何调试工具和逆向工具,仅仅是用了点行为检测工具,我心想,这啥玩意,加了什么强壳?反调试手段这么牛逼?我有些不服。。所以忙里偷闲决定逆一下这个玩意 学习学习 看看用了什么高端技术。

然后看了之后发现。。。好像并没有作者说的那么玄乎。。和我B一商量,我俩都是一脸的不服。。。。。

闲话不多说 进入正文

http://a4.qpic.cn/psb?/4e6b6aae-9885-4fcf-b081-8487a3b92f5d/XElfEslDacWSAu7HCwZy.DODZh*l3V0V5R..HrlVgqM!/b/dAcBAAAAAAAA&ek=1&kp=1&pt=0&bo=SwBJAAAAAAAFACE!&su=038039057&tm=1519257600&sce=0-12-12&rf=2-9

没有壳

样本的主要行为是在0x401F5E中 我已经做了注释

在函数0x40121E中

通过文件操作,将文件7D00之后的数据读到内存

在此时猜测是通过解压文件自身来讲病毒的代码解出来

在刚才解压到的内存的位置,通过一个很大的循环来寻找特定的位置。

然后继续将文件中两处读进内存

在0x40188B函数内完成对目录的操作

详细信息已经加了注释

在0x4014CE中完成对irsetup.exe的解压

首先依然是从文件特定位置读信息

然后通过这段循坏 异或0x7对代码进行解密

解密之后如下图 看到这个地方我就开心了

然后将文件写到临时目录下的文件夹里

同样在函数0x4015E0中采取同样方式,只是没有异或操作 直接将病毒运行所需要的dll文件写出来

然后在函数0x401B8C中

先将exe文件运行的参数写到内存中

然后用ShellExecuteEx以带参形式运行exe文件

参数信息如下

然后执行睡眠操作,等待时间结束将exe和dll文件和目录删除,如果没有执行成功或者别的原因则将文件移到别的地方,这里我就不跟了

至此 这个文件的分析已经结束 实际上执行的操作就是讲病毒解压出来,并以带参形式运行。

下面分析irsetup.exe文件

 

查壳UPX

懒得手脱,直接脱壳器,手脱就对ESP下硬件断,然后修复IAT

看主函数发现是MFC写的

因为是MFC写的,所以很难对程序流程作出分析

所以对关键API下断,分析关键行为

对CreateFile ReadFile WriteFile下断

通过读样本原文件,在irsetup.exe目录下解压出三个JPG文件

在C:\Documents and Settings\Administrator\Application Data\ 目录下解压出config.dat Inst.exe io.dat TenioDL_core.dll四个文件(这四个文件是病毒的主要文件)

在最后通过调用lua以shell的形式运行Inst.exe文件

–result = Shell.Execute(SessionVar.Expand(“%ApplicationDataFolder%\\dllhost.exe”), “open”, “”, “”,SW_HIDE,false);..result=Shell.Execute(SessionVar.Expand(“%ApplicationDataFolder%\\Inst.exe”), “open”, “”, “”, SW_SHOWNORMAL, false);

分析Inst.exe文件

没有壳

创建互斥对象 使进程只能同时运行一个

然后都是初始化过程

下面调用TenioDL_core.dll中的函数 TenioDL_core.dll在Inst.exe的IAT中在Inst.exe装载时就已经加载到内存

将config.dat读到内存中

对读进内存中的数据进行异或解密

XOR 0x12+0x3C+0xA1

解密出来PE格式的文件

又一次解密

将函数导入表复制到EDI

通过GetProcAddress计算导入表中每个函数的地址

并放到0x9B0000之后的位置 这个步骤是解压IAT

等到所有信息解压完成之后 通过这里的关键跳跳到刚才解压的代码部分

读io.dat 中的数据

对读的数据sub 0x6a xor 0x33解密

将解密后的数据写到litao.png 并通过ShellExecuteA执行

显示出这样的图片

然后 修改注册表的SOFTWARE\Microsoft\MSDTC\MTxOCI 键值

增加了OracleOciLibPath键

作用是 修改了oci.dll的路径 将路径改为c:\windows

然后更改目录到C:\WINDOWS\PolicyDefine

在目录下创建了syncnet.exe

接着创建了setup.ini

很显然是修改注册表开机启动项的

接着在C:\WINDOWS目录下创建了oci.dll

然后创建C:\WINDOWS\Slimit目录

将Inst.exe改名为load.exe复制到目录下

创建dllhost.exe文件

复制config.dat到目录下

复制dll文件到目录下

遍历进程 查360进程(我这里没有360 没继续跟进去 估计是查到就kill掉吧)

创建setup.ini文件

这个setup.ini与前面的不一样 目测是运行load.exe(Inst.exe)的

至此 所有文件创建已经结束

在PolicyDefine目录下创建了 setup.ini与syncnet.exe文件

在Slimit目录下创建了 config.dat dllhost.exe load.exe setup.ini start.exe TenioDL_core.dll

遍历进程 查金山毒霸

用CreateProcess运行dllhost.exe文件 由该文件将Slimit目录下的文件运行

重启msdtc服务 事实上在开启的时候 windows目录下的oci.dll就运行了

由oci.dll中的函数将PolicyDefine的文件运行

至此 病毒第一部分工作大体告一段落 在这一部分工作之前 并没有什么恶意操作

该病毒第一部分工作就是解压 解压 又解压 将真正的恶意文件通过层层解压 然后运行

现在来总结一下大体的流程

首先病毒解压irsetup.exe与lua的dll文件进临时目录 用ShellExecuteEx函数以带参形式运行irsetup.exe

然后通过irsetup.exe软件 将四个文件解压到Application Data目录下 以lua脚本shell的形式运行inst.exe文件 事实上irsetup.exe应该是别人用MFC写的一个解压软件(绝逼不是病毒作者写的) 功能还是很全的 能根据不同参数解压到不同位置 并支持脚本功能 并且带有校验功能

然后inst.exe运行 将io.dat文件解压到内存中 解密 打开 显示一个图片文件 是为了起迷惑作用

真正的恶意代码存放在config.dat中 通过解压到内存 解密 解压IAT等等操作 通过一个关键跳转跳到这段代码中

然后将真正的恶意文件解压出来

通过修改注册表 以开启msdtc服务的形式将dll文件中函数运行

通过CreateProcess将病毒exe文件运行

第一阶段就先写到这里,最近也是忙得不行,挤出来一些时间看了一下这个样本,简单的写了一下分析,肯定有地方没有分析到,也有地方有一些错误,希望大家能理解,喝口水歇一会,等有时间再继续分析病毒的主体部分,我现在虽然还没看,不过猜测也就是注册服务,自动运行,干掉杀软进程,保护自身,远控等一些行为吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注