前言
在windows上逆向分析dll链接库,也算是对ida功能的重新复习,以及逆向的初步学习吧。文中所用的1.dll网上应该很容易找到。
题目
- DllMain 的地址是什么?
0x1000D02E
2.gethostbyname 函数定位到什么地址?
因为gethostbyname是从外部导入,因此在imports窗口搜索
0x100163CC
3.有多少个函数调用了函数 gethostbyname (格式数字 如:1)
熟悉对与函数交叉引用的理解。因为是有多少个函数调用了gethostbyname,所以有5个函数。在交叉引用的窗口中,p是调用,r是read读取。
5
4.详细分析位于 0x10001757 处的 gethostbyname 调用,DNS 请求将被触发的域名是?
很明显的数组寻址,在字符串首地址加0xd。
pics.praticalmalwareanalys.com
5.通过对 1.dll 恶意程序分析,IDA Pro 识别了在 0x10001656 处的子函数中的多少个局部变量?(格式:填写数字 如:1)
熟悉32位程序函数调用的,就可以理解为什么是23个局部变量。
23
6.在 0x10001656 处的子函数有多少个参数?
接上面,很显然。
1
7.通过分析,字符串“\cmd.exe /c”在哪个地址处。
0x10095B20
在strings中搜索"\cmd.exe"关键字,双击找到字符串的位置。
8.接上题,在引用“\cmd.exe /c” 的代码所在的区域发生了什么?
A:开启一个 shell 会话 ; B:远程发送数据包 ; C:注入恶意程序; D:扫描漏洞端口;
A
查看字符串的交叉引用,F5反编译后可以看到红框处的字符串,说明此区域的代码功能是开启shell会话。
9.0x1000FF58 处子函数中若对 ”robotwork” 字符串的 memcmp比较是成功的,会发生什么?
会通过注册表中取出机器工作时间的值,然后组成一个字符串,最后通过套字接发送出去。
比较成功会进入sub_100052a2函数。双击查看。
一眼顶针,通过socket发送robot的工作时间。
10.PSLIST 函数最后导出了什么文件
xinstall.dll
这个逆向分析起来,对我来说稍微有点困难。首先找到PSLIST函数。
可以进入查看第一个sub_100036c3函数。GetVersionExA的API函数可以搜索查看用法,此处就是对机器的version进行一个判断,需要让version>=5且platformid为2,当然这个不是重点。
成功获取到机器信息后,才会进入socket通讯的函数中。下面的sub_10000664c和sub_10006518的功能基本差不多。选择上面一个进行分析。
从后向前分析,函数最后会向socket中发送信息。那么前面的如果没有出错时,程序会判断dword_1008E5BC处的值,并调用sub_1000620C函数。继续进入。
可以看到很关键的file类型指针,以及对于file的操作,基本上可以确定,最后会输出的文件名称就是aXinstallDll处的字符串了。
11.DllMain 直接调用了多少个 API
3
查看交叉引用图,选择深度为1
粉红色的是程序直接调用的API函数
12.DllMain 函数有几个参数
3
13.程序在 0x10001358 处对 sleep 的调用会睡眠多少秒
30
301000ms即为30s*
14.在 0x10001701 处是一个对 Socket 的第 2 个参数是什么
1
跳转到相应位置查看即可。
15.搜索 in 指令(0xED)的使用。使用这个指令目的什么?
==验证程序是否在虚拟机下运行 ; ==
ALT+B,选择find all occurrences,找到in指令,并查看交叉引用。
可以看到in指令处的eax和dx分别是“vmx”和“vx”字符串。再查看哪里调用了这个检查函数。
可以看到InstallRT函数调用了上面的检查函数,同时InstallRT函数中还有“Found Virtual Machine,Install Cancel.”字符串,说明是检测是否在虚拟机状态下安装。
# 结尾
借鉴文章