本文章为《恶意代码分析实战》的题目答案解析以及个人的一些理解,将通过一下问题对恶意代码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地址

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

100163CCh
打开Imports窗口,ctrl+f搜索gethostbyname左边为地址

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

9个
Imports窗口双击该条目跳转到反汇编窗口,点击gethostbyname条目可以使用ctrl+x或者右键List cross references to来查看函数交叉引用窗口,可以看到有9个不同的地址调用了gethostbyname

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

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


可以看到[This is RDO]pics.praticalmalwareanalysis.com,eax之所以要加0xD,就是要让指针偏移到hostname开始的地方,去掉前面的”[This is RDO]“

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

参数为EBP的正偏移,局部变量为EBP的负偏移,所以局部变量有23个,参数有1个。

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

打开Strings窗口,如果没有可以在View->Open Subviews->Srings打开,ctrl+f搜索cmd,地址为10095B34h跳转至反汇编窗口,ctrl+x打开交叉引用窗口,可以看到有一个地方调用了该字符串,跳转分析。

分析上文可以猜测是通过cmp版本信息确定是使用cmd.exe还是command.exe

空格使用图形模式,整体分析直接看这个函数内使用了哪些函数。下文发现大量的字符串被用于比较(如cd、exit、quit、mhost等等),上文存在一个变量字符串“his Remote Shell Session”,、这个函数中存在recv调用,函数调用前有send、connect调用,故猜测为故猜测为一个远程shell函数。



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

7-8题的分析提到了可能是通过比较版本信息来选择执行路线,dword_1008E5C4应该就是通过获取版本信息得到的,查看他的交叉引用发现在0x10001678处被写入值

跟踪函数sub_10003695查看eax值是表示什么,存在一个GetVersionExA函数掉用,通过_OSVERSIONINFOA结构体的dwPlatformId(如果是2那么就是win2000或更高版本)值与2比较,决定al是否置位。所以通常eax为1。

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

找到robot字符串比较处,若比较成功则调用sub_100052A2。

"SOFTWARE\Microsoft\Windows\CurrentVersion"压入栈执行RegOpenKyeExA打开注册表,打开成功则执行RegQueryValueExA检索workTimes的值如果返回0则表示成功。调用atoi将查询到的字符串值转换为整数然后写入buffer,然后将长度Biffer和变量socket s push,再调用send,将信息发送给网络socket s。


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



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

该函数内的函数调用右键xrefs graph from即可

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

自定义交叉引用,找到mian函数使用user xrefs chart ,即可自定义深度

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^0x55ida_bytes.patch_byte(ea+i,d)

如果有需要本书电子版以及源文件可以私聊我

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

  1. 恶意代码分析实战 9 隐蔽的恶意代码启动

    9.1 Lab12-1 分析 查看程序的导入函数. 通过这几个函数,可以推断出是远程线程注入. 使用ProMon检测,并没有看到什么有用的信息. 使用Proexproer检查. 也没有什么有用的信息. ...

  2. MS08067 第一期 “恶意代码分析”实战班 正式开班~

    文章来源|MS08067安全实验室 恶意代码分析实战班 恶意代码分析的分类: 恶意代码分析也可作为单独的安全专业类别来看待,不过总体是偏逆向方向的,希望的受众是逆向相关的就行了,比如以前只会逆向但是不 ...

  3. 恶意代码分析实战Lab1

    第一章静态分析基础技术 恶意代码分析实战 恶意代码样本下载 1.1反病毒引擎扫描 1.2哈希值 1.3查找字符串 1.4加壳与混淆恶意代码 1.5PE文件格式 1.6链接库与函数 1.7静态分析技术实 ...

  4. 恶意代码分析实战 11 恶意代码的网络特征

    11.1 Lab14-01 问题 恶意代码使用了哪些网络库?它们的优势是什么? 使用WireShark进行动态分析. 使用另外的机器进行分析对比可知,User-Agent不是硬编码. 请求的URL值得 ...

  5. 恶意代码分析实战 8 恶意代码行为

    8.1 Lab 11-01 代码分析 首先使用strings进行分析. Gina是在 msgina.dll中的. 很多有关资源的函数. 关于注册表的函数. 使用ResourceHacker查看. 发现 ...

  6. 恶意代码分析实战 6 OllyDbg

    6.1 Lab 9-1 程序分析 首先,进行静态分析,使用strings. CreateFileA RegQueryValueExA RegOpenKeyExA RegSetValueExA RegC ...

  7. 学习笔记-第九章 恶意代码分析实战

    第九章 OllyDbg 1.加载恶意代码直接加载可执行文件,甚至dll程序.如果恶意代码已经在你的系统上运行,你可以通过附加进程的方式调试它.另外,ollydbg是一个灵活的调试系统,可以使用命令行选 ...

  8. 恶意代码分析实战Lab3-2

    Lab3-2 使用动态分析基础技术来分析在Lab03-02.dll文件中发现的恶意代码. 目录 Lab3-2 1.你怎样才能让这个恶意代码自行安装? 2.安装之后如何让恶意代码运行起来? 3.怎么可以 ...

  9. 学习笔记-第十二章 恶意代码分析实战

    第12章 隐蔽的恶意代码启动 1.启动器启动器是一种设置自身或其他恶意代码片段以达到即使或将来秘密运行的恶意代码.启动器的目的是安装一些东西,以使恶意行为对用户隐蔽.启动器经常包含它要加载的恶意代码. ...

最新文章

  1. cvpr2019 目标检测算法_CVPR2019 | 0327日更新12篇论文及代码汇总(多目标跟踪、3D目标检测、分割等)...
  2. 【安全技术】红队之windows信息收集思路
  3. Windows UI风格的设计(9)
  4. Spring基于 XML 的声明式事务控制(配置方式)
  5. php curl_init不能用,curl_init()函数不起作用
  6. Madagascar中的宏定义函数--绝对值函数和符号函数
  7. 完整简单c语言程序代码,初学C语言常用简单程序代码
  8. Android Dialog弹出对话框整理总结
  9. vs2017 开发工具颜色_2017年排名前50位的开发人员工具
  10. 物联网外设学习笔记-摄像头(一)
  11. 《元宇宙2086》亮相金鸡奖中国首部元宇宙概念院线电影启动
  12. git fatal: schannel: next InitializeSecurityContext failed: SEC E CERT EXPIRED (0x80090328)
  13. 布斯乘法算法的流程图
  14. isalpha()函数
  15. Python读写文件rb,wb,ab模式
  16. java解析Excel
  17. 一张图看懂SpringMVC
  18. 英飞凌基础学习笔记-SCU(System Control Units)
  19. Java的Reader和Writer
  20. iphone7测试软件,iphone7跑分成绩

热门文章

  1. SAP那些事-职业篇-36-从“固定资产清理”科目说开去
  2. 【章节总结】理科数学——立体几何
  3. 计算机基础学习记录4-2
  4. 【金融量化】CTA策略之VeighNa量化实战笔记(1)
  5. 计算机一级ms office模拟真题,2016计算机一级《MS Office》模拟练习题(含答案)
  6. K-means聚类分析
  7. 全国地铁数据爬取-python
  8. 回归预测 | MATLAB实现PCR(主成分回归)多输入单输出
  9. 谈谈大数据架构下的存储系统
  10. 163邮箱自动化登录实现模块化【2】