20145326蔡馨熤《计算机病毒》——高级静态分析(2)
尝试使用IDA PRO分析文件lab05-01.dll,回答如下问题:
1.PSLIST导出函数做了什么?
- 首先在view中选择exports窗口,然后找到PSLIST导出函数。
- 双击PSLIST,然后按空格键,转换为图形模式,这样的话,观察更直观。
- 双击第一个call语句。看看有什么发现。如图所示。
- dwplatformid与2进行比较,看现在是不是处于WIN32-NT的这个平台。
-
majorversion与5进行比较, majorversion的值如果大于5的话,那说明它是Vista及以上的操作系统。 majorversion的值如果小于等于5的话,那说明它是Vista以下的操作系统。(根据MSDN得知)
-
《Microsoft Developer Network》(简称MSDN),是微软的一个期刊产品,专门介绍各种编程技巧。同时它也是独立于Microsoft Visual Studio制作的唯一帮助。目前大部分文章存放在MSDN的网站上,任何人可以免费参阅。
-
再往下看,点击左边那个call语句。
-
发现里面有个叫CreateToolhelp32Snapshot的API函数。这个API函数可以获取我们系统中的进程列表。它一般是与Process32First和Process32Next这样不断的循环,从而获取我们系统中的进程信息。
-
再看看右边的call,我们同样也发现了这样一个API函数,用于获取我们系统中的进程信息。
- 分析到这里呢,我们可以得知这个PSLIST导出函数,可能会通过网络,发送我们的进程列表,或者寻找我们这个列表中某一个特定的进程名,然后进行下一步操作。
2.使用图模式绘制出sub_10004E79的交叉引用图。当进入这个函数时,哪个API可能被调用?仅仅基于这些api函数,你可以如何重命名这个函数?
- 在Function name栏中找到sub_10004E79。
- 然后进行如下操作:
- 得到sub_10004E79的交叉引用图。
- 我觉得获得系统默认语言的这个函数很重要吧。
- send这个函数也很重要吧。像打印等的函数就不那么重要了。
- 于是进行如下修改:
- 修改后,我们可以非常直观的了解到这个函数的功能是什么。
3.DLLMAIN直接调用了多少个WINDOWS API?多少个深度为2时被调用?
- 先找到DLLMAIN。然后进行如下操作,将深度设为2。
- 它的交叉引用图很复杂啊。DllMain直接调用了4个API,有31个深度为2时被调用。
4.尝试使用MSDN页面的socket和IDA中的命名符号常量,使得0x10001701处对socket调用的参数更有意义。
- 先按下“G”键,跳到这个位置去。
- 可以发现调用socket函数之前,压栈了3个参数,这里要注意,2是第一个参数,1是第二个参数,6是第三个参数。
- 通过MSDN页面,找到每个参数代表的具体含义。
- 然后进行如下操作,将参数转换。
5.搜索in指令(OxED)的使用。这个指令和一个魔术字符串VMXh用来进行Vmware检测。这在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测vmware的证据吗?
- 先查找“0xED”。
- 找到in语句。然后双击。
- 在这里我们可以发现一个字符串,564D5868h。这代表什么意思呢?我们可以用右键将它转换为一个字符。于是VMXh出现了。
- 按一下空格,切换到图形界面。
- 在开头可以看到一个sub_10006196,交叉引用一下。
- 可以发现有三处交叉引用调用了这个函数。看看第一个。
- 下面又看见了一个字符串:Found virtual machine,install cancel。
- 于是可以说这个函数就是判断目前我们是否在VMware虚拟机中进行操作。