恶意代码分析实战 第九章 实验部分 02

2022-02-22  本文已影响0人  doinb1517

Q

Lab09-02:使用OllyDbg分析恶意代码Lab09-02.exe,回答以下问题。

1.在二进制文件中,你看到的静态字符串是什么?
2.当你运行这个二进制文件时,会发生什么?
3.怎样让恶意代码的攻击负载(payload)获得运行?
4.在地址0x00401133处发生了什么?
5.传递给子例程(函数) 0x00401089的参数是什么?
6.恶意代码使用的域名是什么?
7.恶意代码使用什么编码函数来混淆域名?
8.恶意代码在0x0040106E处调用CreateProcessA函数的意义是什么?

Lab09-03:使用OllyDbg和IDAPro分析恶意代码文件Lab09-03.exe.这个恶意代码加载3个自带的DLL(DLL.dl、DLL2.dll、 DLL3.dll) ,它们在编译时请求相同的内存加载位置。因此,在OllyDbg中对照IDA Pro浏览这些DLL可以发现,相同代码可能会出现在不同的内存位置。这个实验的目的是让你在使用OllyDbg看代码时可以轻松地在IDA Pro里找到它对应的位置。

  1. Lab09-03.exe导入了哪些DLL?
  2. DLLI.dll、 DLL2.dll、 DLL3.dll 要求的基地址是多少?
  3. 当使用OllyDbg调试Lab09-03.exe时,为DLLI.dll、DLL2.dll、 DLL3.dll 分配的基地址是什么?
  4. 当Lab09-03.exe调用DLLI.dll中的一个导入函数时,这个导入函数都做了些什么?
  5. 当Lab09-03.exe调用WriteFile函数时,它写入的文件名是什么?
  6. 当Lab09-03.exe使用NetScheduleJobAdd创建-一个job时,从哪里获取第二个参数的数据?
  7. 在运行或调试Lab09-03.exe时,你会看到Lab09-03.exe打印出三块神秘数据。DLL 1的神秘数据, DLL 2的神秘数据,DLL 3的神秘数据分别是什么?
  8. 如何将DLL2.dll加载到IDA Pro中,使得它与OllyDbg使用的加载地址匹配?

A

Lab09-02

1、在IDA Pro中查看strings,看到的是一些报错字符串和导入函数名称,参考答案以后发现还有cmd字符串。这是因为IDA Pro的strings窗口显示的字符串默认最小长度是5,需要在setup里面设置。(Unicode选项也比较常见,记得选上),也可以使用strings.exe程序

cmd2.png cmd.png

2、运行程序很快就退出,使用Process Monitor捕获到了一些文件操作和注册表操作,没有太多有价值的信息。

3、运行之前将文件命名为ocl.exe,看IDA伪代码很清晰。

idacmp.png

也可以动态运行,在00401240执行之前改ZF寄存器为1。改变程序执行逻辑,相当于把文件名给改成了ocl.exe

strcmp.png

4、在地址0x00401133处是在栈上创建了字符串,这个字符串在后面被用来混淆域名。

5、在此处传入的参数是1qaz2wsx3edc和一个缓冲区。

0x4012BD处打断点,查看栈上数据

0205stack.png 0205stack2.png

6、攻击者使用的域名是www.practicalmalwareanalysis.com,添加断点到0x4012CC处,观察栈上数据。

0206.png

7、解密域名的主要逻辑在sub_401089,通过字符串1qaz2wsx3edc异或加密过的域名信息来完成解密工作。

02062.png

8、这部分代码显然是一个反向shell,将cmd的输入,输出,错误绑定到socket,并且wShowWindow被赋值为0,不显示窗口。

0208.png

Lab09-03

1、有六个导入的DLL,导入表中有四个,LoadLibrary函数调用了两个。

0301imports.png

查看交叉引用

0301imports2.png

2、三个文件基址都是要求0x10000000,使用PEView查看即可。

3、基址如下图所示

DLL1和DLL2在导入表中,都是被立即加载的,DLL3是被动态调用的。在0x004010417下断点。在OD的内存映射界面查看基址重定位的结果,只有DLL1在预定的0x10000000位置。

loaddll3.png re.png

4、

运行程序结果如下。

04.png

IDA Pro中查看DLL1,查找dword_10008030的交叉引用 ,看是什么时候被赋值的。发现是调用了GetCurrentProcessId以后的结果。

dll111.png dll11.png

OD中动态运行,拿到的进程ID是0xBC8(十进制3016)

od1111.png

接下来用Process Monitor验证一下,重新调试程序

getpid.png

而且新建了文件temp.txt,文件内容是malwareanalysisbook.com

temptxt.png

同理分析DLL2的两个函数DLL2Print函数打印的是CreateFileA的执行结果,也就是文件句柄。

5、写入的文件名是temp.txtWriteFilehFile参数是DLL2ReturnJ返回的文件句柄。

6、第二个参数是从DLL3GetStructure函数返回的一个指向全局变量stru_5EB0A0的指针,通过查询MSDNNetScheduleJobAdd的参数发现第二个参数是一个名为AF_INFOstruct。可以在Structures窗口添加一个结构体(使用快捷键Insert)

进入stru_5EB0A0的内存位置,选择Edit -> Struct Var

struct2.png

7、可以看到DLL3打印出的是宽字符串的地址转换为十进制的结果。在调用00401041 FF15 20504000 call dword ptr ds:[<&KERNEL32.LoadLibrar>;之后 DLL3的_DllMain就执行完毕了,这时候就能根据内存映射界面DLL3的基址加上0xB0c0的偏移找到内存中的宽字节字符串了。

address_widechar.png

7、神秘数字上面已经分析完毕。

8、在加载到IDA Pro时候,选择手动加载(Manual Load),如下。

reload.png

可以看到此时IDA Pro中显示的地址就和OD中的地址一致了。

reload1.png reload2.png
上一篇下一篇

猜你喜欢

热点阅读