恶意代码分析实战9-2
Posted Neil-Yale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战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.《恶意代码分析实战》
以上是关于恶意代码分析实战9-2的主要内容,如果未能解决你的问题,请参考以下文章