恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

这篇具有很好参考价值的文章主要介绍了恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文章为《恶意代码分析实战》的题目答案解析以及个人的一些理解,将通过一下问题对恶意代码Lab05-01.dll进行分析:

  1. D1lMain的地址是什么?
  2. 使用Imports窗口并浏览到gethostbyname,导入函数定位到什么地址?
  3. 有多少函数调用了gethostbyname?
  4. 将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗?
  5. IDA Pro识别了在0x10001656处的子过程中的多少个局部变量?
  6. IDA Pro 识别了在0x10001656处的子过程中的多少个参数?
  7. 使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c。它位于哪?
  8. 在引用\cmd.exe /c的代码所在的区域发生了什么?
  9. 在同样的区域,在0x100101C8处,看起来好像dword_1008E5C4是一个全局变量,它帮助决定
    走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。
  10. 在位于0x1000FF58 处的子过程中的几百行指令中,一系列使用memcmp来比较字符串的比较。
    如果对robotwork的字符串比较是成功的`(当memcmp返回0),会发生什么?
  11. PSLIST导出函数做了什么?
  12. 使用图模式来绘制出对sub_10004E79的交叉引用图。当进入这个函数时,哪个API函数可能被
    调用?仅仅基于这些API函数,你会如何重命名这个函数?
  13. D11Main直接调用了多少个Windows API?多少个在深度为2时被调用?
  14. 在ex10001358处,有一个对Sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的
    调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
  15. 在Ox10001701处是一个对socket的调用。它的3个参数是什么?
  16. 使用MSDN页面的socket和 IDA Pro中的命名符号常量,你能使参数更加有意义吗?在你应用
    了修改以后,参数是什么?
  17. 搜索in指令( opcode 0xED)的使用。这个指令和一个魔术字符串 vXh用来进行VMware检测。
    这在这个恶意代码中被使用了吗?使用对执行 in 指令函数的交叉引用,能发现进一步检测VMware的证据吗?
  18. 将你的光标跳转到Ox1001D988处,你发现了什么?
  19. 如果你安装了IDA Python插件(包括IDA Pro的商业版本的插件),运行Lab05-01.py,一个本
    书中随恶意代码提供的IDA Pro Python脚本,(确定光标是在Ox1001D988处。)在你运行这个脚本后发生了什么?
  20. 将光标放在同一位置,你如何将这个数据转成一个单一的ASCII字符串?21.使用一个文本编辑器打开这个脚本。它是如何工作的?

答案解析:

1. DllMain的地址是什么?

1000D02Eh
使用IDA打开文件后会自动跳转到DLLMAIN,或者你可以在左边的functions窗口找到dllmain地址
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

2. 使用Imports窗口并浏览到gethostbyname,导入函数定位到什么地址?

100163CCh
打开Imports窗口,ctrl+f搜索gethostbyname左边为地址
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

3. 有多少函数调用了gethostbyname?

9个
Imports窗口双击该条目跳转到反汇编窗口,点击gethostbyname条目可以使用ctrl+x或者右键List cross references to来查看函数交叉引用窗口,可以看到有9个不同的地址调用了gethostbyname
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

4. 将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗?

跳转到10001715h,gethostbyname函数的名字已经很明显了,调用前肯定需要压入一个hostname变量,反汇编窗口可以看到压入了eax,eax赋值为10019040h然后加0xD,其实右边已经有注释了,跳转也可以看见hostname的字符串

恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
可以看到[This is RDO]pics.praticalmalwareanalysis.com,eax之所以要加0xD,就是要让指针偏移到hostname开始的地方,去掉前面的”[This is RDO]“
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

5-6. IDA Pro识别了在0x100081656处的子过程中的多少个局部变量?多少个参数?

参数为EBP的正偏移,局部变量为EBP的负偏移,所以局部变量有23个,参数有1个。
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

7-8. 使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c。它位于哪?在引用\cmd.exe /c的代码所在的区域发生了什么?

打开Strings窗口,如果没有可以在View->Open Subviews->Srings打开,ctrl+f搜索cmd,地址为10095B34h跳转至反汇编窗口,ctrl+x打开交叉引用窗口,可以看到有一个地方调用了该字符串,跳转分析。
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
分析上文可以猜测是通过cmp版本信息确定是使用cmd.exe还是command.exe
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
空格使用图形模式,整体分析直接看这个函数内使用了哪些函数。下文发现大量的字符串被用于比较(如cd、exit、quit、mhost等等),上文存在一个变量字符串“his Remote Shell Session”,、这个函数中存在recv调用,函数调用前有send、connect调用,故猜测为故猜测为一个远程shell函数。
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

9. 在同样的区域,在0x100101C8处,看起来好像dword_1008E5C4是一个全局变量,它帮助决定 走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。

7-8题的分析提到了可能是通过比较版本信息来选择执行路线,dword_1008E5C4应该就是通过获取版本信息得到的,查看他的交叉引用发现在0x10001678处被写入值
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
跟踪函数sub_10003695查看eax值是表示什么,存在一个GetVersionExA函数掉用,通过_OSVERSIONINFOA结构体的dwPlatformId(如果是2那么就是win2000或更高版本)值与2比较,决定al是否置位。所以通常eax为1。
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

10. 在位于0x1000FF58 处的子过程中的几百行指令中,一系列使用memcmp来比较字符串的比较。 如果对robotwork的字符串比较是成功的`(当memcmp返回0),会发生什么?

找到robot字符串比较处,若比较成功则调用sub_100052A2。
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
"SOFTWARE\Microsoft\Windows\CurrentVersion"压入栈执行RegOpenKyeExA打开注册表,打开成功则执行RegQueryValueExA检索workTimes的值如果返回0则表示成功。调用atoi将查询到的字符串值转换为整数然后写入buffer,然后将长度Biffer和变量socket s push,再调用send,将信息发送给网络socket s。
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

11. PSLIST导出函数做了什么?

PSLIST传入了3个int,一个字符串指针。PSLIST调用了一个函数100036C3,获取操作系统信息,获取成功eax返回非0, PSLIST根据返回的eax判断版本如果等于0,如果等于0 1008E5BC置0,retn 10h,如果eax返回值不为0,那么判断STR字符串是否为0,不为0跳转,压入STR调用函数1000664C。 然后对系统的所有进程拍摄快照CreateToolhelp32Snapshot,通过send函数发送至sockt s
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

12. 使用图模式来绘制出对sub_10004E79的交叉引用图。当进入这个函数时,哪个API函数可能被 调用?仅仅基于这些API函数,你会如何重命名这个函数?

该函数内的函数调用右键xrefs graph from即可
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

13. D11Main直接调用了多少个Windows API?多少个在深度为2时被调用?

自定义交叉引用,找到mian函数使用user xrefs chart ,即可自定义深度
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)
恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

19. 如果你安装了IDA Python插件(包括IDA Pro的商业版本的插件),运行Lab05-01.py,一个本 书中随恶意代码提供的IDA Pro Python脚本,(确定光标是在Ox1001D988处。)在你运行这个脚本后发生了什么?

14-17均比较简单,不再花篇幅解释,说一下这个idapython脚本,由于书中的ida版本是比较早期的版本了,所以示例的py脚本里面很多函数在新版中是无法使用的,我使用的版本是IDA7.7,重新写了一下:

ea=idc.get_screen_ea()
for i in range(0x00,0x50):
    b=idc.get_wide_byte(ea+i)
    d=b^0x55
    ida_bytes.patch_byte(ea+i,d)

如果有需要本书电子版以及源文件可以私聊我文章来源地址https://www.toymoban.com/news/detail-454641.html

到了这里,关于恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包