【测试】Python反编译的两种方式

这篇具有很好参考价值的文章主要介绍了【测试】Python反编译的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以前听说py编译的程序不安全,容易被反。这两天刮台风了,闲着也是闲着,自己也跟着捣鼓了一番。

为了不给别人带来不好的影响,我编译我自己写的代码来做测试,代码头部如下图,引用了几个常见库:

pyinstxtractor.py,python,开发语言,linux,运维,服务器

用pyinstaller进行完整打包:

pyinstaller -F g.py

pyinstxtractor.py,python,开发语言,linux,运维,服务器

打包结束,在dist目录得到目标程序g.exe:

pyinstxtractor.py,python,开发语言,linux,运维,服务器

接下来用两种方式进行反编译:

一、pyinstxtractor+uncompyle6方式

  1. 将pyinstxtractor.py和目标exe放在同一个目录

    pyinstxtractor.py,python,开发语言,linux,运维,服务器

  2. 在目录进入命令行窗口,输入命令:

    python pyinstxtractor.py g.exe

    pyinstxtractor.py,python,开发语言,linux,运维,服务器

    会在当前目录生成一个目标_extracted 的文件夹,里面有一大堆文件,其中有一个与目标exe同名的pyc文件,我这边就是g.pyc。

  3. 安装uncompyle6库,按以下命令安装:

    pip install uncompyle6
  4. 将pyc文件反编译为py文件:在第2步的目标_extracted 文件夹进入命令行窗口,输入以下命令,后面的.py文件名随意:

    uncompyle6 g.pyc>g.py

    pyinstxtractor.py,python,开发语言,linux,运维,服务器

  5. 回车后在当前目录生成对应的py文件:

    pyinstxtractor.py,python,开发语言,linux,运维,服务器

  6. 打开瞧一瞧,和源文件对比一下,头部多了一些uncompyle6的信息,其余的和源文件一毛一样。

    pyinstxtractor.py,python,开发语言,linux,运维,服务器

二、pycdc方式

  1. 前面还是同上面的方式,得到pyc文件(步骤2);

  2. 将pycdc.exe和pyc文件放同一目录,进入命令行窗口,输入以下命令:

    pycdc.exe g.pyc > g.txt
  3. 反编译结果被输出到g.txt中,当然后缀也可以改成.py啥的。

pyinstxtractor.py,python,开发语言,linux,运维,服务器

对比结果,这种方式好像代码都变成纯文本了,除了一些换行会错乱,其他的还原度还是极好的。

pyinstxtractor.py,python,开发语言,linux,运维,服务器

以上只是最基本的两种反编译Python打包的exe方式,也都顺利拿到我们想要的py源码。实际反编译的时候,可能会遇到很多情况,比如加密、magic头变化、依赖库、py版本等问题,只能相应的再去找解决办法,见招拆招了。

当然,网上还有很多方法,比如pyi-archive_viewer提取pyc文件,但大体思路都是exe > pyc > py。

以上的测试文件可公众号回复:py反

注:测试环境:Win7 64位,Python 3.8.7,简单测试,未做深入研究。

- End -

更多精彩文章

点击下方名片关注【偶尔敲代码】文章来源地址https://www.toymoban.com/news/detail-770817.html

