首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
CTF对抗
发新帖
1
0
[原创]巳时·绿光幽语
发表于: 2026-8-11 14:43
117
[原创]巳时·绿光幽语
mb_lfqytcls
2026-8-11 14:43
117
附件 `题目.rar` 解压后得到 `题目.exe`。对 EXE 做字符串和结构分析,可以看到 `python313.dll`、`base_library.zip`、`PYZ.pyz` 等特征,判断为 PyInstaller 打包程序。 用 PyInstaller 的归档读取器提取后,发现主脚本 `main` 非常短,反序列化后等价于: ```python import sys sys.exit(0) ``` 但实际运行程序会提示: ```python 提示,需要还原的代码 def my_function(): print("恭喜成功!") 请输入key还原代码(请输入6个字符) ``` 说明真正逻辑不在常规入口脚本里,而是在打包携带的库中。 ## 定位库中逻辑 在 `python313.dll` 中搜索 `my_function`,能在偏移 `0x4dace9` 附近看到 marshal code object 片段。继续向前反序列化 frozen module,可以在偏移 `0x4d00e0` 处得到被修改过的 frozen `os` 模块。 该 `os` 模块尾部被追加了题目逻辑。关键字节码反汇编后可还原为: ```python x = 0 while x < 20: def my_function(): print(666) try: x += 1 buffer = b''.join([ b'\xb3\xda\xc5\xb2\xf1\xef\xba\xe9\xd9\xbc\xc9\xd5\xbd\xf3\xd4\xbd', b'\xea\xcd\xb0\xdb\xca\xb2\xcf\xd1\xb1\xee\xf6\xb2\xf5\xd4X_', b'103u8,\n3 ;6!<:;}', b"|oX_\\%'<;!}w\xb3\xd4\xf8\xb0", b'\xc3\xc9\xb3\xdd\xc5\xb0\xdf\xca\xba\xe9\xd4w|X_\xbd', b'\xfa\xe2\xbd\xeb\xc6\xb0\xd0\xf0>0,\xbd\xea\xcd\xb0\xdb', b'\xca\xb1\xee\xf6\xb2\xf5\xd4\xba\xe9\xdd\xbd\xfa\xe2\xbd\xeb\xc6', b'\xb0\xd0\xf0c\xb1\xed\xff\xb0\xf8\xc2\xb2\xf9\xf3\xba\xe9\xdc', ]) w = bytes(i ^ 0x55 for i in buffer) print(w.decode('utf-8')) key = input() if len(key) != 6: continue b_key = key.encode() c = b'\xecbmucryb6tcr*c\x03ucryb6tCr\x1eb' buf = bytes(c[i] ^ b_key[i % len(b_key)] for i in range(len(c))) my = my_function.__code__.replace(co_code=buf) succ = b'\x9f\xe3\x9b\x91\xf5\xee\x9f\xea\xa6\x91\xe9\xed\x96\xde\xb7' buf = bytes(succ[i] ^ b_key[i % len(b_key)] for i in range(len(succ))) my = my.replace(co_consts=(None, buf.decode('utf-8'))) my_function.__code__ = my my_function() return except Exception: continue ``` 核心就是两个异或: 1. `c ^ key` 还原 `my_function` 的 `co_code` 2. `succ ^ key` 还原成功字符串 ## 求 key 原始 `my_function` 是: ```python def my_function(): print(666) ``` 题目后续只替换 `co_consts` 为 `(None, 成功字符串)`,所以目标 `co_code` 和当前 `print(666)` 的 `co_code` 一致。 当前 `co_code`: ```text 95005b0100000000000000005301350100000000000020006700 ``` 密文 `c`: ```text ec626d7563727962367463722a630375637962367443721e62 ``` 异或得到重复 key stream: ```text yb6tcryb6tcryb6tcryb6tcryb ``` 周期为 6,所以 key 为: ```text yb6tcr ```
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
收藏
・
1
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
0
)
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
mb_lfqytcls
2
发帖
29
回帖
0
RANK
关注
私信
他的文章
[原创]巳时·绿光幽语
117
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部