类似py2exe软件真的能保护python源码吗

背景

最近写了个工具用于对项目中C/C++文件的字符串常量进行自动化加密处理,用python写的,工具效果不错,所以打算在公司内部推广。为了防止代码泄露就考虑不采用直接给源码方式,而python二进制脚本pyc和pyo,虽然提供的不是源码,但可以通过uncompyle2直接得到源码。通过网上资料发现有Windows下的py2exe、Mac下的py2app和跨平台的PyInstaller工具都可以将python脚本打包成可执行文件,第一反应应该满足需要,但有些不放心,故亲自尝试和分析了这些工具。

pyexe

该工具用于Windows下将python脚本和python解释器打包成可执行文件。这样可以在没有安装python的机器上运行。打包后会有个library.zip打包的文件,如图1

里面包含有所依赖的模块和打包的模块,都是pyc存储,因此可以很容易的通过uncompyle2得到源码。因此基本上是零保护。

跨平台工具PyInstaller

使用了这几个工具后发现该工具功能更为强大。打包后的可执行文件不依赖python,可以直接在没装python的机器上运行。要生成不同系统的可执行文件就必须在对应系统上进行打包,而不能一次打包跨平台运行。

该工具可以打包成一个目录或者成一个可执行文件,网上教程很多我也就不介绍了。但打包成一个文件实质执行的时候首先会解压成一个目录,然后才能运行,因此一个文件实质上是对一个目录的压缩存储。该工具提供接口可以使用AES对模块进行加密。

该工具将与系统无关的部分打包进CArchive格式(类似于zip)的文件中,并将该文件放入到生成的可执行文件末尾。PyInstaller提供工具pyi-archive_viewer进行查看,如图2所示,

下面将对上述图中所列的重点文件进行介绍。

out00-PYZ.pyz

保存打包所依赖的模块,类似于上述的library.zip,该文件属于ZlibArchive格式,如图3所示,

从图中可以看出,Table Of Contents部分包含有模块名字、在文件中的偏移和长度。通过这些信息可以得到模块的内容,该内容是压缩的,需要使用zlib进行解压。pyi-archive_viewer也可以查看上述信息。如图4所示。

pyimod00_crypto_key

当使用AES加密选项后,才会有该文件,该文件是pyc格式文件,使用uncompyle2得到的内容为图5所示,

从图中可以看出,只有一个key,实际上这就是我使用AES加密的key,因此该key相当于明文存储。

DealProject

该文件是我处理的python源代码文件,他是直接以源码形式存在的。

可以看出PyInstaller虽然比py2exe复杂点,但同样也是非常容易得到源代码的。

py2app

同样也对Mac上该工具进行了测试,发现py2app打包后的程序同样存在上述问题,并且不能再没有python的机器上运行,处理的文件也是以源码的形式存在,其他文件是以pyc格式打包在压缩文件中。

总结

通过目前主流的打包软件看出,他们只是提供了将python脚本打包成可执行文件,用于在没有python的机器上运行,并没有对python脚本进行保护处理,可以很方便的得到源码。目前了解的解决方案有cython,cython是属于python的超集,他首先会将python代码转化成c语言代码,然后通过c编译器生成可执行文件,这样会克服上述出现的情况,并且可以调用c库的函数,这样提高了程序的性能,并增加了代码的安全性,不失为一种不错的方案。

转自:http://blog.csdn.net/liwugang43210/article/details/50096875

其他:

PHP 可以使用 Zend Guard 对源码加密,然后发布使用。
想知道 Python 有没有类似的加密工具,加密后的代码仍然可以运行。

 

发布python源码编译生成的pyc文件就好了
python -m py_compile src.py

http://my.oschina.net/wizardpisces/blog/107445

 

其实加密很简单的,修改Python虚拟机的代码,针对编译出pyc的部分修改下虚拟码,或者对调几个.别人死都解不出来的.这个方法是来自于(云风大侠的书<我的编程感悟>中的)
缺点也很显而易见,执行时必须使用自己的修改的Python虚拟机.

 

最多也只是混淆,想到达真正意义的加密是不可能的,解释型语言天生如此。

 

可以用这个 python混淆器 来加密。
加密效果不可逆,别手手段比如pyc、编译成exe甚至修改字节码都比较好还原。

 

Python 最多也就是像前面说的那样进行混淆, 想要真的加密暂时没发现神马好的解决办法

 

将核心代码用cython(注意:用的还是python语法)编译成os文件。