到了这里,关于【测试】Python反编译的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python爬虫中通用的两种乱码解决方式(自用)

    问题:在python爬虫爬取的时候,我们有时会遇到诸如以下的乱码: 解决方法一:用utf-8来转码,具体在请求过程中如下 解决方法二:用通用的中文乱码处理方式: 下面给出具体的运用例子:(仅供学习交流)

    2024年02月16日
    浏览(32)
  • MySQL强制使用索引的两种方式及优化索引,使用MySQL存储过程创建测试数据。

    一、MySQL强制使用索引的两种方式 1、使用 FORCE INDEX 语句: 使用 FORCE INDEX(索引名称)走索引: 2、使用 USE INDEX 语句: 使用 USE INDEX(索引名称)走索引: FORCE INDEX 或 USE INDEX 的区别? FORCE INDEX :这个语句指示MySQL强制查询使用特定的索引。它会忽略优化器的选择,无论索引

    2024年02月03日
    浏览(47)
  • 微信小程序入门及开发准备,申请测试号以及小程序开发的两种方式,目录结构说明

    目录 1. 介绍 1.1 优点 1.2 开发方式 2. 开发准备 2.1 申请 2.2 申请测试号 2.2 小程序开发的两种方式 2.3 开发工具 3. 开发一个demo 3.1 创建项目 3.2 配置 3.3 常用框架 3.3 目录结构说明 3.4 新建组件 是一种不需要下载安装即可使用的应用,是一种 触手可及 的应用 可以借助微信的流量

    2024年02月05日
    浏览(44)
  • ipynb文件转为py文件的两种方法

    许多GitHub上的项目拉下来是.ipynb格式,如果不用jupyter notebook打开,用pycharm打开,看到的是一个个cells,看代码逻辑不太方便;或者通过jupyter notebook打开,但运行、修改、保存中间过程有不方便的地方,想转为.py文件,下面提供两种方法来实现ipynb文件转为py文件。 方法一:通

    2024年02月11日
    浏览(52)
  • Python 反编译:pyinstxtractor工具和uncompyle6库的使用

    uncompyle6 现仅适用于 Python 2.4 到 3.8 版本 Python 3.9 及以上版本请参见我另外一篇博客: Python 反编译:pycdc工具的使用 ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,

    2024年02月16日
    浏览(36)
  • (一)python发送HTTP 请求的两种方式(get和post )

    注:发送请求(包括请求行、方法类型、头、体) 常见的请求方式有get、post、put、delete            格式:requests.get() (内容: url必填; params选填:url参数字典) # ~ 无参数的get请求 # ~ 有参数的get请求 # ~ 使用params的get请求        知识扩展#  requests.post() post请求分为5种,常用

    2024年02月02日
    浏览(69)
  • PyQt5将.ui文件转换为.py文件的两种方法

    PyQt5是一个流行的Python库,用于创建图形用户界面(GUI)应用程序。在PyQt5中,可以使用Qt Designer工具创建GUI界面,并将其保存为.ui文件。然后,可以使用两种方法将.ui文件转换为.py文件,以便在Python代码中使用。 方法一:使用PyUIC工具 PyQt5附带了一个命令行工具 called pyuic5,

    2024年02月06日
    浏览(48)
  • 用Python获取弹幕的两种方式(一种简单但量少,另一量大管饱)

    弹幕可以给观众一种“实时互动”的错觉,虽然不同弹幕的发送时间有所区别,但是其只会在视频中特定的一个时间点出现,因此在相同时刻发送的弹幕基本上也具有相同的主题,在参与评论时就会有与其他观众同时评论的错觉。 在国内的视频网站里,弹幕先是从A站被大家

    2023年04月27日
    浏览(36)
  • 封装axios的两种方式

    作为前端工程师,经常需要对axios进行封装以满足复用的目的。在不同的前端项目中使用相同的axios封装有利于保持一致性,有利于数据之间的传递和处理。本文提供两种对axios进行封装的思路。 首先导入了 axios, AxiosInstance和AxiosResponse模块 ,用于创建一个http请求的实例和处理

    2024年02月08日
    浏览(41)
  • Containerd的两种安装方式

    1. 轻量级容器管理工具 Containerd 2. Containerd的两种安装方式 3. Containerd容器镜像管理 4. Containerd数据持久化和网络管理 操作系统环境为centos7u6 1.1 获取YUM源 1.2 使用yum命令安装 1.3 验证安装及启动服务 1.4 验证可用性 Containerd有两种安装包: 第一种是 containerd-xxx ,这种包用于单机测

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包