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

4、直接g跳到指定位置,看函数前面的参数,参数eax是[This is RDO]pics.praticalmalwareanalysis.com
,这是一个指针,后面add eax,0Dh 加上了13位的偏移,所以0x10001757
位置处函数的参数是pics.praticalmalwareanalysis.com
,请求的是这个域名。

5、局部参数通常以var_
开头,偏移值为负值,看红色部分;参数的偏移为正,看蓝色部分。

7、位于0x10095B34
8、查看\cmd.exe/c
的交叉引用,定位到sub_1000FF58
函数,这个函数的参数是SOCKET,是一个网络连接,还有很多字符串可以给出提示信息Encrypt Magic Number For This Remote Shell Session [0x%02x]\r\n
。根据不同系统打开了命令行,接下来就是很多比较,这部分代码在图形模式下更容易看懂,quit,exit,cd,enmagic。所以这部分代码是一个远程shell,可以执行cmd。

9、X
查看交叉引用,只有第一个地址是W类型的写入操作,跳转过去.

dword_1008E5C4
是eax的值,所以应该是sub_10003695
函数的执行改变eax的,继续跟进。

可以看到这个函数最终影响了al的值(eax的最低8位),实际上是确认系统是否是某个特定版本。

10、跳转到该位置,比较成功跟进红色箭头。跳转到sub_100052A2
。继续跟进该函数。该函数查询注册表项SOFTWARE\Microsoft\Windows\CurrentVersion



获取WorkTime
和WorkTimes
的键值。然后将格式化的字符串调用sub_100038EE
发送。
11、
在导出表中查看PSLIST函数,result是关于系统版本的信息,根据不同的系统版本进行跳转。首先跟进函数sub_1000664C
。

该函数获取系统内所有进程的快照。获取失败就获取相关错误信息,socket传回,重点关注红框内代码逻辑即可。

这部分收集了一些进程信息,并通过Socket发送。

12、直接查看交叉引用。


编辑函数修改函数名

13、使用以下方式查看引用 ,设置引用的深度为1即可。

14、关注以下部分代码,[This is CTI]30
此字符串偏移13位,在转为int,乘1000,将单位从毫秒转为秒。将30作为sleep的参数。所以代码在此部分休眠30s。

15、G
跳转到位置,三个参数是2,1,6。这里需要注意参数的压栈顺序是从右到左的。

16、可以设置符号常量,感觉其实原始参数旁边的注释已经可以帮助我们理解参数含义了。


17、可以看到564D5868h,这就是小端存储的VMXh,也是检测恶意代码有反虚拟机行为的特征码。
搜索指令可以使用search text,也可以使用Search -> Sequence of Bytes ,搜索in指令的opcode(ED)。
参考链接
https://www.cnblogs.com/FallenHWer/p/3409620.html


可以看到这个函数调用之后的比较中也出现了虚拟机相关的字符串,按时了这个函数有反虚拟机的功能。

18、发现了一个字符串但是好像乱码不可读。

19、根据提示运行脚本。File -> Script File
关于IDAPython可以参考:
https://wizardforcel.gitbooks.io/grey-hat-python/content/43.html
20、光标定位在1001D988
位置,A
可以转换位string
21、将从1001D988
位置的数据到0x50偏移的数据都与0x55进行XOR操作。
网友评论