恶意代码分析实战—实验11-2

实验环境:

实验设备环境:windows xp
实验工具:PEID,IDAPro,Ollydbg,wireshark,WinMD5,strings,processmonitor

实验过程

首先我们可以使用strings查看:
strings查看
这就说明恶意程序会利用appinit以及注册表永久的安装自身。并且向上分析可以发现,恶意程序可能会对邮件进行一些操作,并且会涉及到网络操作。
1、这个恶意的DLL导出了什么?
可以使用dependency walker查看:
导出函数
其存在一个导出函数
kernel32.dll
导入的kernel32.dll文件会复制文件以及拍摄系统快照的功能。
advaapi32.dll
advaapi32.dll会实现一些有关于注册表的操作。
2、使用rundll32.exe安装这个恶意代码后发生了什么?
使用process monitor监控恶意程序的运行,并设置过滤器:
监控
因为本次实验是一个dll程序,dll程序是无法直接监控的,所以监控宿主程序。
使用命令行运行:
运行
其中installer是之前我们利用dw发现的导出函数。回车之后就代表恶意程序安装成功了。
其安装之后会向系统中拷贝一个文件:拷贝文件名
3、为了使这个恶意代码正确安装,Lab11-02.ini必须放置在何处?
应该将其放置在C盘根目录下面
4、这个安装的恶意代码如何驻留?
同样使用process monitor监控注册表信息:

5、这个恶意代码采用的用户态rookit技术是什么?
使用IDA分析实验程序,首先查看一下installer导出函数:
引用情况
通过分析其引用情况,可以看出其调用了设置注册表值以及复制文件API函数,而复制文件的API函数的目的是将自身复制到系统根目录下面。
回到主函数:
主函数
我们可以看到其调用了一个未知函数,点击进去:
未知函数内部
可以看到其调用了获取系统路径的函数,回到主函数分析:
连接
在调用结束以后会调用strcat函数与“Lab11-02.ini”进行拼接,组合成一个新的路径,之后调用createfile创建文件(创建的文件就是Lab11-02.ini文件),如果可以成功创建就会调用readfile函数,将其内容读到缓冲区内,继续向下分析:
buffer数据
其将缓冲区中的数据压入栈中之后供下一步调用的函数使用,为了验证此函数是什么函数,可以进行如下操作:
首先将实验文件复制到系统目录下面并且修改名称为:spoolvxx32.dll,同时也要把ini文件页拷贝到系统目录下面,下面采用OD进行分析,将复制后的spoolvxx32.dll文件复制进来,之后在IDA中查看调用未知函数的位置:
未知函数位置
即为100016CA,在OD中跳到这个位置我们会发现在经过此函数以后会有一串可识别的字符串显示出来。
再次回到IDA中,修改名称如下:
修改名称
这样会使程序更加清晰。向下继续分析:
未知函数
我们会发现又会存在一个未知函数需要我们分析,其目的是为了安装一个内联钩子。有关于内联钩子的原理可以查看:内联钩子原理
点击进入这个函数查看详情:
内联函数详情
首先在其获取句柄以后会先调用一个未知函数,点击此函数进入:
未知函数
其调用了GetModuleFileNameA这个函数,此函数会获得文件路径,由于在上一层调用的时候hModule的值为0,也就是说此函数会获得文件的绝对路径。
返回上一层,继续掉用了sub_1001104函数:
sub_1001104函数
此函数的主要目的是将路径保存起来,再接下来调用sub_1000102D函数,此函数的目的是将字符串全部都转换为大写字母,在接下来就是进行一系列的比较,例如和THEBAT.EXE、OUTLOOK.EXE等的比较,如果不等于任何一个就会退出此函数,否则就会进入到一下模块:
模块
我们进入到第一个函数内部查看,发现其调用了GetCurrentProcessId函数,接下来调用了sub_100012FE函数,进入其内部查看:
sub_100012FE函数
此函数内部使用了获取进程ID,创建进程快照等API函数,后面又使用有关于线程的函数进行循环遍历线程,通过分析我们可知,此函数的作用就是挂起出当前线程以外的线程,这样我们就可以将此函数进行重命名为suspend_thread。
返回上一级,再返回上一级:
上一级
我们来查看一下此函数,通过分析我们可以获知,此函数的作用是如果不是当前线程那么就恢复此线程,和之前的函数正好相反。
总结来说这个模块的作用就是先挂起不相关进程,进行恶意程序的执行,然后载恢复执行。(内敛钩子)
下面分析sub_100012A3函数:
sub_100012A3函数
第一个调用的系统函数就是获取句柄函数,获取的文件就是上一层中传入的参数即“wsock32.dll”文件的句柄,接再来调用LoadLibrary加载dll程序,GetProcAddress函数获取send函数的地址,接下来:
函数
此函数存在三个参数,进入此函数进行分析:
地址转换
可以发现此过程是在修改地址,首先将0E9赋值到edx中,接着用参数覆盖ecx寄存器中的值,这一过程就是实现jmp执行,因为jmp指令的机器码就是E9。
此过程执行完毕以后就会跳转到sub_1000113D函数执行位置:
在这里插入图片描述
因为此函数的地址是作为参数传递进去的。现在将此函数重命名为:hook_function现在我们返回到钩子函数执行过程函数:
钩子函数
VirtualProtect函数可以修改进程的运行,保护其读和写的权限,下面又调用了此函数的目的是恢复原始进程权限。在上图中我们发现其使用malloc函数分配的新的空间并将其保存在var_8这个参数里面,目的是为了以后在构造E9(jmp指令)时所需的空间。
6、挂钩代码都做了什么?
进入hook_function函数:
hook_function
首先程序会在传入的字符中查找RCPT TO:字符串,接下来就是构造字符串。
此函数的目的就是检查发出的数据包中是否包含有RCPT TO:字符串,如果包含的话,就额外增加一行恶意邮件的电子邮件账户。
7、哪个或者哪些进程执行这些攻击?
进程攻击
我们可以看到其会针对以上三个进程进行攻击。,这三个进程都是有关于邮件的进程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值