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

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

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

Labs-15-01实验

Lab15-01.exe

静态分析:

  1. 查壳——无壳
    在这里插入图片描述
  2. 查看输入表——MSVCRT.dll
    在这里插入图片描述
  3. Strings分析——出现比较有意思的字符串
    在这里插入图片描述

IDA分析

  1. 在main函数中发现xor eax eax 运算后,进行跳转,也就是说该跳转肯定会执行;满足课本中的固定条件跳转指令:
    在这里插入图片描述
    在这里插入图片描述
  2. 选中地址0x00401010处,按下D建,将该处的机器码转换成数据(也就是db 0E8h),然后选中0x00401011处的地址,按C键,将其重新反汇编转换成代码,由于前后的数据需要重新进行组合,后面会重新出现原先的代码变成了数据(db xxxx),所以需要不停地转换(按C),直到所有的代码都正常显示。
    在这里插入图片描述
  3. 继续往下,发现下面采用同样的方式进行混淆
    在这里插入图片描述
    在这里插入图片描述
  4. 采用同样的方式进行修正,
    在这里插入图片描述
  5. 整个代码已经被修正了,现在需要让IDA来重新分析这个程序,选中main函数的起始地址一直到最后的返回地址中间的代码,然后按P键。
    在这里插入图片描述
    在这里插入图片描述
  6. 整个main函数已经被重新分析,进入图模式(Graph View),整个main书的逻辑已经充分被分析出来。
    在这里插入图片描述
  7. 重头进行分析,main函数首先会检查参数,然后打印不同的字符串。
    在这里插入图片描述
  8. 其中的条件是:参数个数=2,第二个参数是pdq(第一个参数为默认的程序名)
    在这里插入图片描述

问题

  1. 这个二进制程序使用了何种对抗反汇编技术?
    回答:使用了固定条件跳转指令来干扰反汇编过程。
  2. 这个二进制程序使用了什么流氓机器代码来欺骗反汇编过程?
    回答:Call指令的机器码,0xEBh
  3. 这种反抗反汇编技术被使用了多少次?
    回答:被使用了四次(00401010,00401023,0040104B,0040105E)
  4. 什么命令行参数会让程序输出“Good Jod”?
    回答:命令行参数输入pdq时,会输出“Good Job”

Labs-15-02实验

样本:Lab15-02.exe

静态分析:

  1. 查壳——无壳
    在这里插入图片描述
  2. 检查输入表——
    SHELL32.DLL:执行shell命令函数
    WS2_32.DLL:gethostname,WSAStartup函数
    WININET.DLL:网络读取文件、打开URL等网络操作函数
    MSVCRT.DLL:——
    在这里插入图片描述

IDA分析

  1. 此程序中被加入了较多的混淆反汇编指令,与Lab15-01有一定的相似性,不同点是此程序的混淆指令类型更加丰富,可参考15章节中的三大类(相同目标的跳转指令,固定条件的跳转指令和无效的反汇编指令);关于此节引出的问题是:如何准确地找到无效的混淆指令?(即哪些指令是原指令,哪些是加入的混淆指令?)
  2. 按照15章节中的例题对main函数中的混淆指令进行识别,然后用nop指令对这些混淆指令进行替换,按照lab15-01中的处理方式一样——选中main函数的代码,按下P键;就可以让IDA重新识别main函数,按照正常的分析流程即可。
  3. 程序首先初始化socket组件,然后获取主机名称并且根据主机名称创建一个字符串。
    在这里插入图片描述
  4. 接下来的操作如下:
    1) 调用函数sub_401386获取URL地址,
    2) 从URL地址访问网络资源,并且将数据保存再缓冲区中
    3) 创建新文件,并且将缓冲区的数据写入此新文件
    4) 执行这个新创建的文件
    在这里插入图片描述

