寻找变形Python解释器中opcode映射关系的思路

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

本文介绍了如何针对混淆过的Python解释器进行逆向工程,以及如何应对opcode置换的情况。作者通过编写opcode_full.py来生成所有种类的opcode,并通过反汇编标准解释器和变形解释器的输出来找出尽可能多种类的opcode映射关系。文章提醒读者,这是一次投入、反复受益的过程,值得长期维护不同版本opcode_full.py。

🎯

关键要点

  • 文章讨论了针对混淆过的Python解释器进行逆向工程的方法。

  • 作者提到在工作中遇到变形的Python 3.9解释器,发现opcode映射关系被置换。

  • 建议编写opcode_full.py文件,利用dis模块生成所有种类的opcode。

  • 提供了示例代码,说明如何使用dis模块反汇编Python函数。

  • 提到某些opcode难以生成,如LIST_APPEND、SET_ADD等。

  • 指出Python 3.9及更低版本无法生成NOP,PRINT_EXPR只在交互模式下生成。

  • 建议通过反汇编标准和变形解释器的opcode_full.py来找出opcode映射关系。

  • 强调opcode_full.py与Python版本强相关,需确保使用相同版本的解释器。

  • 提到可以临时修改标准解释器的opcode.py以输出正确的反汇编结果。

  • 讨论了如何通过逆向工程找出NOP和PRINT_EXPR的映射关系。

  • 总结认为维护不同版本的opcode_full.py是一次投入、反复受益的过程。

➡️

继续阅读