首页
社区
课程
招聘
[分享]第二题:巳时·绿光幽语
发表于: 2天前 33

[分享]第二题:巳时·绿光幽语

2天前
33

结论

注册码(序列号)为:

yb6tcr

验证:

提示,需要还原的代码

def my_function():

    print("恭喜成功!")

请输入key还原代码(请输入6个字符)

恭喜成功!

1. 样本识别

题目文件是 64 位 PE,大小为 7,438,179 字节,SHA-256 为:

F6B192F9EE87C4AD2BC8681291CA428CF8E98FEC26FA5D7B82C6E791A7A90EAD

使用 PyInstaller 解包后可以看到 python313.dllPYZ.pyzbase_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编辑 ,原因:
上传的附件:
收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回