【转】类似py2exe软件真的能保护python源码吗的更多相关文章

  1. 类似py2exe软件真的能保护python源码吗

    类似py2exe软件真的能保护python源码吗 背景 最近写了个工具用于对项目中C/C++文件的字符串常量进行自动化加密处理,用python写的,工具效果不错,所以打算在公司内部推广.为了防止代码泄 ...

  2. Python源码读后小结

    Python 笔记 前言(还是叫杂记吧) 在python中一切皆对象, python中的对象体系大致包含了"类型对象", "Mapping对象(dict)", ...

  3. 读python源码--对象模型

    学python的人都知道,python中一切皆是对象,如class生成的对象是对象,class本身也是对象,int是对象,str是对象,dict是对象....所以,我很好奇,python是怎样实现这些 ...

  4. python源码学习(一)——python的总体架构

    python源码学习(一)——python的总体架构 学习环境: 系统:ubuntu 12.04 STLpython版本:2.7既然要学习python的源码,首先我们要在电脑上安装python并且下载 ...

  5. linux 软件管理--yum工具及源码包

    目录 linux 软件管理--yum工具及源码包 一.yum基本概述 二.yum源的配置 三.yum实践案例 四.yum全局配置文件 五.yum签名检查机制 五.制作本地yum仓库 六.构建企业级yu ...

  6. Python源码剖析——02虚拟机

    <Python源码剖析>笔记 第七章:编译结果 1.大概过程 运行一个Python程序会经历以下几个步骤: 由解释器对源文件(.py)进行编译,得到字节码(.pyc文件) 然后由虚拟机按照 ...

  7. VS2013编译python源码

    系统:win10 手头有个python模块,是用C写的,想编译安装就需要让python调用C编译器.直接编译发现使用的是vc9编译,不支持C99标准(两个槽点:为啥VS2008都还不支持C99?手头这 ...

  8. 三种排序算法python源码——冒泡排序、插入排序、选择排序

    最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...

  9. 《python源码剖析》笔记一——python编译

    1.python的架构: 2.python源码的组织结构: 3.windows环境下编译python:

随机推荐

  1. POJ 2409 Let it Bead(polya裸题)

    题目传送:http://poj.org/problem?id=2409 Description "Let it Bead" company is located upstairs ...

  2. 安装Cygwin,,以及遇到的问题

    实验需要用到Cygwin,于是去下了一个,安装过程比较顺利,参考:http://blog.csdn.net/chunleixiahe/article/details/55666792 但是发现  ma ...

  3. 微软Power BI 每月功能更新系列——6月Power BI 新功能学习

    Power BI Desktop 6月产品功能摘要 本月Power BI Desktop的更新,专注于图表格式化的灵活性调整,通过过滤和排序选项,数据视图现在更加强大.多个连接器也获得重大更新,其中包 ...

  4. mybatis的工作原理

    MyBatis的框架架构 看到Mybatis的框架图,可以清晰的看到Mybatis的整体核心对象,我更喜欢用自己的图来表达Mybatis的整个的执行流程.如下图所示: 原理详解: MyBatis应用程 ...

  5. ERROR: gnu-config-native-20150728+gitAUTOINC+b576fa87c1-r0 do_unpack: Function failed: Fetcher failure: Fetch command failed with exit code 128, output: fatal: the '--set-upstream' option is no longer

    /********************************************************************** * ERROR: gnu-config-native-2 ...

  6. WEBBASE篇: 第三篇, CSS知识1

    第三篇, CSS知识1 一,CSS 介绍 CSS: Cascading Style Sheets ---样式表 HTML: 搭建网页结构: CSS: 在网页结构基础上进行网页的美化: 二,CSS的使用 ...

  7. 通过putty进行端口映射并且启动jupyter notebook

    通过内网穿透之后,一般而言,我们访问内网中的机器在ubuntu下一句命令: ssh name@阿里云 -p 6000即可进行访问,其中-p是表示端口号:同样的通过windows下的putty也可修改对 ...

  8. 非原创。使用ajax加载控件

    非原创.来自博客园老赵. public class ViewManager<T> where T : System.Web.UI.UserControl { private System. ...

  9. CF444(Div. 1简单题解)

    A .DZY Loves Physics 题意:给定带点权和边权的无向图,现在让你选一些点,使得 点权和/被选点对间的边权和 最大. 思路:不难证明,选择边和对应的两点是最优的. #include&l ...

  10. ZOJ - 4089 :Little Sub and Isomorphism Sequences (同构 set)

    Little Sub has a sequence . Now he has a problem for you. Two sequences of length and of length are ...