一.前言
最近精力比较充沛,也很久没有跟新了,近期在和大佬一起学习二进制安全,在这里分享一下近期成果。后续会针对海莲花的样本进行一些分享,欢迎各位大佬骚扰、指正。
二.分析情况
2.1 互斥量
样本MD5: 3C0533706F1F2F9CE1D46658BBC2AA16
创建互斥量:d10a8197-fbc8-4146-80de-ba931f23f05c
2.2 virtualAlloc函数
利用virtualAlloc函数创建了可执行空间,并利用memmove函数将shellcode复制到开辟的空间当中。
2.3 动态调试
拷贝到内存中的shellcode。
拷贝完成后,程序将动态写入一个call指令指向shellcode位置,写入地址为:004014A5。
2.4 ExitProcess函数
写入完成后程序调用ExitProcess函数,多次退出后到达修改后的位置,通过第一个call跳转到shellcode当中。
该shellcode仅做了一个动作,则是动态的加载dll程序自身。
完成后再次利用之前写入call指令的位置跳转入dll程序的下一个模块。
该模块主要作用为读取资源块中的shellcode内容,并将内容读取到可执行的内存空间当中。
跳转入shellcode当中。
2.5 LoadLibrary以及GerProcAddress函数
多次利用LoadLibrary以及GerProcAddress函数动态获取需要用到的API函数地址。
2.6 创建svchost.exe进程
获取svchost存放的位置:
创建svchost进程并获取进程id,获取完毕后利用VirualAllocEx函数svchost进程中开辟内存空间并利用WriteProcessMemory向进程注入shellcode。
进程PID为0x2384,十六进制转换后进程PID为9092
通过信息我们得知,开辟的内存空间地址为0x800000。
2.7 内存列表获取
我们可以通过火绒剑对该进程进行内存列表获取,发现shellcode已注入成功。
跳转到注入的shellcode当中,经过多次循环解密。
2.8 CS连接
最终跳到了CobaltStrike控制,上线模块当中。
2.9 外联地址获取
海莲花C2地址为:185.225.19.22。
三.小结
这里主要针对样本做了简单分析,了解样本存在的行为,后续会陆续更新,欢迎各位大佬骚扰。