前言

简单了解反编译,为保证自己python工程有一定的安全性,尝试反编译文件。

目标

Python exe -> pyc -> py

环境

windows 7

python 3.7

PyInstaller 3.5

工具

uncompyle6 3.6.4 ( 注:安装命令 pip install uncompyle)

archive_viewer.py (注:该文件位于PyInstaller包中PyInstaller\utils\cliutils\archive_viewer.py)

010 editor (字节查看修改,用于补全pyc文件中的缺失部分)

使用方法

用archive_viewer打开exe文件,x命令解压(x)需要的文件,输出到指定文件,并退出(q)

# 法一 单个文件

python archive_viewer.py main.exe

? x struct

to filename? struct.pyc

? q

#########################

# 法二 所有文件

python pyinstxtractor.py main.exe

对比过程,可直接修改要修改的文件。

到工程目录下的__pycache__复制一个文件a.cpython-37.pyc

到解压的main.exe_extracted\PYZ-00.pyz_extracted中找到对应的文件,记为a.pyc

使用010editor打开两个文件,进行对比发现a.pyc少了4个字节,在字节8开始处插入4个0字节后保存(对比发现8到16个字节不同,但是已经可以反编译了,故忽略)

使用uncompyle6 反编译文件pyc到py

uncompyle6 a.pyc > a2.py

uncompyle6 a.cpython-37.pyc > a1.py

生成的py文件相同,且与源代码相同

总结:

1. 使用pyinstxtractor或者archive_viewer将exe文件解码出pyc文件(注,只适用于用pyinstaller编译生成的exe文件)

2. 使用二进制编辑工具,在第8个字节处插入4个0字节

3. 使用uncompyle6反编译pyc文件到py文件。

注:

参考文档:

pyc文件格式

1 最开始4个字节是一个Maigc int, 标识此pyc的版本信息, 不同的版本的 Magic 都在 Python/import.c 内定义

2 接下来四个字节还是个int,是pyc产生的时间(TIMESTAMP, 1970.01.01到产生pyc时候的秒数, 本文就是通过添加4个字节为0的时间戳字段来反编译pyc文件)

3 接下来是个序列化了的 PyCodeObject(此结构在 Include/code.h 内定义),序列化方法在 Python/marshal.c 内定义

Python脚本解压

importuncompyle6

with open("a.py", "w") as file:

uncompyle6.decompile_file("a.pyc", file)

python打包的exe反编译_反编译python打包的exe到源代码相关推荐

  1. exe反编译_反编译Python生成exe软件(Py3-polySML)

    反编译对象为一篇文献上的软件,反编译只是为了了解一些源代码的逻辑. 过程参考文章:python3.7.4反编译生成的.exe 反编译对象:polySML 此对象为python打包,且未进行加密加壳软件 ...

  2. python制作图形化小游戏_创意编程|Python的GUI简易界面设计测测你的反应力

    Python的GUI简易界面设计案例 测测你的反应力      作为初次接触代码编程的你,是不是觉得Python程序除了"码"就是"字"即使是有趣的程序除了烧烧 ...

  3. java+如何解决反爬虫_反爬虫,到底是怎么回事儿?

    原标题:反爬虫,到底是怎么回事儿? 有位被爬虫摧残的读者留言问:「网站经常被外面的爬虫程序骚扰怎么办,有什么方法可以阻止爬虫吗? 」 这是个好问题,自从 Python 火了起来,编写爬虫程序的门口越来 ...

  4. django可以生成exe文件吗_把 Django 程序打包为 exe 可执行文件

    功能背景 我把自动化校准程序写好后,可以在 Pycharm 中运行 Django 程序.但是,这个程序最终要给检定员用的,我不可能在每个检定员的电脑上安装 Django 编程环境让他们使用.所以,要把 ...

  5. python 面试题 博客园_常见的python面试问题1

    雷锋网按:本文为 AI 研习社编译的技术博客,原文 Top 35 Python Interview Questions and Answers in 2018 ,作者 DataFlair Team. ...

  6. python底层与机器底层关系_起底 Python 的底层逻辑

    原标题:起底 Python 的底层逻辑 本文配图来自美剧<我们窃取秘密:维基解密的故事>. 文 | 图灵社区 推荐 | 编程派公众号(ID:codingpy) 01 一次纯粹的hackin ...

  7. python中换行的转义符_详解Python中的各种转义符\n\r\t

    Python中的各种转义符\n\r\t 转义符 描述 \ 续行符(在行尾时) \\ 反斜杠符号 ' 单引号 " 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 ...

  8. python怎样打开加密的文件_如何用Python 加密文件

    生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库. 但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而 ...

  9. python意外缩进引发逻辑错误_如何编写 Python 程序

    如何编写 Python 程序 从今以后,保存和运行 Python 程序的标准步骤如下: 对于 PyCharm 用户 打开 PyCharm. 以给定的文件名创建新文件. 输入案例中给出的代码. 右键并运 ...

  10. python怎么学比较有技巧_怎么学python学的快?学习技巧大分享

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

最新文章

  1. Error in bl_make_text_box(token, drawing_context$gp, drawing_context$yoff_pt) : function ‘Rcpp_preci
  2. 普通java跑到linux上,JAVA在linux下open too many files
  3. 云数据库MongoDB全面支持3.4版本,支持多存储引擎
  4. new arraylist内存_如何避免内部类中的内存泄漏
  5. php程序里的configini_程序员手册 修改php.ini的几种方法
  6. C语言的变量作用域及头文件
  7. 国标 计算机机房,国标相关知识:电子信息系统机房设计规范(GB50174-2008)
  8. DIY 3.5毫米/MMCX接口的耳机线(无麦)
  9. 计算机等级考试——四级网络工程师考试大纲
  10. java考勤表导出_考勤打卡机导出的excel考勤时间表如何生成实用的考勤表
  11. 你每天都在使用的HTTP协议,到底是什么鬼?
  12. python 短信_Python怎么接收手机短信?
  13. RL(Chapter 5): Monte Carlo Methods (MC) (蒙特卡洛方法)
  14. stimulsoft 变量
  15. Maven依赖冲突问题解决方案
  16. html table表格设置滚动条
  17. 【Updating】二〇二一流水账
  18. Android shortcut的使用及源码分析
  19. Android 11.0 ActivityManagerService的启动流程
  20. 喝过红茶,热过烟花——张国荣《午后红茶》歌词解析

热门文章

  1. Xcode12 兼容iOS14 及下载链接
  2. 基于MATLAB的汽车出入库计时系统 _matlab课程设计
  3. 2、RH850外设时钟选择及配置
  4. 如何给绘制好的CAD图纸设置密码?
  5. Android 资源和国际化
  6. matlab在有限差分法中的应用,MATLAB在有限差分法中的应用
  7. 金蝶云星空python二开根据物料旧编码链接物料编码做单据
  8. 计算机ip 地址异常,电脑显示IP地址错误怎么办|电脑无法上网提示IP地址错误的解决方法...
  9. Ognl表达式的一些用法
  10. 麻瓜编程python百度云_麻瓜编程 实用主义学Python