最近玩MC的3c3u服务器,是一个类似2b2t的无政府服务器,加了官方群,一个好心大哥给我发了一个挂。
image-20240813192155269
如此好心,我当然要开心地收下。

image-20240813192155269

UPX -d 脱掉

image-20240813192228213

IDA32启动

主程序

image-20240813192316850

WinMain就一个函数,跟进

image-20240813194300055

逻辑如图,跟踪一下函数,函数名和变量名都是我恢复的。一开始以为是SMC,后来发现是反射加载dll。加载函数如下。

image-20240813194241266

解密函数如下,一眼xxtea。

image-20240813192529754

至此程序逻辑已经较为清晰:反射加载dll,具体为从密文以标准xxtea算法解密数据,然后把数据地址传入加载dll函数,最后调用dll中的函数,函数名为前面传进来的StudyHard。

dll

dump dll的过程可谓艰辛,由于打CTF打多了,最开始写了一个c脚本,结果发现0x15000个u_int32似乎不好打印,后来又尝试保存到文本,效果也一般。(可能是IDA哪里分析出问题了)后来又尝试了下断点让他自己解密,因为他这个dll想执行最后肯定得以无加密方式执行,但是似乎有反调试,运行会卡住,跑不到解密的地方。(复盘时考虑可能是那些抛出异常的地方写了专门的处理,结合下图一堆函数猜测可能是自调反调试)

image-20240813195104441

最后采取的方案:虚拟机直接运行,转储运行文件。这个程序应该是写入计划任务了,重启发现虚拟机里面还有这个样本,那只能说是正合我意了。

image-20240813195351849

直接IDA分析这个内核转储文件。这里直接用windbg打开,显示image-20240813195449765

吓了我一跳,还以为是天堂之门,后来群里大哥说是调用了64位dll就会这样,而且这样必须用IDA64分析了。

IDA64打开转储文件,直接按G jump到那个加密dll的地址。

image-20240813195840162

MZ开头,舒服了。

dump下来,32位IDA打开

StartAddress

image-20240813203054571

获取路径,写注册表,写开机启动,持久化。

DllMain

image-20240813201236953

查找explorer.exe

image-20240813202103209

查找父进程

image-20240813202131229

都没找到就退出。

image-20240813202405816

获取win版本。

image-20240813210149293

从URL下载文件,写入构造的地址(就是前面获取的)。

image-20240813210033453

查找rundll32.exe,找到就taskkill了。

image-20240813210534511

注册成服务。

image-20240813210923818

image-20240813210853057

等待服务器发送指令(域名不贴了,就是server_domin),控完while(1) sleep

image-20240813211253527

根据系统版本写启动项,驻留。其中win10就用前面分析的StartAdress。

StudyAdress

本来以为这才是正餐,分析了一下,大部分跟dllmain一样。。。

剩余部分有意思的函数

image-20240813205901446

image-20240813212648433

image-20240813212420313

查找这161个杀软是否存在,看到这玩意我第一反应是真牛逼。。。。。

image-20240813212737099

scvh0st.exe,6.

至此已经拆的差不多了,控制方发送字符组成的指令序列,在被控机执行。

另外有意思的是作者把网站的80端口伪装成了一个没备案被拦截的页面,nmap扫了只有22 443 80开着,微步沙箱测到是在3xxxx上通信的,后面有空在研究了。

感谢这位群友送的大礼物。