将 Python 打包的 exe 进行反编译
Python 打包成 exe 之后,是否能从二进制文件中恢复出源代码?没有加密的话是可以的。
首先需要解包。
直接从 github 上下载就行:https://github.com/countercept/python-exe-unpacker
使用也简单:python pyinstxtractor.py xxx.exe
解包后,得到 xxx.exe_extracted 就是所有的 pyc 文件了。
找到 xxx.exe_extracted\struct 中的 pyc 签名信息:
然后可以并使用下面的脚本进行拼接(PYZ-00.pyz_extracted 里面的 pyc 只缺中间一部分):
import os
import argparse parser =argparse.ArgumentParser()
parser.add_argument('--filename', '-f', type=str, help="file name of the file to be modified!")
args = parser.parse_args() if args.filename:
print("filename: " + args.filename)
if os.access(args.filename, os.W_OK):
print("- processing...")
else:
print("- access is denied! exit!")
exit(0)
else:
print("-h for help!")
exit(0) structBytes=b'\x70\x79\x69\x30\x10\x01\x00\x00' with open(args.filename, "rb") as f:
bytes = f.read()
bytes=bytes[:8]+structBytes+bytes[12:]
with open(args.filename, "wb") as g:
g.write(bytes) print("- successed!")
多个文件的话。。。再叠加个批处理吧,顺便直接用 uncompyle6 把 pyc 反编译成 python 源代码 = =
set "path" "C:\DevApp\Anaconda3\Scripts;C:\DevApp\Anaconda3;C:\DevApp\Anaconda3\DLLs;C:\DevApp\Anaconda3\\Library\bin;%path%" /m
@echo off set here=%~dp0 pushd %here% cd xxx.exe_extracted\PYZ-00.pyz_extracted for /f "delims=" %%i in ('dir /s/b "*.pyc"') do (
python.exe %here%\cooking.py -f %%i
start uncompyle6 -o . %%i
) popd
这里之所以用 start,是因为有些 pyc 没法直接反编译,这样的话 script 会被卡住。用 start 开始新进程,并行处理,有一两个卡住也没关系。
最后发现有 4 个没法反编译,从文件大小可以看出来:
还好,可以从文件名猜到用了什么库。
将 Python 打包的 exe 进行反编译的更多相关文章
- 对Python源码加密及反编译前后对比
关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...
- python打包成exe
目前有三种方法可以实现python打包成exe,分别为 py2exe Pyinstaller cx_Freeze 其中没有一个是完美的 1.py2exe的话不支持egg类型的python库 2.Pyi ...
- 关于python打包成exe的一点经验之谈
我经常用python写些脚本什么的,有时候脚本写完以后,每次运行都得在IDE打开在运行,很麻烦,所以经常将python编译成exe.SO...有了一点经验,在这和大家分享一下. python ...
- Python打包成exe,pyc
D:\mypython\path\ C:\Python27\Scripts\pyinstaller.exe -w mypython.py # Python打包成exe D:\mypython\path ...
- 转载文章----初识Ildasm.exe——IL反编译的实用工具
转载地址http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html Ildasm.exe 概要:(路径:C:\Program ...
- 初识Ildasm.exe——IL反编译的实用工具
原文地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html Ildasm.exe 概要: 一.前言: 微软的IL反 ...
- [No000013B]初识Ildasm.exe——IL反编译的实用工具
Ildasm.exe 概要: 一.前言: 微软的IL反编译实用程序——Ildasm.exe,可以对可执行文件(ex,经典的控制台Hello World 的 exe 可执行文件)抽取出 IL 代码,并且 ...
- Python打包成exe,文件太大问题解决办法
Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...
- Python打包成exe可执行文件
Python打包成exe可执行文件 安装pyinstaller pyinstaller打包机制 Pyinstaller打包exe 总结命令 可能会碰到的一些常见问题 我们开发的脚本一般都会用到一些第三 ...
随机推荐
- JavaScript 中的执行上下文和执行栈
JavaScript - 原理系列 在日常开发中,每当我们接手一个现有项目后,我们总喜欢先去看看别人写的代码.每当我们看到别人写出很酷的代码的时候,我们总会感慨!写出这么优美而又简洁的代码的兄弟到 ...
- canal数据同步的环境配置
canal数据同步的环境配置:(适用于mysql) 前提:在linux和windows系统的mysql数据库中创建相同结构的数据库和表,我的linux中mysql是用docker实现的(5.7版本), ...
- 在测试自定义starter时,若出现无法找到helloservice的Bean的解决方法
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoc ...
- Java基础语法:标识符
Java所有的组成部分都需要名字. 类名.变量名 以及方法名 都被称为标识符. 一.规则 Ⅰ.首字符 规则:所有的标识符都应该以字母(A-Z 或者 a-z).美元符($).下划线(_)开始. 示例:t ...
- 剑指 Offer 14- I. 剪绳子 + 动态规划 + 数论
剑指 Offer 14- I. 剪绳子 题目链接 还是343. 整数拆分的官方题解写的更清楚 本题说的将绳子剪成m段,m是大于1的任意一个正整数,也就是必须剪这个绳子,至于剪成几段,每一段多长,才能使 ...
- HashMap之tableSizeFor方法图解
目录 普通人的简单粗暴方式 示例代码 问题 大神的实现 移位的思想 全过程示意图 初始值 右移一位+或运算 右移二位+或运算 右移四位+或运算 右移八位+或运算 右移十六位+或运算 结果+1 初始容量 ...
- RabbitMQ初步使用,简洁介绍。
RabbitMQ是一种越来越流行的开源,快速消息代理,它使用Erlang编写并基于Open Telecom Platform框架构建.它实现了高级消息队列协议(AMQP),用于在进程,应用程序和服务器 ...
- 【测试技术分享】在Linux下安装Python3
导语:Python在linux环境下没有安装包,同时很多系统没有Python环境,即使有Python环境也是Python2.x,顺应时代,现在开始进行安装Python3的教程. 一.安装依赖 sudo ...
- 多租缓存实现方案 (Java)
多租缓存实现方案 (Java) 缓存在系统中是不可少的,缓存的实现是一个从无到有的过程,最开始,单应用的,缓存都是应用内部的,Map基本就能满足,实现简单.但是当上了微服务之后,应用是多部署的,应用之 ...
- C语言float和double输入问题
统计给定的n个数中,负数.零和正数的个数. Input 输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数:如果n=0,则表示输入结 ...