美文网首页
恶意代码分析实战 第九章 实验部分 02

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

作者: doinb1517 | 来源:发表于2022-02-22 20:05 被阅读0次

    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

    相关文章

      网友评论

          本文标题:恶意代码分析实战 第九章 实验部分 02

          本文链接:https://www.haomeiwen.com/subject/kjtnlrtx.html