论坛样本分析之利用windows消息循环执行恶意功能
本帖最后由 Hyabcd 于 2015-9-2 20:13 编辑原帖地址http://www.52pojie.cn/thread-407789-1-1.html,主要的危害在该帖中已经有详述,本文主要是对该恶意软件实现其功能的机理进行分析。由于对windows消息处理机制并不是非常熟悉,里面的陈述如果有不妥的地方欢迎大家指正。 首先用OD加载源程序,经过各种单步和“跳跃”着跑可以发现程序仅仅执行了CreateWindowExW这样一个函数便结束进程(如图所示)。而通过对CreateWindowExW参数的观察可以发现,窗口的样式被设置成为WS_EX_TOOLWINDOW。这种样式的窗口不在任务栏显示,不显示在ALT+TAB切换列表中,也在任务管理器窗口TAB管理中不会出现(参看http://blog.csdn.net/harbinzju/article/details/7043217)。也就是说,这样一个窗口是不会让用户发觉的。那作者创建这样一个窗口用意何在呢 ?
与此同时,我们可以发现桌面上多了一个名称为“hao123网址导航”的图标,于是怀疑该图标是在CreateWindowExW执行过程中产生的。于是删除图标重新运行改程序,发现确实是在该函数执行过程中产生的。而一个函数执行过程中竟然可以干别的事,不难发现,这和windows消息处理机制有关。
先来科普下windows消息处理机制,直接上链接http://baike.baidu.com/link?url=5DpB4wci0liW1T3fWnuLjmuy1tAhoGNWGGLhEoAZqDGoIhTsdeMNYvMGaRwtFeQKsv_Rv1akPg2eJad_EG2lYK。也就是说,当某个事件发生时,windows就会发送一个消息告诉应用程序什么什么事发生了,你该来处理了。所以我们日常点击鼠标,或者敲打键盘时,计算机会做出相应的反应,也都得益于windows消息处理机制。那么现在问题来了,CreateWindowExW这个函数的执行会不会触发windows消息处理机制呢?答案是能的。参照百度百科,可以看到CreateWindowExW给窗口发送了一个名为WM_CREATE的消息。(如图)
而其实该函数在发送WM_CREATE消息之前,还会发送多个消息,具体会在下面详谈。
现在知道CreateWindowExW会向窗口发送消息,那么应用程序就必须对这消息进行处理,那么应用消息是怎么个处理法呢?根据windows消息处理机制,这个处理方法可以自定义。也就是说,程序可以定义对信息的处理方式。比如遇到鼠标点击信息时,程序进行页面跳转。如果调用了DefWindowProc函数,那么程序将进行缺省操作,也就是按程序自己设定的原始方案进行操作。那么该恶意软件的作者就是利用windows消息处理机制,让程序接收到WM_CREATE消息时执行恶意代码。那么问题又来了,程序这时候执行了哪些恶意代码呢?
根据windows消息机制,所执行的代码的指针是存放在于WNDCLASSEX结构体中的,是该结构体的第三个成员,名字为lpfnWndProc,而该结构体又是RegisterClass函数的参数。在调用CreateWindowExW之前,必须先调用RegisterClass对等会所使用的窗口类进行注册,而该函数的返回值也将作为CreateWindowExW的参数。于是我们用OD,跟踪返回值和CreateWindowExW的参数class相同的RegisterClass,找到了如图函数。
然后查看RegisterClass的参数,看该结构体的第三个成员,为地址407920,如图所示,这就是执行代码所在的地址。
在这个地址下断,就能完美到达恶意代码所在的区域。接下去,我们来分析一下恶意代码。从407920单步走,可以来到地址4046D0,可以看到这里有switch,case结构,也就是一个树状分支选择。而选择的条件则是程序所收到的消息。(如图所示)
除了图中所示的2,113,11三种情况之外,还有消息序号为1的情况。在汇编代码中以mov ebx 0x1,cmp eax ebx来表示对消息序号是否为1进行比较。而消息序号和所对应的含义可以从如下链接内容中得知http://blog.sina.com.cn/s/blog_56f5ed2f0101b29e.html。从该文中可以得出,消息序号为1时表示的正是WM_CREATE消息,这也符合我们之前的推论。也就是说,当窗口成功创建但还未显示时,窗口发出消息WM_CREATE,然后程序根据所得到的消息来选择性地执行代码。跟进可以发现,程序进行写注册表操作,将浏览器主页设为作者所定义的网页。(如图所示)
然后系统调用SHGetFolderPathW来获取系统特殊路径并创建文件夹。
在该文件夹下创建文件“hao123导航”,并读取数据写入该文件,是该文件成为可执行的PE文件,最终在桌面生成快捷方式。这就是这部分代码的内容。
当窗口创建成功后,程序将进入消息循环,在消息循环过程中发出WM_TIMER消息,执行的代码内容主要是确认之前操作是否完成,这里就不多提。消息循环直到用户关闭计算机,而在关闭计算机时,该窗口必将关闭吗于是触发WM_DESTROY消息,执行相关代码内容。此时,程序在桌面上创建delselt.bat批处理文件并执行该批处理文件,来销毁本程序,以防用户发觉。具体操作和deselt.bat内容如下。
bat的内容就是一旦发现存在该文件即删除它知道不存在为止,并在删除完该程序之后将批处理自身删除。
当程序处理完WM_DESTROY消息之后,关机行为将触发WM_QUERYENDSESSION消息,而程序也有相应代码来进行消息处理,经过分析发现程序在收藏夹中添加多个推广链接,并试图在创建多个推广软件下载程序,打开后即可自动下载推广软件,因此该程序恶意性可见一斑。而程序选择在关机时执行这样的操作是为了躲避杀毒软件的查杀,已达到免杀的效果。
本文主要介绍一些恶意软件通过windows消息处理机制执行恶意代码的机理,也作为自己学习病毒分析的心得,也提醒大家在安装软件时注意一些推广软件的安装,防止一些恶意推广软件安装到计算机上而导致的跑流量或卡机等危害。
willJ 发表于 2015-9-4 01:36
如果是我,我就直接断createFileW就开始定位代码
哈哈,这是最快捷方便的了{:17_1062:},我刚刚起步,想了解下他的运行原理,所以就跟着走,等我摸透熟悉了,也可以直接断在关键api来分析了{:17_1074:} Hyabcd 发表于 2015-9-2 19:26
看来排版的时候两张图还是不能放在同一行,不然一出来又是参差不齐
{:1_915:}骚年,看到这个我又想自己再分析一次了。强迫症 看来排版的时候两张图还是不能放在同一行,不然一出来又是参差不齐{:17_1079:} 顶楼主啊, 分析不容易啊{:301_997:} Hyabcd 发表于 2015-9-2 19:26
看来排版的时候两张图还是不能放在同一行,不然一出来又是参差不齐
{:1_915:}骚年,看到这个我又想自己再分析一次了。强迫症 虽然不太懂,认真总能学到一些,谢谢了 康小泡 发表于 2015-9-2 22:43
骚年,看到这个我又想自己再分析一次了。强迫症
{:17_1079:}我不知道怎么弄,图片不能两张放一排吧,下回我还是用代码显示吧 2864095098 发表于 2015-9-2 22:52
虽然不太懂,认真总能学到一些,谢谢了
一起学习!{:17_1062:} 如果是我,我就直接断createFileW就开始定位代码{:1_937:}
页:
[1]
2