论坛样本分析之多重防御木马程序分析
原帖地址:http://www.52pojie.cn/thread-390644-1-1.html 样本压缩包中含有快捷方式一个,bat批处理程序一个,Temp文件一个,dll动态链接库一个。如图所示。为何说该木马程序具有多重防御呢,通过逆向分析可以发现,该木马程序运行方式复杂,具体特点如下:
(1)运用快捷方式打开批处理执行命令而不是直接执行;
(2)两次调用dll并执行不同功能,只有第二次运行真正执行主要功能,达到混淆的效果;
(3)添加反虚拟机调试代码,避免虚拟环境运行该程序;
(4)多线程运行。
首先该程序用快捷方式打开加密过的批处理文件png.bat,用winhex可以看到具体的命令内容,如下图所示。
mkdir命令是建立子目录,而rundll32.exe nvwsrds.dll,avmode -fn hgfyryertsdsd命令是运行rundll32.exe来执行nvwsrds.dll中的avmode函数,函数的参数为-fn hgfyryertsdsd。可以看出,该程序的主要功能是由nvwsrds.dll来实现的,因为rundll32.exe不好进行动态调试,因此我写了个调用 nvwsrds.dll执行avmode函数的程序用于进行动态调试,代码如下。
#include "stdafx.h"
#include<windows.h>
#include<stdio.h>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hModule = NULL;
typedef void(__stdcall* Func)(char* key);
//载入dll
hModule = LoadLibrary(_TEXT("nvwsrds.dll"));
// 获取 avmode 函数地址
Func funav = (Func)GetProcAddress(hModule, "avmode");
char* a=“-fn hgfyryertsdsd”;
// 使用函数指针
funav(a);
// 释放指针
FreeLibrary(hModule);
return 0;
}
进入程序调试可以发现程序被加了许多花指令,不过并不妨碍调试。首先程序创建了一个文件夹。
然后将原本的dll重命名后复制到该文件夹中。同理,将Temp文件也复制到相同的文件夹中。
除此之外程序还打开一张图片,在执行完上述功能时,程序再次调用rundll32.exe来运行拷贝到新文件夹中的nvwimg.dll的avmode函数,并把程序的主要功能交由它来实现,至此程序第一部分终止。如图所示。
这时有人会问,两个dll不是相同的吗,如果按照这样进行下去将无限循环运行该dll。我在调试过程中也考虑到这个问题,但木马作者运用了一个判断语句解决了这个问题。通过判断自身名称是否为nvwimg.dll来确定所要执行的功能,这样就能让拷贝过去的dll执行其他的功能。同样用一个小程序作为载体运行nvwimg.dll,单步跟即可来到判断语句。如图所示。
strstr用于比较两个字符串是否相同,下面的jnz指令在文件名为nvwimg.dll时进行跳转。继续跟可以发现一句in eax dx的指令,该指令在虚拟机中不会触发异常,因此程序直接不过最后终止并没有相关操作。因此可以发现该句是木马程序判断自身是否在虚拟环境运行的指令,如果发现自身在虚拟环境下运行则终止进程。这时候只需对虚拟机进行相关设置,即可让程序触发异常,设置方法见此http://bbs.kafan.cn/thread-1326120-1-1.html,当程序触发异常跳到系统领空时,在代码段下断点跑几次就能跑回代码段中。来到代码段中可以发现程序对Temp文件进行读取,并截取其中有效部分进行解密,而解密的内容加上PE文件头后构成了PE文件,在执行完这部分后就执行该PE文件内容。
进入这部分程序后,先进行一些命名操作,为后面的操作做好预备工作,然后创建一个inf安装信息文件。并在文件中写入配置信息,具体如下图所示。
通过该配置信息可以看出,程序将自身及所用到的宿主程序加入开机启动项,以达到开机自启动的效果。在这之后,程序创建一个互斥体,以判断自身是否被运行,防止同时出现两个进程而终止。
之后,程序创建地址为A8CED0的新线程以执行主要功能,可以看出,程序为了隐藏自身真实功能可是费尽九牛二虎之力,通过多次的调用才到达主要功能的执行部分,在地址A8CED0下断,f9跟进,即可断下。跟进可以发现,程序有疑似查找杀毒软件操作(不过我没到达这部分功能)。继续跟进,发现程序对某个地址有socket操作。
由于该地址服务器已经失效,程序继续寻找另一地址进行操作,而操作的方法也比较特别。程序先调用HttpOpenUrlA打开一个网页,网址为http://t.qq.com/as730498358,是个腾讯微博,然后程序遍历网页源代码,从网页源代码中找到所需要的ip地址,如图所示。
而打开该网页我们也可以发现,作者使用腾讯微博的签名来保存ip地址,这种方法在之前就有人提到过,不过当时是用qq昵称来保存,这样能够很好地保存动态的ip地址而且不容易被发现。
除此之外,程序还通过拼接ip查询网站的URL来构造请求,然后同样以打开网页并遍历网页源码的方式获取ip地址。
在进行完ip地址的获取之后,程序同样运用socket套接字来和这几个地址进行数据传输,由于这些地址已无法使用,并不知道程序发出什么数据,获取什么数据,不过可以肯定的是,程序必定具有远控功能。要防范这类程序,还是需要大家提高警惕,不要滥用外挂等不安全软件,因为外挂自身必定被杀软报毒,有些木马就利用这一情况附加在外挂上面,从而感染计算机,所以大家下载外挂时一定谨慎。
[*]
ruanjianjl 发表于 2015-10-19 19:55
原理你解释了我懂了 我知道这个TEMP是加密的 需要DLL来揭秘 但是我想查看这个IP信息 怎么操作呢?DLL对TE ...
用winhex去查看temp的内容可以基本发现temp的一些特征,然后用OD跑dll时发现OD会加载一堆东西到内存中,到内存中查看会发现这些东西和temp的内容是一样的,再过后dll会进行一个循环操作,操作的目标也是这段内存的内容,然后在进行完循环之后程序又给这段内存中的内容加上PE头,所以可以断定这是在进行解密然后构建PE问你件。解密完后dll就会创建线程去运行这个新构建的pe文件,然后就能看到在运行过程中使用socket操作,操作对象中就包含这个ip ruanjianjl 发表于 2015-10-19 19:57
方便的话 录制下演示可以不 ?GIF或者录像 都可以 感谢 我也喜欢分析这个我研究了半天了 难在这里了
录制什么的我不是很会也没时间,我就这里说一下,你先一样写个程序用od断CopyFile这个函数看他产生的新dll名字是啥,然后再写一个一样的用od断ReadFile这个函数可以看到他把temp的内容读取了,然后再断_beginthreadex这个函数看他创建进程地址在哪,在那个地址开始处下断,然后跑起来,等程序断在那个地方时对connect这个函数下断就能看到他和哪些地址连接 前排膜拜大神,论坛下载的软件不一样是安全的,大家注意一下 好高深,膜拜大牛。 Mark 应该永远看不懂{:301_998:} 对的,以前乱下外怪就中招过。 感觉我现在有强迫症了。看到这种排版我就心里痒痒啊 康小泡 发表于 2015-8-31 11:39
感觉我现在有强迫症了。看到这种排版我就心里痒痒啊
{:17_1082:}图片截得不是很好,然后就凹凸不平的,下回我好好对齐一下 Hyabcd 发表于 2015-8-31 12:26
图片截得不是很好,然后就凹凸不平的,下回我好好对齐一下
这类木马应该被叫做hook007,大概卡了一下,里面的很多手段都是一样的,甚至还保留了一些前面版本的信息。360技术博客上面也有提到过这个样本http://blogs.360.cn/360safe/2014/09/12/hook007_trojan/ 康小泡 发表于 2015-8-31 16:15
这类木马应该被叫做hook007,大概卡了一下,里面的很多手段都是一样的,甚至还保留了一些前面版本的信息 ...
{:17_1062:}来去看看,我不大懂木马类别,刚接触不是很久 测试木马病毒的才是大婶