《恶意代码分析实战》实验——Labs-05

《恶意代码分析实战》实验——Labs-05

记录《恶意代码分析实战》中的实验,提供相关链接:

Labs-05-1实验

1.  DLLmain函数地址是什么?
   回答: 0x1000D02E,双击Function name窗口的DLLMain函数即可在主窗口中进行跳转。

在这里插入图片描述
2.   使用Import 窗口浏览到gethostbyname,导入函数定位到什么地址?
   回答:定位到0x100163CC, 打开主窗口中的Import标签框

在这里插入图片描述
3.  有多少函数调用了gethostbyname?
    回答:5个函数直接调用了gethostname,
    思路:先定位到函数首地址0x100163CC,然后选中gethostbyname右键,再选择交叉引用,可以看到有5个函数直接调用了gethostbyname

在这里插入图片描述
在这里插入图片描述

4.  0x10001715处对gethostbyname的调用,能找出哪个DNS请求将被触发吗?
    回答:“pics.praticalmalwarewareanalysis.com“的请求将被出发;
    思路:首先定位到0x10001715处的gethostbyname函数的调用处,然后发现前面的eax中传入的参数是内存中的数据,进行跟踪后得到一个域名的字符串 "[This is RDO] pics.praticalmalwarewareanalysis.com ",后面加上0Dh是为了跳过前面的“[This is RDO]”字符串而直接指向域名

在这里插入图片描述
在这里插入图片描述

5.  IDA Pro 识别了在0X10001656处的子过程中的多少个局部变量?
    回答:一共23个局部变量,局部变量用var_ 前缀标出;
    思路:先定位到0x10001656处,然后查看变量。其中后面的十六进制数代表该变量位于ebp偏移的地址,所以局部变量均为负值,参数为正值。

在这里插入图片描述

6.  IDA Pro 识别了在0X10001656处的子过程中的多少个参数?
    回答:一个参数

在这里插入图片描述

7.  使用Strings窗口,在反汇编中定位字符串”\cmd.exe /c” 它位于哪?
    回答:该字符串在0x100101D0处;
    思路:在主窗口选项中选择search --> text;然后输入”\cmd.exe“ 即可找到该字符串的位置(其中上面的为引用该字符串的地方,下面的为内存中的实际位置),然后双击进行跟踪。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.  在引用“\cmd.exe /c”的代码所在的区域发生了什么?
    猜测:该区域的功能是建立一个远程的shell。
    思路:分别查看前后两个区域的字符串和函数。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.  0x100101C8处,dword_1008E5C4像是一个全局变量,它帮助决定了走哪条路径,恶意代码是如何设置dword_1008E5C4的?(提示使用dword_1008E5C4的交叉引用)
    思路

  • 1) 先跟踪到这个变量,然后查看该变量的引用,发现有一个写的引用和两个读取的引用,我们重点关注写的引用。
    在这里插入图片描述

  • 2) 跟踪到写的引用,发现由eax赋值,而前面并没有明显的eax赋值操作,但是前面有一个函数调用,而eax常被用于函数返回值的存放,所以这里可以确定这个全局变量值是由这个函数决定的
    在这里插入图片描述

  • 3) 跟踪该函数,发现该函数内部调用系统函数,msdn搜索发现,这些函数主要用于计算机系统版本信息的获取,那么我们初步判定这个全局变量存放的系统版本信息。
    在这里插入图片描述

10.  0x1000FF58处的子过程中有memcmp来比较字符串,如果对“robotwork”的字符串比较是成功的(memcmp返回0),则发生什么?
    回答:如果匹配成功,那么计算机的只当注册表将被发送到远程的C&C中
    思路

  • 1) 根据字符串找到相应的代码位置,如果匹配成功则会调用 sub_1000525A函数
    在这里插入图片描述

  • 2) 跟踪到该函数进行查看,主要观察一些call的函数调用
    注册表的操作:
    在这里插入图片描述在这里插入图片描述
    跟到另一个函数:
    在这里插入图片描述
    在该函数中跟踪到一个send函数,该函数是一个网络数据包发送函数:
    在这里插入图片描述

11.  PSLIST导出函数做了什么?
    回答:获取进程和线程的状态和信息
    思路

  • 1) 先查看导出函数:
    在这里插入图片描述

  • 2) 跟踪到PSLIST函数
    用图模式进行观察:
    在这里插入图片描述 在这里插入图片描述
    第一个模块的函数调用与前面第9问分析的函数一样,用于获取系统的版本信息。
    在这里插入图片描述

  • 3) 获取系统版本信息后继续会进行判断,第一个判断决定从模块1跳到2还是跳到6,第二个判断决定是从模块2跳到3还是4.
    在这里插入图片描述

  • 4) 分析模块3和模块4,发现在他们调用的函数中(也就是sub_10006518和sub_1000664C)几乎拥有同样的功能:获取计算机运行的进程和线程信息。
    在这里插入图片描述
    在这里插入图片描述

  • 5) 最终将这些进程和线程信息返回给调用者

12.  使用图模式来绘制sub_10004E79的交叉引用图,当进入这个函数时,哪个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?
    思路

  • 1) 找到函数位置,然后选中它右键,选择“Xrefs graph from …” 这是以图模式显示出它可能交叉引用的函数(调用的函数)
    在这里插入图片描述

  • 2) 其中可能调用的函数有:GetSyetemDefaultLangID 是系统默认语言的检查函数、字符串打印函数、字符串长度计算函数、网络数据发送函数send等;那么猜测这个函数的功能是获取操作系统的语言信息,然后把该信息作为网络数据进行发送。
    在这里插入图片描述

