恶意代码分析实战 课后练习
学会动态分析基础
使用ProcessMonitor工具监控目标进程名称Lab03-01.exe,并设置监控注册表与文件写入操作,如果目标写入了数据,则可以监控到写入的具体目录。
使用ProcessExplorer 可用来监控目标程序导入的Dll文件以及头部数据。
例如程序中使用了Mutant互斥量,来保证程序只运行一个实例。
使用WireShark工具捕捉目标网络特征,首先找到该进程对应的PID,然后执行CMD netstat -ano
得到TCP端口号再根据特定端口,使用Wireshark筛选条件中输入tcp.port == xxx 过滤特定流量
如果恶意程序是一个dll文件,我们需要首先查看导出表中是否存在安装之类的到处函数。
一般dll无法自己运行,需要使用svchost.exe -k netsvcs 等命令引导其运行,在其身上会加载很多dll文件,运行。
首先使用Regshot对注册表拍一个快照。
使用rundll32工具加载并安装后在分析,执行命令:rundll32.exe Lab03-02.dll,installA 然后拍摄第次快照,并对比两次的不同,报告中显示,创建了一个IPRIP的服务。
由于是一个服务,则执行命令,让这个服务启动起来。
然后可以使用ProcessExplorer工具,find搜索,目标dll实在那个程序中被运行起来的,如下可知,是附着在svchost.exe中进程中运行起来的。
如下我们知道了目标进程的PID是1028
使用ProcessMonitor设置过滤条件监控PID是,1028即可获取到目标DLL的操作记录。
IDA 的使用技巧总结
1.找到导出表的GetHostBynme函数位置,并查询有多少函数调用了这个地址,通过交叉引用即可获取到,选中地址按下ctrl+x即可查询。
类型type 中p开头代表是一个函数,rw开头代表是可读可写的属性,如下除去重复的与非P类型的,剩下的一共有五个地址调用了。
接着跳转到0x10001757位置处的gethostbyname的调用,找出dns请求的域名。
将地址跳转到0x10001656处,观察,带有var_的变量为局部变量,正数则代表是函数参数。
使用string窗口,在反汇编中定位字符串\cmd.exe /c 它位于什么地方?
选择view ->OpenSubview -> strings 选项,找到字符串位置。
双击地址,即可找到引用的变量地址,如下所在:xdoors_d:10095B34
在引用\cmd.exe /c的代码所在区域发生了什么?我们直接在最右侧双击上箭头
即可找到引用区域
在同样的区域中,0x100101c8处,dword_1008E5C4 是一个全局变量,那恶意代码是如何设置这个位置的呢,使用交叉引用来解决。
首先双击一下,跳转到全局变量位置。
接着,我们在data地址处按下 ctrl+x 交叉引用地址,只有type为w的是写入了数据,赋值也就是从这里开始的。
使用涂抹式来绘制出对sub_10004e79的交叉引用图,当进入这个函数时,那个API函数可能被调用,仅仅基于这些API函数,如何重命名这些函数?
1.首先找到sub_10004e79函数地址,双击跳过去。
接着是获取图模式,选择view - > graphs -> user xrefs chart 直接点击ok生成图结构。
接着看一下dllmain直接调用了多少个API函数,多少个在深度为2时被调用?
找到DllMain地址,然后选择 view - > graphs -> user xrefs chart 调用深度为2.
在0x10001701处是一个对socket的调用,他的三个参数是什么?我们可以将第一个参数2转换为参数关键常量,选中push 2 然后右键选择,Use stardard symbolic constant找到一个常量然后保存即可。
搜索IN指令,(OpCode 0xED)指令在代码中使用位置,点击search -> sequence of bytes 查找ED指令。
寻找in指令,双击过去看看。
可以将压缩数,转换为字符串.
为了能找到所有引用虚拟机检测的代码,我们可以来到代码头部,然后交叉引用一下,有三处引用了虚拟机检测。
最后将光标跳转到0x1001d988位置,使用IDC脚本进行解密。
#include <idc.idc>
static main()
{
auto ea = ScreenEA(),b,i,decode;
for(i=0x0;i<0x50;i++)
{
b = Byte(ea+i);
decode = b ^ 0x55;
PatchByte(ea+i,decode);
}
}
将光标放到解密的行上,然后运行脚本即可解密。
识别汇编中的C代码结构 第四章
分析恶意windows程序 第五章
使用OD进行动态分析 第六章
恶意代码的特殊行为 第七章
隐藏的恶意代码启动 第八章
恶意代码的数据加密 第九章
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!