使用uncompyle2直接反编译python字节码文件pyo/pyc

update:在Mac OS X版的September 10, 2014版(5.0.9-1)中发现安装目录中的src.zip已更换位置至WingIDE.app/Contents/Resources/bin/2.7目录下,其它的Crack操作仍然不变。

实际上只需要把之前的abstract.pyo拿出来,放到新的src.zip中即可,即无需再次发编译。



这里主要介绍一下,python生成的pyo、pyc字节码文件的反编译工具uncompyle2。过程中将结合WingIDE最新版(WingIDE 5.0.2, Jan13,2014)的破解。无技术含量。

WingIDE 5破解 WingIDE 5.0.2破解 WingIDE 5最新版 破解

升级了最新的WingIDE 5.0.2(Jan13,2014),有10天的试用期,于是乎自己动手丰衣足食。
关于WingIde的破解之前论坛上已有两篇(见后文参考链接),其基本的方法就是用unpyclib来反编译,然后从类似的汇编或Smali一样的代码中找到关键的跳转点,然后在反编译前的abstract.pyo二进制文件中确定该跳转点,将其修改为相反的跳转指令即可。其中存在的一个比较麻烦问题就是,在反编译前的文件中寻找关键跳转指令的对应的位置。

我在着手时,搜了下python生成的字节码文件的反编译工具,有unpyclib和uncompyle2,发现uncompyle2可以直接转化为十分完美的python源码,并可以将反编译后的源码再次生成字节码文件!
于是乎,破解WingIDE 相对于之前的流程,现在显得更为简单了。

step 1 安装和配置uncompyle2
从github上获取uncompyle2然后进行配置。

python setup.py install

之后从下载后解压的文件夹uncompyle2-master/scripts找到可以直接使用的脚本uncompyle2,实际上这就是一个python脚本文件。

step 2 反编译abstract.pyo
和前面帖子中方法一致,从WingIDE的安装目录的bin/2.7/中的src.zip中提取process\abstract.pyo进行反编译

./uncompyle2 ~/Desktop/abstract.pyo > ~/Desktop/abstract.py

然后打开即可看到整齐的、惊艳的py代码了!

step 3 修改abstract.py并重新生成pyo

在反编译的abstract.py中直接搜授权验证函数_GetTermDaysLeft,看到下图是不是狂喜呢?完整的注释。。

顺便扫扫代码,即使没注释也很容易看懂。。
所以。。
果断在函数开始处,添加return -1,并保存。


生成pyo
python -O -m py_compile abstract.py
注:如果不带选项-O则生成的是pyc文件,-O选项则可以在生成代码时进行一定的优化。

step 4:大功告成
将生成的新abstract.pyo替换原来src.zip中的\process\abstract.pyo即可。需要注意的是:不能解压,替换,再打包!需要直接替换zip中相应文件!

最后替换安装目录中bin\2.7\下的src.zip即可。

现在打开WingIde就变成了授权永久有效!
并且生成src.zip可以在Mac OS、Linux(Ubuntu)和Windows上均有效(Ubuntu上,wing的安装目录位于/usr/lib/wingide5/)。

总的就是想和大家分享下 反编译的神器 uncompyle2!

写到最后感觉跟Android的重打包似的:p:

参考:
http://bbs.pediy.com/showthread.php?t=148699
http://bbs.pediy.com/showthread.php?t=138599
https://github.com/wibiti/uncompyle2/
http://www.cnblogs.com/dkblog/archive/2009/04/16/1980757.html

原文地址:https://www.cnblogs.com/timssd/p/11167882.html

时间: 2024-10-10 05:52:15

使用uncompyle2直接反编译python字节码文件pyo/pyc的相关文章

如何将源码文件编译成字节码文件

[[email protected] ~]# cat 1.py # 要编译的源码文件 #!/usr/bin/python print 'Hello World' [[email protected] ~]# cat 2.py # 将 1.py 编译成字节代码 #!/usr/bin/python import py_compile py_compile.compile('1.py') [[email protected] ~]# python 2.py [[email protected] ~]#

查看 java 中的编译的字节码文件

javap -c Atomicity ---------- javap -c 产生的字节码文件---------- Compiled from "Atomicity.java" public class Atomicity { int i; public Atomicity(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return v

Python 文件编译为字节码的方法

一般情况下 python 不需要手动编译字节码.但是如果不想直接 release 源代码给其他人,将文件编译成字节码,可以实现一定程度的信息隐藏. 1) 使用模块 py_compile 编译一个单文件 import py_compile py_compile.compile('./demo.py') 2) 使用模块 compileall 递归的编译一个文件包 import compileall compileall.compile_dir('./test') 3) 使用模块 compileall

Python 字节码bytecode

字节码bytecode dis模块是Python字节码反汇编器.通过反汇编支持Cpython的字节码分析. 前置知识 在看字节码之前,先要了解一下code object和frame object,它们在datamodel.html中有介绍 例子: >>> import dis >>> def hello(): ... print('Hello World!') ... >>> hello.__code__ <code object hello a

浮生半日:探究Python字节码

好吧!"人生苦短,请用Python",作为python爱好者以及安全从业者,而且最近也碰到了一些这方面的问题,懂点python字节码还是很有必要的. Python是一门解释性语言,它的具体工作流程如下: 1:编译,形成.pyc或.pyo后缀的语言 2:放入解释器,解释器执行字节流(opecode) 和java字节码一样,他们都是基于栈进行解释的.首先,先来看对pyc文件进行一个直观的理解: 一:直面pyc文件 pyc文件的生成一般用于加快Python的解释速度,运行时,如果pyc的编译

Python字节码与解释器学习

参考:http://blog.jobbole.com/55327/ http://blog.jobbole.com/56300/ http://blog.jobbole.com/56761/ 1. 在交互式命令行中执行命令的内部过程 当你敲下return键的时候,python完成了以下四步:词法分析.句法分析.编译.解释.词法分析的工作就是将你刚才输入的那行代码分解为一些符号token(译者注:包括标示符,关键字,数字, 操作符等).句法分析程序再接收这些符号,并用一种结构来展现它们之间的关系(

rpm打包时包含python脚本,需要忽略掉pyc, pyo字节码文件

制作rpm包时,有时包含python程序,一般默认的行为:打包时对python脚本会编译成pyc,pyo字节码文件并一起放在rpm包中,这可能导致打包时引用文件缺失的错误. 如果不需要这些字节码文件,可以修改 /usr/lib/rpm/brp-python-bytecompile 找到编译pyc,pyo的两条命令,并将其注释,或者直接在脚本开头就用exit 0 退出. 但是要注意,如果已经打了一次包并在pyc,pyo文件缺失的步骤上失败,则打包的临时目录中可能残留了文件,需要把临时目录(通常在/

python字节码(转)

了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代码文件--它们的名字以 .py 结尾.你可能还看到过其它类型的文件,比如以 .pyc 结尾的文件,或许你可能听说过它们就是 Python 的 "字节码bytecode" 文件.(在 Python 3 上这些可能不容易看到 -- 因为它们与你的 .py 文件不在同一个目录下,它们在一个叫 _

Java Eclipse编译后产生的字节码文件,用DOS命令符怎么打开

在很多初学者刚刚接触eclipse的时候,写完一个代码文件.例如 Demo.java 通过run as a java application生成之后,会产生一个Demo.class. Demo.class 地址(D:Demo.class) 我们打开DOS命令,找到Demo.class. 以为已经时字节码文件,所以不需要javac Demo.java D: cd java Demo 系统会报错,找不到主函数main,不能运行此程序! 什么原因导致的嘞? 因为eclipse中会产生一个package