恶意代码分析实战5-1

恶意代码分析实战Lab5-1

文章目录

只用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函数包括GetSystemDefaultLangIDsprintfstrlen等,其中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.使用一个文本编辑器打开这个脚本。它是如何工作的?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值