恶意代码分析实战9-2

本次实验我们将会分析lab09-02.exe文件。先来看看求解答的问题如下
Q1.在二进制文件中,看到的字符串是什么
Q2当运行这个二进制文件时,会发生什么
Q3怎样让恶意代码的攻击负载(payload)获得运行
Q4在地址0x00401133发生了什么
Q5传递给sub_401089的参数是什么
Q6.恶意代码使用的域名是什么
Q7恶意代码使用什么编码函数来混淆域名
Q8恶意代码在0x0040106e处调用CreateProcessA函数的意义是什么

为了回答第一个问题,直接使用strings.exe查看
在这里插入图片描述

结果如下
在这里插入图片描述

可以看到一些导入函数和字符串cmd
Q1.在二进制文件中,看到的字符串是什么
A1.可以看到一些导入函数和字符串cmd
ida载入看到main入口是401128
在这里插入图片描述

ctrl+g跳转到该地址
在这里插入图片描述

下断点,然后执行
在这里插入图片描述

可以看到
在这里插入图片描述

可以看到有一系列的mov指令,将单字节移入到本地变量。
注意到有2个0,也就是2个NULL终止符,意味着其实这是两个字符串
那么具体是什么内容呢?
可以用ida
在这里插入图片描述

全部转换之后如图所示
在这里插入图片描述

或者也可以用od
单步走到这里
在这里插入图片描述

右键
在这里插入图片描述

主要关注下方数据窗口中的内容
单步走
在这里插入图片描述

可以看到缓冲区里的这些字符了
继续单步执行
在这里插入图片描述

这里调用了getmodulefilename
我们看看buffer中的内容
在这里插入图片描述

然后步过
在这里插入图片描述

可看哦了当前程序的完整路径
继续往下单步
看到有调用401550
在这里插入图片描述

切换到ida中分析
在这里插入图片描述

上面的5c表示的是
call的是这个库函数,而od没有分析出来是因为缺乏符号支持
这个函数在这里就是用于查找最后一次出现\的位置,并返回从\开始往后的所有字符,换句话说,就是用于获取当前文件的名称
在od中步过,然后看看返回值,返回值是保存在eax里
在这里插入图片描述

右键,follow in dump
在这里插入图片描述

就看到文件名了
继续单步走
又有个call 4014c0
在这里插入图片描述

不过还是没有解析出名称
可以看到它的两个参数
在这里插入图片描述

到ida中看看
在这里插入图片描述

是strcmp
而我们知道传入的两个参数是不相等的,所以会返回非0值
可以在od中步过
在这里插入图片描述

注意到其返回值为1
继续往下走
在这里插入图片描述

可以看到一个跳转
回到ida分析
在这里插入图片描述

可以看到如果比较一致,则走绿色的线
不一致则走红色的
而我们当前是不一致,也就是走红色
跟过去
在这里插入图片描述

可以看到,就来到了main函数的结束位置
所以我们直接运行原程序时会直接直接退出
Q2当运行这个二进制文件时,会发生什么
A2.它没有做什么就退出了
为了能够运行下去,我们需要修改名称为ocl.exe
Q3怎样让恶意代码的攻击负载(payload)获得运行
A3.运行它之前将它命名为ocl.exe.。

接着重新打开分析
在ida中直接来到strcmp的位置
在这里插入图片描述

地址是401236
在od里定位到这里
下断点,直接执行
在这里插入图片描述

然后步过
在这里插入图片描述

可以看到此时eax的值为0
说明字符串比较成功
继续单步往下
在这里插入图片描述

来到了40124c的位置
在这里插入图片描述

也就是比较成功后来到了这里
看问题4,地址401133处发生了什么
在ida跳到了该地址
在这里插入图片描述

这里就是不断将字符复制到栈空间
Q4.在地址0x00401133发生了什么
A4.一个字符串在栈上被创建,攻击者利用它来混淆静态分析技术和字符串工具中的字符串

第5个问题是,401089函数被传的参数的是什么
在这里插入图片描述

注意到它有两个参数
在od直接跳到这个位置4012bd
在这里插入图片描述

下断点后直接运行
在右下角可以看到第一个参数是之前看到的第一个字符串
另一个参数可以在数据窗口中跟随
在这里插入图片描述

只能看到是一个缓冲区,至于具体内容则无法识别
在这里插入图片描述

接下来跟进这个函数分析f5之后是这样子的
在这里插入图片描述

可以看到它第一个参数就是前面看到不能识别的缓冲区的内容,第二个参数就是1qaz…字符串
Q5.传递给sub_401089的参数是什么
A5.传入sub_401089的参数是字符串1qaz2wsx3edc和-一个数据缓冲区
最关键的部分是这里
在这里插入图片描述

循环操作,两个字符串中依次各取一个进行异或
A7.恶意代码使用什么编码函数来混淆域名
Q7.恶意代码用字符串1qaz2wsx3edc异或加密的DNS名来解密域名
回到od动态地观察
步进这个函数,然后在xor异或这一行下断点
在这里插入图片描述

运行后如上所示
在这里插入图片描述

可以看到ecx此时是46,即缓冲区的第一个字符,而edx是1qaz。。。字符串的第一位
我们先稍微设置下,显示ascii数据
在这里插入图片描述

然后运行一下
在这里插入图片描述

跟踪过去看看
在这里插入图片描述

然后执行看看结果
在这里插入图片描述

可以看到一次解密出一个字符
解密完是这样的
在这里插入图片描述

解密出一个网址
Q6.恶意代码使用的域名是什么
A6.恶意代码使用的域名是practicalmalwareanalysis.com.
继续步过
在这里插入图片描述

调用了gethosybyname
而其参数
在这里插入图片描述

就是刚解析出的网址
该函数调用会返回一个ip地址
在ida中可以定位到这个函数
在这里插入图片描述

如果解析失败则走左边的路,先是sleep,然后是循环刚才分析的过程
如果解析成功则往右边走
在这里插入图片描述

会调用connect进行连接
connect返回之后
在这里插入图片描述

不论走左边还是走右边,都是sleep,然后继续循环
如果调用成功,走右边,在调用sleep之前会调用sub_401000
跟进去
在这里插入图片描述

在createprocess之前的信息可以看出,这是一个反向shell。
传递给CreateProcessA的STARTUPINTO结构被修改了。
可以看到cmd.exe作为参数被传递,CreateProcesA将要运行cmd.exe
这个结构的成员wShowWindow被设置为0,意思就是说会以窗口隐藏的方式运行
在这里插入图片描述

而运行的对象就是cmd.exe
继续分析可以看到
在这里插入图片描述

标准输入输出等都被设置为套接字
这样就绑定了套接字和cmd的标准流
也就是说cmd启动之后,所有经过套接字的数据都将发送给cmd,cmd产生的输出会通过套接字发出
Q8恶意代码在0x0040106e处调用CreateProcessA函数的意义是什么
A8.恶意代码设置stdout. stderr和stdin的句柄到socket(被用在CreateProcessA的STARTUPINFO结构中)。由于用cmd作为CreateProcessA的参数调用CreateProcessA,因此通过绑定一一个套接字与命令shell来创建逆向shell


参考:
1.《恶意代码分析实战》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值