恶意代码分析实战15-3
Posted Neil-Yale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战15-3相关的知识,希望对你有一定的参考价值。
本次实验我们将会分析lab15-03.exe文件。先来看看要求解答的问题
Q1.恶意代码怎样被初始化调用?
Q2.恶意代码都做了什么?
Q3.恶意代码使用了什么URL?
Q4.恶意代码使用了什么文件名?
首先使用IDA分析
查看imports窗口
看到了可疑函数URLDownloadToFile,WinExec
再通读一下main
调用上图的函数给当前进程创建快照
而后是一个循环结构
里面调用了ProcessFirst
对应地,在循环的下面调用了Process32Next
其组合使用可以用于列举当前进程
如果真是这样的话,我们发现的那些导入函数就没有意义了。
我们回到main开始处
前两条指令将40000h和0x148c进行或操作,结果为0x0040148c,将其保存在eax
之后该值赋给ebp+4
打开od,直接跳到40100c
然后下断点,执行过来
接着单步执行到401016
此时ebp值如上所示,我们在堆栈窗口中跟随
ebp+4是0012ff50
可以看到是指向main函数的返回地址
那么我们就清楚了,这三条指令的作用就是将main函数返回地址覆盖成0040148c,这样就可以执行0040148c后的指令了
Q1.恶意代码怎样被初始化调用?
A1.通过覆盖main函数的返回地址,初始化调用恶意代码。
回到IDA直接跳到0040148c
如下所示
可以看到是一段孤立的代码,IDA没能将其识别为函数的一部分
option->general显示机器码,方便分析
注意到00401494处存在对抗反汇编的技术
其上一条的指令给eax赋0,使用jz会一直成立。跳到401496+1,即401497,也就是5字节jmp指令的第二个字节,这是不正常的
光标定位到00401496,按d键转为数据
定位到00401497,按c键转为代码
正确反汇编后的结果如上
继续分析
在004014b3看到了printf,用于打印上面的字符串,不过这是永远也不会执行的
因为在其之前,可以看到创建了一个异常处理例程。Xor指令会给ecx赋0,而div则会将ecx做除数,从而引发除零异常。此时就会跳到4014c0
而我们看到IDA没有将此处的数据识别为代码,而是将其作为DWORD进行表示。
光标定位到004014c0,按c键转为代码
继续往下分析
004014c0到004014d7用于从链中摘除异常处理例程,并从栈中删除了记录。004014d7存在对抗反汇编技术,IDA将其目的地址也标记为红色
光标定位到004014d7,按d键
光标定位到004014d8,按c键转为代码
接着继续分析
这里调用了URLDownloadToFile
其第二个、第三个参数分别为url,文件名
而对应在上图,则是unk_403010,unk_403040
跟入任一个可以看到
这些数据不是以ascii文本显示的
004014eb,004014f8两处调用sub_401534时注意到传入的就是unk_403010,unk_403040
所以我们推测,sub_401534是解密函数
跟入该函数
这里一个循环结构,最重要的就是箭头所指的xor语句,将缓冲区中的每个字符与0ffh异或从而修改他们
知道了解密的原理,我们就可以编写一个脚本帮助我们解密内容了
脚本如下
file->script file,选择该脚本,解密后如下所示
两个字符串分别为http://www.practicalmalwareanalysis.com/tt.html和spoolsrv.exe
Q3.恶意代码使用了什么URL?
A3.恶意代码使用的URL是http://www.practicalmalwareanalysis. com/tt. html。
Q4.恶意代码使用了什么文件名?
A4.恶意代码使用的文件名是spoolsrv.exe。
继续往下分析
00401519处还是同样的处理
正确的反汇编结果如上所示
调用了WinExec,运行的程序是unk_403040,也就是spoolsrv.exe
之后就是调用ExitProcess终止自身。
Q2.恶意代码都做了什么?
A2.恶意代码从一个URL下载文件,并且用WinExec启动它。
参考:
1.《恶意代码分析实战》
以上是关于恶意代码分析实战15-3的主要内容,如果未能解决你的问题,请参考以下文章