最近半个月都在学《恶意代码分析实战》,想拿真实的恶意软件进行分析一下。正好朋友发了一个过来。(应该是护网的钓鱼文件)
0x01 文件分析
总共包括三个文件:2021年机关员工(子女)名单.exe、name1.jpg、name2.jpg
2021年机关员工(子女)名单.exe:程序是golang编译的,分析起来有点困难。所以没有进行分析,只是看了一下会有什么行为。
name1.jpg为exe
name2.jpg为dll导出了InitBugReport函数,且该函数存在异或解密shellcode的行为。
0x02 行为分析
开启Fake-ng,process monitor和process explorer进行行为监控。在虚拟机中执行程序之后会将nam1.jpg保存为yyexternal.exe
有迷惑性,让人以为是正常的yy程序
name2.jpg会保存为crashreport.dll。之后yyexternal会动态加载crashreport.dll并调用InitBugReport。
0x03 name2.jpg静态分析
加载shellcode的功能都在nam2.jpg(其实是dll)中所以主要分析这个文件。
主要是3个步骤循环:
第一:将byte_100277A8开始偏移%6==3地址上的内容复制到shellcode中
第二:将shellcode循环与!@ASDasd3#@异或解密
第三:将解密后的shellcode复制到VirtualAlloc地址并跳转执行。
如何获取shellcode?
1.脚本解密
2.动态内存dump
这里选择了第二种方法,修改文件名为name2.dll,用OD打开dll,在强制修改EIP为InitBugReport。将shellcode保存下来。
0x04 shellcode分析
最关键的点是偏移0x66会将遍历到的函数hash与目标hash进行比较,如果相关会在0x86处调用。在0x86下断点可以知道shellcode调用的所有函数。
第一次调用LoadLibraryA(“wininet”)
第二步调用InternetOpenA连接27.152.180.223的80端口
第三步调用InternetConnectA
第四次调用 HttpOpenRequestsA 获取/W9ff
第五次调用HttpSendRequestA 使用指定UA去发生请求
因为网站的/W9ff已经没了,所以会请求失败,调用ExitProcess。为了猜测下载文件的作用是什么。可以修改跳转指令。看看后续操作。如果请求失败就会调用ExitProcess。修改标志位Z=0
最后跳转到了新的shellcode执行代码。因为前面都是强制修改了标志位,所以实际并没有shellcode读入。
0x05 总结
shellcode应该是脚本生成的(类似这个https://gist.github.com/jdferrell3/4db966da06f4fa77816a54d802aca0f8)
样本应该是护网的钓鱼文件。
貌似就是一个项目编译出来的三个文件。