恶意代码分析实战Lab5-1
文章目录
- 恶意代码分析实战Lab5-1
- 1.DllMain的地址是什么?
- 2.使用Imports窗口并浏览到gethostbyname,导入函数定位到什么地址?
- 3.有多少函数调用了gethostbyname?
- 4.将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗?
- 5.IDAPro 识别了在0x10001656处的子过程中的多少个局部变量?
- 6.IDAPro识别了在0x10001656处的子过程中的多少个参数?
- 7.使用Strings窗口,来在反汇编中定位字符串\cmd.exe/c。它位于哪?
- 8.在引用\cmd.exe/c的代码所在的区域发生了什么?
- 9.在同样的区域,在0x100101C8处,看起来好像 dword_1008E5C4是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置 dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)
- 10.在位于ex1088FF58处的子过程中的几百行指令中,一系列使用memcmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?
- 11.PSLIST导出函数做了什么?
- 12.使用图模式来绘制出对sub_18004E79的交叉引用图。当进入这个函数时,哪个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?
- 13.D11Main 直接调用了多少个WindowsAPI?多少个在深度为2时被调用?
- 14.在0x10001358处,有一个对sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
- 15.在0x10001701处是一个对socket的调用。它的3个参数是什么?
- 16.使用MSDN页面的socket和IDAPro中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?
- 17.搜索in指令(opcode0xED)的使用。这个指令和一个魔术字符串VMXh用来进行VMware检测。这在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测VMware的证据吗?
- 18.将你的光标跳转到0x1001D988处,你发现了什么?
- 19.如果你安装了IDAPython插件(包括IDAPro的商业版本的插件),运行Lab05-01.py,一个本书中随恶意代码提供的IDAPro Python脚本,(确定光标是在0x1001D988处。)在你运行这个脚本后发生了什么?
- 20.将光标放在同一位置,你如何将这个数据转成一个单一的ASCII字符串?
只用IDAPro分析在文件Lab05-01.dl中发现的恶意代码。
问题
1.DllMain的地址是什么?
打开IDA Pro,加载Lab05-01.dll文件后就来到了DllMain的地址(text:1000D02E)
2.使用Imports窗口并浏览到gethostbyname,导入函数定位到什么地址?
打开View->Open subviews->Imports
在打开的Imports窗口中找到gethostbyname函数(如上图所示)
双击该函数名,就可以来到其定位的地址(.data:0x100163CC)了
3.有多少函数调用了gethostbyname?
将光标保持在gethostbyname函数的地址,ctrl+x
查看该函数的交叉引用情况(如下图所示)
Type为r指调用,Type为r指读写,因为在调用之前需要读写,所以该窗口中对每次调用了gethostbyname的函数都重复显示了两次,仔细对比会发现,在9次调用中,有五个不同的函数对gethostbyname函数进行了调用
4.将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗?
按G键快速定位0x10001757
(如下图)
发现在该函数调用之前,将 off_10019040
的值给了
EAX,也就是函数执行用到的参数,双击该地址,跳转到该处,发现了字符串“[This is RDO]pics.praticalmalwareanalysis.com”
,由于传给该函数的参数是EAX+0Dh,所以真正的参数是“pics.praticalmalwareanalysis.com”
5.IDAPro 识别了在0x10001656处的子过程中的多少个局部变量?
快速定位到0x10001656
如下:
共有23个局部变量(注意最后一个lpThreadParameter是参数,并不是局部变量)
6.IDAPro识别了在0x10001656处的子过程中的多少个参数?
有一个参数
7.使用Strings窗口,来在反汇编中定位字符串\cmd.exe/c。它位于哪?
打开View->Open subviews->Strings
找到cmd.exe
双击它找到其地址为:xdoors_d:10095B34
8.在引用\cmd.exe/c的代码所在的区域发生了什么?
从字符串信息可以发现“Remote Shell”,“Session”,字眼,不难猜测出该程序具有远程连接的功能
9.在同样的区域,在0x100101C8处,看起来好像 dword_1008E5C4是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置 dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)
定位到0x100101C8处,查看有哪些函数对其引用
发现只有函数sub_10001656+22
对其进行了修改
跳转到该函数位置,发现将EAX的值给了dword_1008E5C4
,我们需要知道EAX的值是多少,因此需要查看在这之前调用的函数sub_10003695
的返回结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YktGvrsA-1631793518348)(%E5%AE%9E%E9%AA%8CLab05-01_md_files/image_20210912191943.png?v=1&type=image&token=V1:mUmOadusFDsoQHXKGn8kgb_SJBFiJNSQIC478t11_Bc)]
查看Sub_10003695
函数将GetVersionEXA的返回结果与2进行比较,其中2代表VER_PLATFORM_WIN32_NT
若果相等,则设置寄存器AL的值为1,所以Sub_10003695的返回值是1,最终全局变量dword_1008E5C4
的值被设置成了1
10.在位于ex1088FF58处的子过程中的几百行指令中,一系列使用memcmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?
在0x1001044C
处对robotwork与字符串进行比较(如下图)
如果比较成功(robotwork与字符串相同),返回结果为0
test eax,eax
判断eax是否为0,如果为零,ZF置位
ZF置位会导致下一条指令jnz不跳转,继续执行下面的指令
继续跳转到sub_100052A2
这个函数的功能是查询注册表的键值,并肩结果返回给上图中的ebp+s
11.PSLIST导出函数做了什么?
在导出表中找到PSLIST函数,双击跳转到函数位置
发现该函数第一次跳转与函数sub_100036C3,双击跳转到该函数处
该函数对系统的版本进行了两次比较,如果两次都满足所需条件,则返回1,否则返回0
如果返回1,则不跳转,调用函数strlen返回字符串长度。如果返回0,则直接跳转到函数结束处
12.使用图模式来绘制出对sub_18004E79的交叉引用图。当进入这个函数时,哪个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?
按照题目要求跳转到函数sub_18004E79处,打开View->Graph->User xrefs chart
点击OK弹出如下窗口
可以发现被调用的API函数包括GetSystemDefaultLangID
、sprintf
、strlen
等,其中GetSystemDefaultLangID
是获取系统默认语言的函数
可以将该函数重命名为与获取默认语言有关的名字
13.D11Main 直接调用了多少个WindowsAPI?多少个在深度为2时被调用?
再次打开交叉引用绘图,将深度设置为1
可以看到直接调用的API函数
将深度调整为二
14.在0x10001358处,有一个对sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
利用G键跳转到该处
eax
是sleep函数的参数,3E8换算成十进制为1000,也就是将atoi
的返回值乘以1000,eax的初始值是被off_10019020
赋予的
双击它,查看``off_10019020```的值,发现偏移0XD之后正好是30,也就是说eax最终是30x1000ms=30s
15.在0x10001701处是一个对socket的调用。它的3个参数是什么?
使用符号常量前,三个参数分别为6,1,2
16.使用MSDN页面的socket和IDAPro中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?
使用符号常量后,T通过
17.搜索in指令(opcode0xED)的使用。这个指令和一个魔术字符串VMXh用来进行VMware检测。这在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测VMware的证据吗?
搜索in指令
双击该函数,发现在100061C7
处给eax赋了值,内容正是‘VMXh’
18.将你的光标跳转到0x1001D988处,你发现了什么?
跳转后发现是一组不可读的数字
19.如果你安装了IDAPython插件(包括IDAPro的商业版本的插件),运行Lab05-01.py,一个本书中随恶意代码提供的IDAPro Python脚本,(确定光标是在0x1001D988处。)在你运行这个脚本后发生了什么?
数值发生了改变
20.将光标放在同一位置,你如何将这个数据转成一个单一的ASCII字符串?
通过键盘A键
21.使用一个文本编辑器打开这个脚本。它是如何工作的?