python反编译源码
接下来具体说一下步骤:
这个文件在pyinstaller库里,还没有安装的需要安装一下(已经安装的跳过安装)
安装完成后在python安装路径下的\Lib\site-packages文件夹搜索archive_viewer.py文件
找到文件后可以复制到你想要放置的位置(不复制也行)
这一步会把编译出的文件都罗列出来,像这样
但是我们只需要找到我们exe对应的名字的文件就好了,确认存在之后滑到最下面,会发现有个?号用于输入接下来的命令,在这边我们输入
会显示 to filename? 让你输入需要输出的pyc文件名称,这边输入 your_app.pyc 回车就好了
接下来又会显示?号,接着输入 x struct 回车,输入struct文件名称 struct 回车
由于用PyInstaller打包后,pyc文件的前8个字节会被抹掉,所以最后要自己添加回去。前四个字节为python编译的版本,后四个字节为时间戳。
这边使用Hex Editor Neo软件同时打开.pyc文件和struct文件,复制struct文件前面8个字节插入到.pyc文件的前面:
这样我们就得到了完整的pyc文件
安装uncompyle库
反编译
2. python 反编译 源码还原py后,怎么把它再编译成pyc
不用编译
Python每次执行的时候,都会检查py是否有同名的pyc
如果没有或者pyc比py生成时间更早,就会自动把py翻译成字节码的pyc
然后由pyc解释执行
3. python源码编程成pyc后,怎么防止反编译
无法防止反编译,但可以混淆,让你即使反编译了,也看不懂语法
下面一段源码
sd=1
defseed(s):
globalsd
sd=s
defrandn(n):
globalsd
sd=(sd*1103515245+12345)&0x7fffffff
returnsd%n
defmain():
seed(11)
foriinxrange(4):
printrandn(313)
if__name__=='__main__':
main()
混淆后
oo000=1
if9-9:Ii.o0o00Oo0O-iI11I1II1I1I
defoooo(s):
globaloo000
oo000=s
if11-11:ii1I-ooO0OO000o
defii11i(n):
globaloo000
oo000=(oo000*1103515245+12345)&0x7fffffff
returnoo000%n
if66-66:iIiI*iIiiiI1IiI1I1*o0OoOoOO00
defI11i():
oooo(11)
forO0Oinxrange(4):
printii11i(313)
if78-78:i11ii11iIi11i.oOoO0oo0OOOo+IiiI/Iii1ii1II11i
if__name__=='__main__':
I11i()#
4. 有什么工具可以将python编译好的代码.pyc反编译为.py
depython是用来反编译经过python编译的后缀名为pyc或pyo的字节码文件的.
如果你找不到你写的python源代码,depython可以帮助你通过pyc/pyo文件来找回这些源代码。
经depython反编译得出的python源代码,和你原来的代码文件几乎完全一样。
http://www.depython.net/?lang=zh
5. 用Python2.7.1写的小程序可以反编译得到它的源代码吗
可以,网上有很多在线的反编译工具,给你发几个链接:
1、http://depython.com/index.php
2、https://github.com/eble/pyc2py
3、http://tool.lu/pyc/
不过好像第一个只适用于Python2.0-2.6,第二个适用于Python2.6,第三个应该可以反编译2.7,你可以都试一下。
6. python-uncompyle反编译
python的编译后文件pyc,可以将pyc文件反编译为py文件。
相应的工具: uncompyle
github地址: https://github.com/rocky/python-uncompyle6/
安装: pip install uncompyle
安装好后,注意执行的命令为 uncompyle6 ,而不是 uncompyle 。
查看帮助命令: uncompyle6 --help 、 uncompyle6 -h
反编译单个文件 : uncompyle6 foo.pyc > foo.py
反编译多个文件: uncompyle6 -o . *.pyc
例子:
7. 问一下,如何用python的decompile批量反编译pyc 是批量
先将需要反编译pyc,放在指定的路径下,然后os.system.pat一个for
循环就可以批量编译了。
>>>
import
os
>>>
file_list=[]
>>>loc_path='/hadoop/hadoop/'
>>>
file_list=os.listdir(loc_path)
>>>
for
f
in
file_list:
执行反编译
8. PyInstaller打包、解包与反编译.pyc文件
PyInstaller官网: https://www.pyinstaller.org/
假设有一个demo.py文件,在同目录下启动命令行或从命令行进入当前文件夹,使用如下命令打包
打包后同目录下会产生两个文件夹build和dist(distribution),dist文件夹内就是目标程序。
解包使用pyinstxtractor工具
Github地址: https://github.com/extremecoders-re/pyinstxtractor
假设在第1步中,使用-F参数将demo.py打包为独立可执行文件demo.exe,进入dist文件夹,将pyinstxtractor.py放在该目录下,在该目录下启动命令行或从命令行进入该文件夹,使用如下命令解包
解包得到的内容将放入同目录下的demo.exe_extracted文件夹
找到目标.pyc文件,比如demo.pyc
反编译.pyc文件使用uncompyle6工具
Github地址: https://github.com/rocky/python-uncompyle6
可以直接通过pip安装uncompyle6
由于pyinstaller在打包可执行文件时会将.pyc文件头部的16字节magic head去掉,因此需要对需要反编译的.pyc文件进行预处理,将文件头部的16字节magic head补充完整。这里使用一个开源的16进制编辑器ImHex。
Github地址: https://github.com/WerWolv/ImHex
进入demo.exe_extracted文件夹,用16进制编辑器打开struct.pyc文件复制头部的16字节magic head,再用16进制编辑器打开demo.pyc文件,将头部的16字节改为magic head,即将图2中的部分更改为图1中的值即可。
使用前一个命令,反编译后的源码内容会显示在命令行窗口内;使用后一个命令,源码会打印到指定文件中,如demo.py。
到此为止可以
Invalid pyc/pyo file - Magic value mismatch!
补充magic head后即可正常反编译。
如果不是项目成员给所谓的程序而不肯给源码,而我又绕不过这个程序的问题,我才不想折腾这些有的没的。
9. 反编译是什么意思
计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,
某些特定情况下可能推导出源代码。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中。
(9)python反编译源码扩展阅读
反编译是一个复杂的过程,反编译软件有:
1、SWF相关的反编译程序
Action Script Viewer
第一个也是最强大的商业SWF反编译工具,同类产品中,它的AS代码反编译效果最好,SWF转Fla工程重建成功率最高。
2、Android相关的反编译程序
SMALI/BAKSMAL
SMALI/BAKSMALI是一个强大的apk文件编辑工具,用于Dalvik虚拟机(Google公司自己设计用于Android平台的虚拟机)来反编译和回编译classes.dex。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能(注解,调试信息,线路信息等)。
3、Python相关的反编译程序
uncompyle2
uncompyle2可以直接转化为十分完美的python源码,并可以将反编译后的源码再次生成字节码文件。
参考资料来源:网络-反向编译
10. 用Python2.7.1写的小程序可以反编译得到它的源代码吗
python是不能反编译的,因为得到了一个python的程序,就是得到了它的源代码。
python是解释性语言,没有编译这一步骤,和c语言和java语言是不一样的