恶意代码分析实战06-01
Posted Neil-Yale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战06-01相关的知识,希望对你有一定的参考价值。
本次实验我们将会分析lab19-2文件。先来看看要求解答的问题
Q1.这段shellcode被注入到什么进程中?
Q2.这段shellcode位于哪里?
Q3.这段shellcode是如何被编码的?
Q4.这段shellcode手动导入了哪个函数?
Q5.这段shellcode和什么网络主机进行通信?
Q6.这段shellcode做了什么?
首先载入IDA
第一处call是调用sub_4010b0,跟入该函数
从其关键函数调用可知,这个函数为当前进程提供合适的权限,使其允许调试
返回main
接着是调用sub_401000,跟入
上图字符串指示的注册表值是系统的默认浏览器
结合之后的函数调用可知,sub_401000用于从注册表中获得默认浏览器的路径
返回main,继续分析
跟入sub_401180
会创建一个新的进程,其sShowWindows值为0,说明它的窗口是隐藏的
那么这是创建了什么进程呢?
我们回到main之后,看看这个函数的地址
地址是4013de
我们将其载入IDA然后在这里下断点,然后执行过来
如上图左上角所示,这里的eax即在调用这个函数时传入的参数,这里可以看到这个参数是ie浏览器的地址,也就是说这个函数会使用这个路径来创建进程
Q1.这段shellcode被注入到什么进程中?
A1.这个程序进程注入默认浏览器Internet Explorer中。
回到IDA,在main中继续往下分析
unk_407030就是shellcode缓冲区的位置(我们接下来先分析sub_401230后就会知道为什么说这里是shellcode缓冲区的位置了)
跟入sub_401230
从其关键的函数调用不难看出其作用就是用于注入shellcode
至此,我们大概就知道恶意代码实现了如下的操作:
通过读取注册表HKCR\\http\\shell\\poen\\command启动默认的浏览器,浏览器作为一个新进程被创建,其StartupInfo.wShowWindow被设置为SW_HIDE,所以浏览器进程对用户界面隐藏。
Q2.这段shellcode位于哪里?
A2. shellcode 的缓存区位于0x407030位置。
我们在407030处光标定位,然后按c键转为代码,如下所示
v
从上图可以看到,一开始通过jmp来到407043,而在407043处是调用了loc_407032。这里需要注意call指令会先将下一地址入栈,也就是会将407048入栈,在loc_407032中先是pop edi,见407048传给了edi,在407039将0xe7赋给al,在40703b看到会将0xe7与edi地址中所保存的内容进行异或,一共是进行了0x18f次。这里就是一个解密的过程
Q3.这段shellcode是如何被编码的?
A3. shellcode 与字节0xe7异或。
我们把这段shellcode提取出来
首先Edit–>Segments–>Rebase Program,查看IDA基址
那么我们可知shellcode偏移位于7030,一直到71d7
接着使用winhex打开文件,选中对应区域
然后复制
再新建一个文件
File->new
将数据粘贴进去
将这段区域的数据保存为19-2.bin文件,实验室中在kali上已经有这个文件了
使用sectest模拟,查看结果
sctest -Svs 1000000 < 19-2.bin > sectest-lab19-2.txt
不过这里显示的其实不全面,可以在win上使用scdbg辅助分析
可以看到导入了一些函数,回答第四个问题
Q4.这段shellcode导入了哪些函数?
A5.导入了LoadLibrary,WSAStartup,WSASocket,Connect,CreateProcess,Terminate
在kali的结果可以看到
所以就可以回到第5个问题
Q5.这段shellcode和什么网络主机进行通信?
A5. shellcode 在端口13330上连接IP地址192. 168.200.2。
同样在kali的结果可以看到
函数原型中lpCommandLine指向一个以NULL结尾的字符串,该字符串指定要执行的命令行,这里是cmd,也就是说这里会创建一个cmd.exe程序
所以结合第5个问题的答案,我们可以会带第6个问题
Q6.这段shellcode做了什么?
A6.这个shellcode提供了一个远程shell (cmd.exe)
以上是关于恶意代码分析实战06-01的主要内容,如果未能解决你的问题,请参考以下文章