说明
在我的上篇帖子中,有很多朋友说看不明白,我先说明下如果要逆向分析病毒(windows平台)需要的前置知识:
1.能看懂x86汇编代码,了解每个汇编代码的作用和寄存器的状态
2.了解PE结构,明白程序加载的过程
3.使用过反汇编工具,如IDA、OD、windbg等
4.了解win32API,不用详细了解,知道怎么查找MSDN,怎么用即可
最后,逆向是一个枯燥且急需耐心的过程,先从简单的程序再到病毒会更容易入门,希望大家看了我的贴能有所收获,大家一起进步!
0x0 初步分析
0x1.1 文件加壳状态
拖入 PEID 查看有没有加壳:
发现是无壳的,编程语言为VC8,于是分析行为
0x1.2 病毒行为分析
执行后先加载自身会用到的dll:
接着读取本机的语言环境
之后获取自身所在路径:
然后获取主机名称:
至此,病毒大致行为分析完毕。
0x1 病毒代码分析
0x1.1 第一层分析
将程序拖入IDA:
在导出表中找到start函数:
接着跳转到检测自身文件完整函数:
然后获取自身路径:
接着在OD中运行,发现运行到0x1101511程序跑飞,说明关键函数在此。
然而该程序使用了混淆器,有大量的无意义混淆代码,进行无意义的运算干扰分析:
图中有offset50参数的运算均为无意义代码,因此我们只需要找到关键函数即可。
进入函数发现新建了一个堆内存:
接着使用GetEnvironmentVariable获取环境变量到新建的内存中
然后获取系统目录存储在0x3cf1a4
找到VirtualProtect,在要改变属性的地址处下硬件执行断点。
运行到此处,程序停下,开始手动分析:
0x1.2 第二层分析
程序改变了如下内存所示的数据:
接着执行jmp:
第一次使用VirtualAlloc新建的内存,地址为0x180000:
接着开始填充新建内存的数据,然后执行:
发现此段shellcode的功能为加载函数:
接着第二次新建内存,内存地址为0x190000:
接着调用上一段新建shellcode的功能,更改新建内存的数据:
新建了第三次内存,地址为0x210000并且再次利用0x180000的shellcode改变内存:
接着释放了地址为0x190000的内存:
执行完以下函数后,210000的数据看起来像混淆过的PE文件:
接着执行了一个混淆函数和FLSfree:
然后改变了0x1804CF的属性:
接着进入函数call 0x1803A1,执行了LoadLibraryEX和GetProcAddress:
此处以后是在改变环境后分析,因此函数地址改变
接着执行了VirtualProtect,改变了0x6B0000、0x6B1000、0x6B4000、0x6B5000、0x6B6000、
0x6B7000、0x6B8000的属性
然后释放0x750000,即第三次新建的内存
0x1.3 第三层分析
0x6B1000属性为可执行可读取,不能写入,为代码段,因此在0x6B1000下硬件执行断点。
第一个函数为分配内存,内存位置为:0x34F8888:
然后使用memset,初始化内存为0
进入call E9234A
发现改变了数据0x3AF2F0的属性为可执行:
接着新建内存,并新建事件获取当前进程句柄:
找到关键函数:
继续深入分析,功能为获取恶意服务器上恶意软件的相关信息:
通过wsprintf打印出来
获取准备下载的木马的uptime:
将字符串qrodericky94.company放置于0x4198700
经检测,该域名为恶意远控木马服务器:
通过以上字符串可以了解程序在恶意远控木马服务器上下载了未知视频和图片文件,并保持和木马服务器的连接,至此,恶意程序分析完毕。
0x2 总结
经过分析,此样本为恶意代码,类型为:下载者木马。
样本通过大量混淆代码增加分析难度,同时将shellcode藏于非代码段,然后通过修改内存中数据的属性,设置为可执行代码。
通过shellcode将PE文件解密并释放出来,通过PE文件中的代码段,执行从qrodericky94.company下载恶意木马程序的功能。
0x3 分析心得
在分析病毒的过程中,由一开始的茫然失措,不知道如何下手,到现在的有自己的步骤去一步步分析,靠的就是自己的耐心和经验。
下面和大家分享下自己的分析心得:
1.当你不知道怎么分析的时候,先用火绒剑分析病毒的行为,获得病毒一些关键的行为,然后根据行为的特征下断点去分析关键点
如:当病毒打开CMD时,可以在CreateProcess(A/W)API处下断点。这样就要可以直接分析关键行为而不是浪费大量的时间去分析不重要的代码。
2.有几个关键API如果看到一定要仔细分析:
VirtualProtect:一般病毒会用这个改变自身的内存属性为可执行,让自己的shellcode变为可执行状态。接下来大概率会直接执行改变内存的shellcode,因此直接在改变内存的位置下硬件执行断点,然后运行程序会直接断在shellcode处。
VirtualAlloc:病毒使用该API新建一段堆内存,一般会将自身内含的加密后的PE文件或者shellcode解密后放入新建的内存,因此见到改API应该查看新建的内存,观察写入的内容是否为shellcode或为PE文件。
3.学着自己尝试编写病毒,这样当你分析时会认识一些病毒会使用的技术,能极大的增加分析的速度。
0x4 样本下载
样本hash:
CRC32:8A7D8A82
MD5:172817A62CBABBF9523D783346369AE8
SHA-1:BE4D9D258D2BBDDACEBEBDD4D004507EE02DA62C
样本:
样本.7z
(284.16 KB, 下载次数: 44)
解压密码:52pojie
注意:请在虚拟机下调试分析样本!