免责声明: 文章仅用于技术分享,切勿非法测试,由于传播、利用本公众号朱厌安全团队所提供的信息而造成的后果以及损失,均由使用者本人承担,本公众号朱厌安全团队以及作者不为此承担任何责任!如有侵权烦请告知,我们会立即删除并致歉!
0X01 概述
python是一种解释性的语言,其原理是将代码块按照需求边运行边翻译给机器执行。python运行原理就是首先把python源文件解释成pyc二进制文件,然后再将pyc文件交由python虚拟机直接运行.
0X02 Python逆向获取源代码大致流程
一. 解包
打包Python常用有两种工具,对应解包也是这两种
其中py2exe只能用python版本
pyinstaller:进入pyinstxtractor.py所在文件夹,输入以下路径即可:
python pyinstxtractor.py exe
二. 修补文件头
pyc文件是python在编译过程中出现的主要中间过程文件。pyc文件是二进制的,可以由python虚拟机直接执行的程序。分析pyc文件的文件结构对于实现python编译与反编译就显得十分重要。
pyc文件头描述了.py文件的基本信息,主要内容大致如图
Python代码的编译结果就是PyCodeObject对象。PyCodeObject对象可以由虚拟机加载后直接运行,而pyc文件就是PyCodeObject对象在硬盘上的保存形式。
通常情况下struct中的文件头与pyc文件缺失的文件头前16位相同,复制粘贴进去即可
如上图例子,将bird加pyc后缀保存即可
三. 反编译
可以直接用pyc在线反编译,但用软件效果更好
1. uncompyle6
只支持3.8及以下版本的python
图示为在kail和windos上的使用例子。
2. pycdc
pycdc只支持3.9及以上版本的python
使用方法:进入pycdc可执行程序所在文件夹下,输入pycdc 加pyc文件路径即可
例:
#pycdc的打包方法可参考
https://blog.csdn.net/qq_63585949/article/details/127080253
3. 将pyc转换成字节码
Python 代码先被编译为字节码后,再由Python虚拟机来执行字节码, Python的字节码是一种类似汇编指令的中间语言, 一个Python语句会对应若干字节码指令,虚拟机一条一条执行字节码指令, 从而完成程序执行。Python dis 模块支持对Python代码进行反汇编, 生成字节码指令。
因此,根据语法可以把编译出来的python字节码手搓成源码。
字节码获取方法:使用pycdump。
进入pycdump文件夹下,运行 python dump.py + pyc文件路径
以上是写python逆向获取源代码常用方法,欢迎补充~(后台回复任意信息可加交流群嗷)
热爱让我们相识、相聚.
原文始发于微信公众号(朱厌安全团队):python逆向获取源代码常用方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论