问题

  1. 程序初始化的URL是什么?
    回答:URL在函数sub_401386()中,
    为“http://www.practicalmalwareanalysis.com/bamboo.html”
  2. User-Agent域是如何产生的?
    回答: 根据主机名的字符进行switch语句进行拼接的
  3. 初始化请求时,程序再内存页中查找什么?
    回答:查找字符串“Bamboo::”
  4. 程序如何处理它从页中提取的信息?
    回答:首先搜索“Bamboo::”,然后再搜索一个“::”符号,将这里两个字符串之间的数据下载到本地文件中。

Labs-15-03实验

样本:Lab15-03.exe

静态分析:

  1. 查壳——无壳
    在这里插入图片描述
  2. 查看输入表——
    Kerne32.dll:打开终止进程,获取进程句柄,执行系统命令等函数
    Urlmon.dll:URL下载文件函数
    MSVCRT.dll:——
  3. Strings 分析——无特殊字符串

IDA分析

  1. 进入main函数进行分析
    在这里插入图片描述

  2. 再起始处发现对eax的操作,并且将eax的值赋值到栈中ebp+4;可疑看到,main函数的起始处对栈中的数据进行了部分解释,ebp+10h, ebp+0Ch和epb+08h均为main函数的参数,那么ebp+4到底是什么呢?我们知道main函数并不是整个程序的入口处,程序再进入main函数之前需要先调用系统函数然后再call main(可疑查看main函数的交叉引用进行查看),main函数与普通函数一样,call main函数之前先将参数入栈,然后需要保存当前的地址用于调用完函数后进行返回,所以ebp+4保存的是调用完main函数后需要返回的地址,此处对main函数返回的地址进行了修改,也就是说会跳到其他地址执行其他的代码,此时修改的地址是0x40148c.
    在这里插入图片描述在这里插入图片描述

  3. 跟入到0x40148c地址,在此处发现了lab15-01和lab15-02中出现的相同的混淆代码
    在这里插入图片描述

  4. 进行修正,在00401496处按D转换成数据,然后将后面的数据转换成代码(按C)
    在这里插入图片描述

  5. 继续往下,发现其他处也采用了混淆指令来对抗反汇编,进行修复后进行分析。

    扫描二维码关注公众号,回复: 16784600 查看本文章
  6. 在4014E6处发现较多的函数调用
    在这里插入图片描述

  7. 其中URLDownloadToFileA函数被用于进行URL资源下载,但在传入的参数中,URL和本地文件分别被保存在内存地址offset aCllpIiiPnuLcUu 和403040中;跟踪过去,发现他们均不是可直接观察的字符串,说明这些字符串已经被加密了。
    在这里插入图片描述

  8. 正好这两块内存地址的数据正好都在前面被函数sub_401534调用,可疑推测出该函数为加密函数。
    在这里插入图片描述

  9. 进入该函数进行分析,发现该加密函数是一个简单的取反操作。
    在这里插入图片描述

  10. 现在需要对数据进行解密,选中数据起始地址0x00403010,然后选中IDA的File >> Script File >> 编写的解密脚本文件(参考自视频教程);就可以得到真实的URL和文件名,也就是说恶意程序会访问“http://www.practicalmalareanalysis.com/tt.html”并且将数据写入本地spoolsrv.exe文件中
    在这里插入图片描述
    在这里插入图片描述

  11. 回到代码分析处,继续往下,发现调用函数WinExec来执行下载的恶意程序。
    在这里插入图片描述

  12. 整个恶意程序分析就完成了,主要的恶意功能存在附加的代码处,程序本身伪装成一个进程查看和显示程序,执行完进程查看操作后再跳到恶意代码处下载恶意程序,然后在本地运行。

问题

  1. 恶意代码怎样被初始化调用?
    回答:通过修改main函数的返回地址实现被初始化调用。
  2. 恶意代码都做了什么?
    回答:1)向指定URL发送请求,2)下载恶意程序并且在本地执行
  3. 恶意代码使用了什么URL
    回答:“http://www.practicalmalareanalysis.com/tt.html”
  4. 恶意代码使用了什么文件名?
    回答: spoolsrv.exe

猜你喜欢

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