CTF中常见的四种python逆向

💡 原文中文,约18400字,阅读约需44分钟。
📝

内容提要

pyc文件是由py文件编译生成的二进制文件,用于提高加载速度。pyc文件可以反编译为py文件。打包成exe的pyc文件可以使用pyinstxtractor.py工具解包。加了花指令的pyc文件可以通过修改字节码和co_code长度来去除花指令。

🔎

延伸解读

版本兼容性:反编译成败的关键

文章多次强调pyc文件与Python版本严格绑定,不同版本编译的pyc无法互通。反编译时需匹配正确的魔术字和opcode,否则会失败。例如uncompyle6 3.8.0版本可能导致反编译失败,建议降级到3.7.4。此外,打包成exe的pyc解包后可能因Python版本不匹配而生成不正常的入口文件,需要手动修复。因此,在CTF中遇到pyc逆向,首先应确认版本信息,并选择对应工具。

花指令去除:定位与修复技巧

花指令通过插入无效字节码干扰反编译,但程序仍能正常运行。文章以JUMP_ABSOLUTE跳转为例,说明如何通过分析字节码定位花指令,并在Winhex中根据opcode.h找到对应机器码进行删除。关键步骤包括:读取co_code长度,计算删除后的新长度,并修改pyc文件中的长度字段。这一过程需要熟悉Python字节码结构和十六进制编辑,是CTF中pyc逆向的常见考点。

逆向中的数学问题:z3与异或自反性

文章展示了两种典型逆向题型:一是通过z3库求解多元一次方程组,恢复输入字符;二是利用异或的自反性,从已知明文片段推导密钥。例如,在pyc逆向中,通过已知flag格式'DASCTF{'和'}'反推出密钥,再解密整个密文。在exe逆向中,则需注意源码中变量与方程系数的对应关系,避免因顺序错乱导致错误。这些方法体现了逆向工程中数学工具与逻辑分析结合的重要性。

❓

Q&A

什么是pyc文件,它的作用是什么?

pyc文件是由py文件编译生成的二进制文件,用于提高加载速度。

如何反编译pyc文件?

可以使用uncompyle6工具进行反编译,但需注意版本兼容性。

pyc文件的字节码与Python版本有什么关系?

pyc文件的字节码与Python版本相关,不同版本的pyc文件不可互通。

如何解包打包成exe的pyc文件?

可以使用pyinstxtractor.py工具解包打包成exe的pyc文件。

什么是花指令,如何去除它?

花指令是指在pyc文件中添加的无效指令,可以通过修改字节码和co_code长度来去除。

如何通过分析字节码提取加密算法和密钥?

通过分析字节码,可以提取出加密算法和密钥,使用z3库可以解方程推导出输入字符串的值。

🏷️

标签

➡️

继续阅读