恶意代码分析实战 课后练习

学会动态分析基础

使用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进行动态分析 第六章

恶意代码的特殊行为 第七章

隐藏的恶意代码启动 第八章

恶意代码的数据加密 第九章

posted @ 2020-10-12 16:09  lyshark  阅读(685)  评论(0编辑  收藏  举报

loading... | loading...
博客园 - 开发者的网上家园