13.  DLLMain直接调用了多少个Windows API? 多少个在深度为2时被调用?
    思路

  • 1) 在Function name 窗口选中DllMain函数,然后单击一下IDA-view子窗口,然后在主窗口中选择view --> Graphs --> User xrefs chart…
    在这里插入图片描述
  • 2) 由于需要查看的深度为2,我设置深度值为2
    在这里插入图片描述
  • 3) 得到一个非常复杂的函数的调用图,DllMain函数深度为2的调用函数很多。
    在这里插入图片描述

14.  0x10001358处,有一个sleep函数的调用,如果这段代码执行,程序会睡眠多久?
    回答:会睡眠30秒
    思路

  • 1) 先定位到该处,发现sleep函数的参数是由eax传递
    在这里插入图片描述

  • 2) 继续网上分析,发现eax是由内存地址为off_10019020处的内容决定,则跟踪到该内存,发现是一个字符串.
    在这里插入图片描述
    在这里插入图片描述

  • 3)继续往下分析,eax被加上0x0Dh,也就是指向字符串的起始地址往后移,0x0Dh的十进制是13,而整个字符串长度为15,则现在eax指向的是 “30”;继续往下,有一个函数调用atoi,这个函数是将字符串转换成int型整数,所以现在的eax=0x1E (十进制30);继续往下eax=eax*0x3E8=0x7530 (十进制为30000);因此睡眠的时间为30000毫秒即30秒

15.  0x10001701处是一个对socket的调用,它的3个参数是什么?
    回答:参数分别是:通信域(2),套字节类型(1),协议类型(6)在这里插入图片描述

16.  使用MSDN页面的socket和IDA中的命名符号常量,你能使参数更加有意义吗?你在应用了修改以后,参数是什么?
即将上面的参数转换成socket函数指定的参数表示:2表示通信域中的AF_INET,1表示套字节类型中的SOCKET_STREAM,6表示的是IPPROTO_TCP;这些都可以在MSDN中查询到。

17.  搜索in指令(opcode 0xED)的使用,这个指令和一个魔术字符串VMXh用来进行VMware检测;这个检测在恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能进一步发现检测VMware的证据吗?
    回答:能
    思路

  • 1) 先进行代码搜索,在主窗口的标签栏中选择 search --> sequence of bytes,然后搜索ED在这里插入图片描述在这里插入图片描述
  • 2) 找到in 指令,然后跳转到指定位置
    在这里插入图片描述
  • 3) 发现一段奇怪的数据,选中后右键,发现它转换成字符串就是目标字符串 “VMXh”
    在这里插入图片描述
    在这里插入图片描述
  • 4) 找到改代码块的函数,为sub_10006196,然后查看其他函数对它的交叉引用(选中函数,然后按X键)
    在这里插入图片描述
  • 5) 选中第一个调用进入查看,然后转到图模式(按空格键或者右键选择“Graph view”),其中模块3就是我们前面关注的sub_10006196函数调用部分。
    在这里插入图片描述
  • 6) 发现模块1是程序安装函数InstallRT,模块6是该函数的结尾,也就是说sub_10006196函数在程序安装的过程终会被调用。
    在这里插入图片描述
  • 7) 继续分析,在模块4中发现可疑字符串 “Found Virtual Machine, Install Cancel” 也就是说该模块的流程逻辑对程序的运行环境进行了虚拟机检测,发现虚拟机就取消安装。
    在这里插入图片描述
  • 8) 所以我们猜测,模块1启动安装,先进行第一次检测如果没检测到虚拟机则进入模块5进行安装;如果检测可能存在虚拟机,则进入模块2 进行第二次虚拟机检测,如果检测到虚拟机直接跳转到模块4,然后取消安装;如果没有则进入模块3进行第三次虚拟机检测,如果没有检测到则进入模块5进行安装,反之则进入模块4取消安装。

18.  将你的光标调转到0x1001D988处,发现了什么?
    回答:隐藏的 恶意代码 字符串
    思路

  • 1) 先定位到目标地址处,发现是一串奇怪的字符串,我们拿十六进制再看看
    在这里插入图片描述
    在这里插入图片描述
  • 2) 这段字符串有些奇怪前后什么都没有,我们试试将它们转换成代码(直接选中地址,然后按C),豁然开朗啊,原来是插入的恶意代码;仔细看看这些代码,不对,这些代码逻辑非常混乱而且前后残缺,应该不是正确的代码。
    在这里插入图片描述

19.  如果你安装的IDA python插件在插件中运行附加的py脚本,会发生什么?

20.  将光标放在同一位置,如何将数据转换成单一的ASCII字符串?

21.  使用文本编辑器打开这个py文件,它是如何工作的?
看了实验教程才知道,原来上面的字符串是需要解密的,
尴尬,ԾㅂԾ,,我还把它当成代码来分析。

  • 1) 首先打开python脚本
    在这里插入图片描述
  • 2) 编写功能相同的idc脚本:
    在这里插入图片描述
  • 3) 光标停止在起始位置
    在这里插入图片描述
  • 4) 在主窗口标签中选择 File – > Script file,然后加载刚刚完成的idc脚本
    在这里插入图片描述
  • 5) 字符串发生变化,然后再Hex view中查看,字符串已经正常显示
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39561364/article/details/108585373