恶意代码分析实战19-01

Posted Neil-Yale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战19-01相关的知识,希望对你有一定的参考价值。

本次实验我们将会分析lab19-01文件。先来看看要求解答的问题
Q1.这段shellcode是如何编码的?
Q2.这段shellcode手动导入了哪个函数?
Q3.这段shellcode和哪个网络主机通信?
Q4.这段shellcode在文件系统上留下了什么迹象?
Q5.这段shellcode做了什么?

将实验程序载入IDA

可以看到是一些ecx自增操作
一直到了200开始才是正常的代码段

shellcode的解码器也是从这里开始的
一开始的xor用于清空ecx,之后将18dh赋给cx
jmp来到loc_21f,而在下图可以看到loc_21调用sub_208,在call指令执行后,就会把下一条指令的地址也就是224压到栈顶
如下所示

可见这里是一个循环
循环体外的202处看到ecx被赋值18dh,循环体中的21B处有dec ecx,这说明ecx是起到计数器的作用
将光标定位到sub_208,按空格键切换模式

可以看到和我们描述的一样,再切换回来
208处pop指令会将栈顶也就是224这个地址赋给esi
之后push则是将其压栈,mov指令将esi赋给edi
lodsb指令在这里是将esi赋给eax,esi中的地址是224,该地址的值是多少呢?
我们光标定位到224,按d键

点击yes得到如下结果

可以看到该地址的值是49h
也就是将49h赋给eax
之后al赋给dl,dl此时的值就是49h,dl减去41h,所得结果左移4位
然后esi自增,变成了225,同样定位到225,按d键,结果如下

通过215处的lodsb将225地址的值4ah赋给eax,al的值就是4ah
al-41h,再将其结果与dl相加,结果保存在al
21a处的stodb将eax的内容赋给edi所指向的地址的位置,而edi这次是被赋了224这个地址,也就是说上面运算的结果被保存在了224地址处
之后,edi会指向下一个地址,Ecx自减,然后继续循环
在21e处的retn则会来到224处,在224开始解码,这里就是开始解码的地方。
我们知道这是解码的操作,但是上面的分析可以还是比较麻烦的,我们尝试将shellcode从bin文件提取出来(提出来的shellcode在shellcodet.txt)
shellcode.txt如下所示
然后将其填入模板template.txt
得到test.txt
使用vc++6.0编译
首先创建一个test.cpp文件

然后将test.txt内容粘贴进去

接着依次编译、链接
点击下图两个按键就可以

在debug目录下得到test.exe

使用od分析test.exe
直接ctrl+g来到4016b4的地方,这里是调用main函数的地址

我们在这里下断点,然后命中,接着f7步入

这样就来到了main函数中
直接往下走到retn处(在4010bb下断点,再命中即可)

然后切换到打开的cmd中,按下回车

再回到ollydbg,f7单步走,来到了shellcode解码的地方

注意:
这里开始就是我们在IDA中看到的解码的部分,我们在ollydbg在按照od所呈现的信息再简单分析一遍
解码部分从12fb80开始,加载被编码的字节对,减去基值0x41,移位并且将两个值相加,然后将结果存回内存中。12fb89处的push指令用12fb9e处的retn指令将控制转到攻击负载
Q1.这段shellcode是如何编码的?
A1.这个shellcode使用了一种字母编码的方式,攻击负载的一个字节存储在两个编码字节的低4比特位
注意到既然12fb9e处有个retn,我们可以直接在这里下断点

就可以完成解密的流程,得到解密后的代码

注意看上图,在还没有按f9命中的时候12fba4开始往下的地方都是没有正确识别出指令的
接下来我们下完断点,按f9执行,如下所示

12fba4开始往下的指令都被成功解码出来了
接下来回到第二个问题:这段shellcode手动导入了哪些函数?
这里我们切换到kali使用sctest来模拟shellcode,命令如下
sctest -Svs 1000000 < Lab19-01.bin > sectest-lab19.txt
结果如下所示

在这里看到shellcode导入了
LoadL ibraryA
GetSystemDirectoryA
WinExec
URLDownloadToFileA
Q2.这段shellcode手动导入了哪些函数?
A2.shellcode导入了:
LoadL ibraryA
GetSystemDirectoryA
WinExec
URLDownloadToFileA
从上图可以看到shellcode会连接到http://www.practicalmalwareanalysis. com/shellcode/annoy_user. exe
Q3.这段shellcode和哪个网络主机通信?
A3. shellcode 下载如下URL:
http://www.practicalmalwareanalysis.com/shellcode/annoy_user.exe。
在上图我们注意到
使用URLDownloadToFile将annoy_user.exe下载后保存为了system32目录下的1.exe文件,之后会通过winexec来运行
Q4.这段shellcode在文件系统上留下了什么迹象?
A4. shellcode 在文件系统上写了文件%SystemRoot%\\System32\\I.exe,并运行它。
Q5.这段shellcode做了什么?
A5. shellcode 会从指定的URL下载文件,将下载的文件写到硬盘,并运行它。

以上是关于恶意代码分析实战19-01的主要内容,如果未能解决你的问题,请参考以下文章

恶意代码分析实战18-3

恶意代码分析实战3-2

恶意代码分析实战3-2

恶意代码分析实战9-1

恶意代码分析实战11-1

恶意代码分析实战15-3