首先我们来看一张流程图
首先打开IDA进行查看
进入函数发现,首先获取系统时间戳,然后拼接字符串和创建线程通过管道读取shellcode,最后执行shellcode
拼接的管道名
004053F0=artifact.004053F0 (ASCII "\\.\pipe\MSSE-5866-server") |
跟进线程创建线程执行的函数,首先创建命名管道,再把加密过的shellcode写入管道
Shellcode内容
写入shellcode
跟进接收shellcode函数RevShellcode_40172:其主题逻辑是先申请内存存放读取出来的shellcode,然后再解密执行
从管道中读取shellcode到内存中
将读取出来的Shellcode在DecyptandrRunShellcode_40158E函数中执行解密,该函数的主题逻辑,申请内存存放解密后的shellcode,然后修改内存属性并跳转运行
解密算法如下,首先遍历shellcode,遍历次数与4求模,得到的值作为403008数组的下标得到一字节,用该字节与shellcode对应遍历时的字节异或,最终得到解密后的字节
解密所需的数组
解密后的数据
之后跳转并执行
Shellcode部分
先加载wininet.dll
之后调用InternetOpen函数
连接控制端192.168.202.131
请求Beacon URL: /FXhV
发送HTTP请求
获取桌面窗口句柄
处理前面对话窗口遇到的错误
申请内存
多次调用InternetReadFile读取文件
读取完成后跳转执行到所申请的内存
这里需要解密出一个dll,具体的解密算法如下:
解密后的数据:
反射注入DLL:
查看解密出来的DLL
0x36c0032 -> 0x36c0041 也就是DLL的Dos头部分,下面ebx+0x8150,也是导出函数ReflectiveLoader函数的偏移
在导出函数ReflectiveLoader函数中解析DLL,ReflectiveLoader中会调用virtualalloc()函数,申请大小为0x30000的内存,用于存放DLL:
在内存中反射注入dll,存放在eax中0x3D15DA8
然后开始执行dll,此时也可以到自己的c2还没有主机上线
执行dll中
获取对应的系统信息拼接
获取cookie
获取配置信息
调用,wininet.HttpSendRequestA请求上线
上线回连
对默认生成的shellcode分析发现存在大量的特征信息,导入配置文件后再次对shellcode进行分析,发现对应的关键信息已经修改
FROM :ol4three.com | Author:ol4three
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论