本次实验我们将会分析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.《恶意代码分析实战》
本文详细解析了一段恶意代码如何通过覆盖main函数返回地址实现初始化调用,揭示了它从'http://www.practicalmalwareanalysis.com/tt.html'下载文件并执行spoolsrv.exe的过程。作者还展示了如何通过IDA反汇编和脚本来解密和分析恶意行为。
1700

被折叠的 条评论
为什么被折叠?



