python逆向获取源代码常用方法

admin 2023年5月15日02:29:12评论65 views字数 1271阅读4分14秒阅读模式


: 使


0X01 

python是一种解释性的语言,其原理是将代码块按照需求边运行边翻译给机器执行。python运行原理就是首先把python源文件解释成pyc二进制文件,然后再将pyc文件交由python虚拟机直接运行.

0X02 Python逆向获取源代码大致流程

一. 解包

打包Python常用有两种工具,对应解包也是这两种

python逆向获取源代码常用方法

其中py2exe只能用python版本

pyinstaller:进入pyinstxtractor.py所在文件夹,输入以下路径即可: 

python pyinstxtractor.py exe

二. 修补文件头

pyc文件是python在编译过程中出现的主要中间过程文件。pyc文件是二进制的,可以由python虚拟机直接执行的程序。分析pyc文件的文件结构对于实现python编译与反编译就显得十分重要。

pyc文件头描述了.py文件的基本信息,主要内容大致如图


python逆向获取源代码常用方法


Python代码的编译结果就是PyCodeObject对象。PyCodeObject对象可以由虚拟机加载后直接运行,而pyc文件就是PyCodeObject对象在硬盘上的保存形式。

通常情况下struct中的文件头与pyc文件缺失的文件头前16位相同,复制粘贴进去即可


python逆向获取源代码常用方法

 

python逆向获取源代码常用方法

 

 如上图例子,将bird加pyc后缀保存即可

三. 反编译

可以直接用pyc在线反编译,但用软件效果更好

1. uncompyle6

只支持3.8及以下版本的python

python逆向获取源代码常用方法

 

python逆向获取源代码常用方法

 图示为在kail和windos上的使用例子。

2. pycdc

pycdc只支持3.9及以上版本的python

使用方法:进入pycdc可执行程序所在文件夹下,输入pycdc 加pyc文件路径即可

例:

python逆向获取源代码常用方法

 

 #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逆向获取源代码常用方法,欢迎补充~(后台回复任意信息可加交流群嗷)

                                           .


原文始发于微信公众号(朱厌安全团队):python逆向获取源代码常用方法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月15日02:29:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   python逆向获取源代码常用方法http://cn-sec.com/archives/1729746.html

发表评论

匿名网友 填写信息