病毒分析教程第五话--动态调试分析(中)

版权声明: https://blog.csdn.net/m0_37552052/article/details/82726676

动态调试分析(中)


教程参考自《恶意代码分析实战》
程序来自:http://www.nostarch.com/malware.htm


Lab 9-2

本节实验使用样本Lab09-02.exe。

在二进制文件中,你看到的静态字符串是什么?

右键 -> 查找 -> 所有参考文本字串,我们看到了“cmd”和一些导入函数。
1

当你运行这个二进制文件时,会发生什么?

按下运行键,程序一下就终止了,看来要让该样本运行起来是有条件的。
2

怎样让样本运行起来?

样本没能运行起来,那就只能通过OD进行动态调试找原因了,先使用IDA查看OEP,为0x401128。
3

在0x401128处下断点,按下F9便来到了OEP,顺便打个快照(动态调试时要养好打快照的习惯,提高调试效率)。
4

开头一看就是赋值操作,我们在ss:[0012FDAF]处右键 -> 数据窗口中跟随地址,便可跟踪到对应的数据,为“1qaz2wsx3edc****ocl.exe”。
5

GetModuleFileNameA下面有一个函数0x401550,大家不要陷进去分析了,使用IDA可以发现它就是_strrchr,由于OD缺少符号表所以没有解析出来,网上有介绍OD加载符号表的方法。
6

_strrchr的功能为截断样本名,然后样本会调用_strcmp比较样本名是否为ocl.exe,若不是,则退出。好了,我们找到原因了,现在我们把样本重命名为ocl.exe再进行调试。
7

在地址0x00401133处发生了什么?

一个字符串在栈上被创建,攻击者常用这种方法来混淆静态分析技术和字符串查看技术。

传递给子函数0x00401089的参数是什么?

样本接着调用了WSAStartup和WSASocketA来初始化一个socket。
8

传递给函数0x401089的参数分别是一个缓冲区和字符串“1qaz2wsx3edc”。
9

恶意代码使用的域名是什么?

进入到函数0x401089内部,发现其主体就是一个循环,结合它的两个参数,我们不难猜测它在做解密操作,而解密后的字符串存放在哪呢?答案就是在ss:[ebp+eax-0x100]也就是0x12FB48处, 解密出来的字符串为“www.practicalmalwareanalysis.com”。
10

恶意代码使用什么编码函数来混淆域名?

使用字符串“1qaz2wsx3edc”异或加密的DNS名来解密域名。

恶意代码在0x0040106E处调用CreateProcessA函数的意义是什么?

往下看,样本会调用gethostbyname获取C&C服务器的IP,若不成功,则不断循环睡眠30s+尝试连接的操作。
11

从ntohs的调用我们可以知道端口号为9999(0x270F),然后使用connect连接C&C服务器的9999端口。
12

由于C&C服务器的9999端口已关闭,所以这里的connect函数调用会返回失败,你可以使用NetCat和ApateDNS伪造IP来避免这种情况。我这里图方便,就直接修改Z标志寄存器使得跳转成功了。
13

接着上图分析函数0x401000,其内部调用了CreateProcessA,对应的可执行文件为cmd.exe。我们细想一下,样本不会无聊地单纯弹出一个cmd啊,一定还有其他什么参数之类的。
14

我们使用IDA协助分析,发现原来在CreateProcess之前,样本对进程的StartupInfo进行了修改,重定向了标准流,重定向了哪呢?不难想象,重定向了上面创建的socket中,ebp+arg_10为socket从C&C那接收的恶意命令,被赋值给了edx,然后edx绑定到了cmd输入流中并执行,同理cmd的执行结果也被输出到了socket中。
15

样本的恶意行为就是创建一个反向shell。

至此,整个Lab09-02.exe的执行流程分析完毕。

猜你喜欢

转载自blog.csdn.net/m0_37552052/article/details/82726676