第一步:查看文件是否加壳:
加了壳,FSG壳,在我之前的博客里边有过脱FSG壳的具体简称,这里就不再赘述,直接脱出来,加载到OD中:
第二步:将程序,用IDA打开进行详细分析:
第三步:分析main函数;
可以看到这个main函数的内容相对比较简单,只是几个API函数的调用,所以只要将这几个API函数的功能搞清楚基本就分析完了:
最核心的一点是IDA没有解析出来的.就是该程序在运行的时候,隐式的调用了一个API objectstublessclient11,这个API查相关资料比较难找,但是分析下来我们可以知道,找个程序的主要目的就是通过COM接口访问一个网址,这个具体的网址也在程序中以明文的方式显示出来了.
这是分割线
Lab01-04
第一步:查壳
无壳
第二步,开始分析:
载入OD和IDA
程序开始,先使用memset函数,将0x10C大小的空间置为0
下一步,加载相关dll,获取函数地址:
要加载的dll和获取地址的函数的名称在IDA里边都可以看到:
在执行完上边的操作之后,检测时否成功获取函数的地址:
如果没有成功,退出程序:
如果上述操作成功(也就是说成功获取到指定函数的地址),接下来,执行 Enumprocesses,用来列举系统的进程
可以看到接下来的操作是针对于,已经获取到的当前系统的进程ID进行的:
直接进去看要执行的函数:通过IDA查看函数,以及在动态调试的过程中,也可以得知,该函数的主要目的是找到,系统中运行着的Winlogon.exe程序
执行下一步操作:
这个函数的主要工作是提权,提权操作,如果成功,执行else的内容:
else的内容主要的工作是创建一个远线程,这个远线程的工作是执行一个函数,这个函数的内容是之前获得的DLL的第二个导出函数:
可以把这个dll拿出来看一下第二个导出函数:
根据名字也可以大致推测出,大概的功能,应该就是关闭文件的映射之类的功能.继续往下走:
可以看到,上边函数的操作,将Windows目录下的wupdmgr.exe程序放到了Temp目录下,并且命名为winup.exe
接下来的操作就是针对程序资源的操作,我们用资源查看工具,可以看到,资源的名称为 BIN 并且可以很清晰的看出来这是一个PE文件:
下面我们看一下对于该资源数据的操作:
首先进行路径拼凑,之后寻找目标资源,找到之后,将资源数据加载到内存中,之后得到目标资源数据的大小,获得到校之后,打开目标文件获取文件句柄,之后将获取到的资源数据写进去,完成上述操作之后,关闭句柄,运行目标文件.
拿到资源数据另存之后的文件,查看文件的基本信息:
进一步对文件进行分析:用IDA打开文件 如下:
分析内容如下:
指定的URL为:
http://www.practicalmalwareanalysis.com/updater.exe
总结:
1、这个程序的分析相对比较复杂,但是代码却简单易懂
2、在分析的过程中,需要注意程序的逻辑结构,尤其是在动态调试的过程中,更是要注意,哪些是病毒作者在编写的时候为了拖延分析速度故意设置的一些代码
3、结合上下文分析,在CreateRemoteThread那块,最开始我误分析成了,远线程注入的操作,但是后来也没有找到程序中有具体写内存地址的操作,后来再会去看的时候,才发现,执行的是导入模块的第二个导出函数。
4、要善于发现敏感的字符串以及敏感的16进制数据