分析实战读书笔记3_IDA小知识
2021-01-18 18:58:00 Author: mp.weixin.qq.com(查看原文) 阅读量:113 收藏

本文为看雪论坛优秀文章

看雪论坛作者ID:SSH山水画

加载前指定基地址:

将样本拖入IDA后勾选Manual load,然后点击OK,输入基地址,这样可以在IDA进行加载时就执行基址重定向相关工作。同时,这种操作还有另一个好处,可以让IDA显示PE头部数据。

显示硬编码:

点击顶部菜单栏Options->Genaral,将Number of opcode....设置为10,就可以看到硬编码了。

图形窗口跳转箭头:


图中红色箭头表示跳转未执行;绿色箭头表示跳转执行了;蓝色箭头表示无条件跳转。

文本窗口跳转箭头:


如图所示,虚线箭头表示条件跳转,实线箭头表示无条件跳转,向上的箭头一般代表循环。

IDA中的一些窗口

a. 函数窗口

 

函数窗口中列出了IDA解析出的所有函数,并关联了相关属性如开始地址,结束地址,长度,类型等 (之前竟然没注意到这个窗口还有后面的部分)

b. 名字窗口 (Shift+F4)


名字窗口展示了IDA解析出来的函数名称,字符串名称,变量名称等一些名称字符串。

c. 字符串窗口 (Shift+F12)

字符串窗口显示了IDA解析出来的字符串,但是仅支持ASCII码字符串展示。

d. 导入导出结构体窗口

分别展示了程序的导入函数 导出函数 已识别的结构体

重置视图排版:


当你乱拖动窗口发现弄不回去了的时候,点击Reset desktop可以将各个窗口位置重置,同样的,点击Save desktop也可以保存你设置好的窗口布局。

文件偏移跳转:

 

IDA中的地址是内存中拉伸后的地址,当你在HEX查看器里发现一些有趣的数据时,可以通过Jump to file offset直接输入文件偏移进行跳转,省去了我们手动进行地址转换的时间。

搜索

Alt+T 搜索字符串,可以搜索指令的字符串 如 fs:
 
Alt+B 搜索字节数据,如 30 00 00 00。

识别函数

当IDA无法正确识别一段函数时,可以按P手动要求IDA识别函数。
 
Alt+P可以指定函数的细节,如开始位置,结束位置,是否为EBP寻址,参数变量默认长度等。

图形选项

操作数内存or数据?


如图,IDA将0x410000识别为了一个内存地址,我们可以按下O让IDA将其识别为一个普通的立即数,如下图:
 

宏定义:


当一个函数的参数类似图上这种展示,肯定不易阅读的, 鼠标放在数据上, 按M,可以将常量0指定为宏名称。

1. D11Main的地址是什么?

dllmain的地址是0x1000d02e。

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

定位到了0x100163CC。

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

去除重复引用,共5个函数调用了共9次。
4. 将精力集中在位于0x10001757处的对gethostbyname 的调用,你能找出哪个DNS请求将被触发吗?

pics.praticalmalwareanalys.com将被触发。
5. IDA Pro识别了在0x10001656处的子过程中的多少个局部变量?

函数头部说明了参数个数为1个,因此识别出的局部变量个数为23个。
6.6. IDA Pro识别了在0x10001656处的子过程中的多少个参数?
 

1个参数

7. 使用Strings窗口,来在反汇编中定位字符串\ cmd.exe /c。它位于哪?


位于0x10095B34处。

8. 在引用\cmd.exe /c的代码所在的区域发生了什么?

那段代码看起来是为攻击者开启一个远程shell会话。

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

操作系统版本号被保存在了dword_1008E5C4中。

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

注册表项HKLN\SOFTWARE\Microsoft\Windows \CurrentVersion\workTime和 workTimes的值会被查询,并通过远程shell连接发送出去。

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

PSLIST 导出项可以通过网络发送进程列表,或者寻找该列表中某个指定的进程名并获取其信息。

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

在 sub_10004E79处的函数中,调用了GetSystemDefaultLangID、send和 sprintf这三个API。这个函数应该重命名有意义的名字,例如GetsystemLanguage。

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

DllMain直接调用了strncpy、strnicmp、CreateThread和 strlen这些API。进一步地,调用了非常多的API,包括Sleep、winExec、gethostbyname,以及许多其他网络函数调用。

14. 在0x10001358处,有一个对Sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?

30S

15.在0x10001701处是一个对socket的调用。它的3个参数是什么?

6 1 2

16.使用MSDN页面的socket和IDA Pro中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?

IPPROTO_TCP、SOCK_STREAM和AF_INET。

17.搜索in 指令(opcode 0xED)的使用。这个指令和一个魔术字符串 VMXh用来进行VMware检测。这在这个恶意代码中被使用了吗?使用对执行 in指令函数的交叉引用,能发现进一步检测VMware的证据吗?

在Ox100061DB和0x564D5868处分别调用了in指令,用于检测虚拟机。使用交叉引用,还可以在调用函数中发现Found Virtual Machine字符串。

18. 将你的光标跳转到Ox1001D988处,你发现了什么?

在0x1001D988处可以看到一些看起来随机的数据。

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

如果运行Lab05-01.py,会看到这段数据被反混淆得到一个字符串。

20. 将光标放在同一位置,你如何将这个数据转成一个单一的 ASCII字符串?

按下A键,就可以将其变为一个可读的字符串了: xdoor is this backdoor, string decodedfor Practical Malware Analysis Lab : )1234。

21. 使用一个文本编辑器打开这个脚本。它是如何工作的?

该脚本的工作原理是,对长度为0x50字节的数据,用0x55分别与其进行异或,然后用PatchByte函数在IDA Pro中修改这些字节。

- End -

看雪ID:SSH山水画

https://bbs.pediy.com/user-home-867232.htm

  *本文由看雪论坛 SSH山水画 原创,转载请注明来自看雪社区。

# 往期推荐

公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]

球分享

球点赞

球在看

点击“阅读原文”,了解更多!


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458380076&idx=2&sn=1f9cd13c2f57c7554287ec7eb7082685&chksm=b180d7a686f75eb0f73540917956ffa201dcb90278cba2c9dd3bf58692b858e46a0fc7820cec#rd
如有侵权请联系:admin#unsafe.sh