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

UPX -d 脱掉

IDA32启动
主程序

WinMain就一个函数,跟进

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

解密函数如下,一眼xxtea。

至此程序逻辑已经较为清晰:反射加载dll,具体为从密文以标准xxtea算法解密数据,然后把数据地址传入加载dll函数,最后调用dll中的函数,函数名为前面传进来的StudyHard。
dll
dump dll的过程可谓艰辛,由于打CTF打多了,最开始写了一个c脚本,结果发现0x15000个u_int32似乎不好打印,后来又尝试保存到文本,效果也一般。(可能是IDA哪里分析出问题了)后来又尝试了下断点让他自己解密,因为他这个dll想执行最后肯定得以无加密方式执行,但是似乎有反调试,运行会卡住,跑不到解密的地方。(复盘时考虑可能是那些抛出异常的地方写了专门的处理,结合下图一堆函数猜测可能是自调反调试)

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

直接IDA分析这个内核转储文件。这里直接用windbg打开,显示
吓了我一跳,还以为是天堂之门,后来群里大哥说是调用了64位dll就会这样,而且这样必须用IDA64分析了。
IDA64打开转储文件,直接按G jump到那个加密dll的地址。

MZ开头,舒服了。
dump下来,32位IDA打开
StartAddress

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

查找explorer.exe

查找父进程

都没找到就退出。

获取win版本。

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

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

注册成服务。


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

根据系统版本写启动项,驻留。其中win10就用前面分析的StartAdress。
StudyAdress
本来以为这才是正餐,分析了一下,大部分跟dllmain一样。。。
剩余部分有意思的函数



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

scvh0st.exe,6.
至此已经拆的差不多了,控制方发送字符组成的指令序列,在被控机执行。
另外有意思的是作者把网站的80端口伪装成了一个没备案被拦截的页面,nmap扫了只有22 443 80开着,微步沙箱测到是在3xxxx上通信的,后面有空在研究了。
感谢这位群友送的大礼物。