-
-
[分享]第二题:巳时·绿光幽语
-
发表于: 2天前 33
-
结论
注册码(序列号)为:
yb6tcr
验证:
提示,需要还原的代码
def my_function():
print("恭喜成功!")
请输入key还原代码(请输入6个字符)
恭喜成功!1. 样本识别
题目文件是 64 位 PE,大小为 7,438,179 字节,SHA-256 为:
F6B192F9EE87C4AD2BC8681291CA428CF8E98FEC26FA5D7B82C6E791A7A90EAD
使用 PyInstaller 解包后可以看到 python313.dll、PYZ.pyz、base_library.zip 等文件,说明这是 Python 3.13.1 的 PyInstaller one-file 程序。
外层 main 仅执行 sys.exit(0),实际逻辑被放入运行时修改过的 <frozen os> 模块中。因此直接静态查看 main 无法得到注册码。
2. 运行时逻辑
程序先通过固定异或值 85 解出提示文本:
w = b""for i in buffer:
b = i ^ 85
w += b.to_bytes(1)print(w.decode("utf-8"))随后读取 6 个字符的 key,并将其编码为字节串 b_key。核心验证逻辑可以还原为:
for i in range(len(c)):
buf += (c[i] ^ b_key[i % len(b_key)]).to_bytes(1)
my = my_function.__code__
my = my.replace(co_code=buf)
buf = b""for i in range(len(succ)):
buf += (succ[i] ^ b_key[i % len(b_key)]).to_bytes(1)
my = my.replace(co_consts=(None, buf.decode("utf-8")))
my_function.__code__ = my
my_function()其中两组关键密文为:
c = b'\\xecbmucryb6tcr*c\\x03ucryb6tCr\\x1eb'succ = b'\\x9f\\xe3\\x9b\\x91\\xf5\\xee\\x9f\\xea\\xa6\\x91\\xe9\\xed\\x96\\xde\\xb7'
第一组密文经过 key 异或后应当还原为 my_function 的 Python 3.13 字节码:
95005b0100000000000000005301350100000000000020006700
该字节码的含义是调用 print,并返回常量表中的第 1 项。
第二组密文经过同样的循环异或后应当得到成功字符串 恭喜成功! 的 UTF-8 编码。
3. 计算注册码
使用候选 key yb6tcr 计算:
key = b"yb6tcr"code = bytes(c[i] ^ key[i % len(key)] for i in range(len(c)))
message = bytes(succ[i] ^ key[i % len(key)] for i in range(len(succ)))print(code.hex())print(message.decode("utf-8"))结果:
95005b0100000000000000005301350100000000000020006700 恭喜成功!
也可以从第二组密文直接求出周期密钥:
succ XOR UTF-8("恭喜成功!") = yb6tcryb6tcryb6按 6 字符周期分组即可得到:
yb6tcr
第一组密文 XOR 该 key 得到完全一致的目标字节码,说明 key 正确。
4. 实机验证
在题目程序中输入:
yb6tcr
程序输出:
恭喜成功!
因此最终注册码为 yb6tcr。
5. 相关文件
- 求解脚本:solve.py
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
最后于 2天前
被Salieri编辑
,原因:
赞赏
谁下载
无
赞赏
雪币:
留言: