一种保护Python程序的方法技术

技术编号:16500594 阅读:124 留言:0更新日期:2017-11-04 11:34
本发明专利技术公开了一种保护Python程序的方法,所述方法包括:平行步骤和位于平行步骤之后的非平行步骤,其中,平行步骤包括:平行子步骤A:基于任意预设的操作码对应关系,在opcode.h中交换第一预设号操作码,然后再交换第二预设号操作码;平行子步骤B:修改opcode.py中的操作码,保持与预设的操作码对应关系一致;非平行步骤包括:步骤1:重新编译源码,获得新的python解释器,实现了现有的反编译工具无法反编译得到源码,对Python程序进行保护的技术效果。

A method of protecting Python program

The invention discloses a method for protecting the Python program, the method includes parallel steps and located in parallel steps after non parallel steps, which comprises the following steps: parallel parallel sub steps: A operation code correspondence based on arbitrary preset preset number, the first operation code switching in opcode.h, and then exchange second preset No. operation code; parallel sub step B: modify the opcode.py operation code, the operation code is consistent with the preset relationship; non parallel comprises the following steps: Step 1: recompile the source code, to obtain a new Python interpreter, the existing anti compiler tool to decompile get source code, technical effect for protecting Python program.

【技术实现步骤摘要】
一种保护Python程序的方法
本专利技术涉及计算机程序领域,具体地,涉及一种保护Python程序的方法。
技术介绍
Python程序是使用Python脚本语言开发的应用程序。为了保护源代码不泄露,使用python脚本语言开发的应用程序(app.py)一般会先通过Python脚本编译器将其编译为具有特定结构的二进制字节码文件(app.pyc),然后将字节码文件(app.pyc)发布给客户运行。使用Python脚本语言开发的应用编译生成的字节码(.pyc)文件,不是针对特定处理器和系统的二进制文件,而是针对Python虚拟机(PythonVirtualMachine)的具有特定的结构和特征的二进制文件,其保留了Python源码文件中除注释外的全部信息。因为字节码文件具有特定的格式,所以使用Python脚本语言开发的应用程序容易被攻击者反编译为源码文件,对开发者和公司造成损失。字节码文件中最重要的一个属性域就是操作码序列,其中包含了对程序执行逻辑的控制,和对程序中各个参数的执行的操作等信息,因此对操作码序列和字节码文件格式的保护显得尤为重要。由于使用Python脚本语言开发的应用程序一般会使用大量的第三方库,尤其是部署在Linux环境上的应用程序(Linux系统也会使用Python的一些库),所以需要保证Python程序和第三方库的兼容性。现有的Python程序保护方法主要是修改操作码,而单纯的修改操作码会导致运行特定的代码时程序崩溃。由于pyc文件仅针对Python虚拟机,所以当pyc程序被转移到其他环境依旧可以被正常运行。综上所述,本申请专利技术人在实现本申请专利技术技术方案的过程中,发现上述技术至少存在如下技术问题:现有的Python程序保护方法存在一定兼容性问题,以及在某些特定程序下会出现崩溃,以及现有保护方法不能保护pyc程序被盗用。
技术实现思路
本专利技术提供了一种保护Python程序的方法,解决了现有的Python程序保护方法中存在的兼容性问题以及在运行特定代码时出现程序崩溃的问题,实现了在防止反编译的基础上提高了兼容性,防止程序出现崩溃的技术效果。为实现上述专利技术目的,本申请提供了一种保护Python程序的方法,所述方法包括:平行步骤和位于平行步骤之后的非平行步骤,其中,平行步骤包括:平行子步骤A:基于任意预设的操作码对应关系,在opcode.h中交换第一预设号操作码,然后再交换第二预设号操作码;平行子步骤B:修改opcode.py中的操作码,保持与预设的操作码对应关系一致;非平行步骤包括:步骤1:重新编译源码,获得新的python解释器。其中,平行步骤中的子步骤之间没有先后顺序,在平行步骤完成后进行非平行步骤,本专利技术主要解决了Python程序容易被反编译获得源码,并且克服现有保护程序存在的不足之处。本专利技术基于修改Python源码和电子狗加密来达到上述目的。Python解释器使用4字节的整形数字来表示版本编号,Python解释器只会执行具有相同版本号的编译后的pyc程序。版本号在解释器的import.c中定义。Python解释器在执行过程中,对于被引用(既import)的模块,会自动为其生成pyc文件,当再次加载该模块的时候,就直接执行该pyc文件,而不会再次进行编译操作。Python解释器使用1字节容量来储存操作码,理论上可以有256个操作码,现在使用了0-147号操作码,其中0-89号操作码为不需要参数的操作码,90-147号操作码为需要参数的操作码。操作码在opcode.h文件中定义,如图1所示。python解释器的操作码在opcode.h中被定义,首先在opcode.h中任意交换0-89号操作码,然后再任意交换90-147号操作码。这样修改过操作码的python解释器,就具有了自己独有的一套操作码,在不知道我们的操作码的对应关系的情况下,别人也就没办法对我们的pyc程序进行反编译,由此我们便达到了防止程序被反编译,保护源代码的目的。修改opcode.py中的操作码,保持和步骤A交换后的操作码一致。如果不修改这个文件中的操作码,导致python解释器在执行步骤1操作的时候出现错误,无法获得新的python解释器。进一步的,所述平行步骤还包括:修改import.c中定义的版本号为一个没有被使用的值。为了保证我们修改后的python解释器,在执行这些已经存在pyc文件的模块时不出现兼容性问题,需要修改import.c中定义的版本号为一个没有被使用的值。进一步的,所述平行步骤还包括:修改import.c中的生成pyc文件的相关内容,使python解释器不能生成pyc文件。python解释器可以直接生成编译后的pyc文件,如果将修改过操作码的python解释器生成的pyc文件和普通python解释器生成的pyc文件进行对比,容易被破解获得修改后的操作码对应关系,进而导致程序被反编译获得源代码,失去了保护的意义。进一步的,所述平行步骤还包括:修改marshal.c中有关显示编译后pyc文件内容的接口,使其他程序不能调用这些接口获得编译之后的pyc文件内容。进一步的,所述非平行步骤还包括:步骤2:使用加密狗对新的python解释器进行加密。为了增加保护效果,防止他人修改,破解获得的新的python解释器,使用加密狗对新的python解释器进行加密。进一步的,所述非平行步骤还包括:步骤3:删除opcode.py和opcode.h。防止通过opcode.py或者opcode.h获得交换后的操作码。进一步的,所述步骤1具体为:使用gcc或者VS重新编译源码,获得新的python解释器。进一步的,在opcode.h中交换0-89号操作码,然后再交换90-147号操作码。本申请提供的一个或多个技术方案,至少具有如下技术效果或优点:本申请中的方法修改了magic_number和操作码,使得现有的反编译工具无法反编译得到源码。进一步的,本申请中的方法对修改后的python执行环境进行了加密狗加密,可以保护其只能在受保护的环境下运行,防止他人直接盗用。进一步的,本申请中的方法同时修改了opcode.py中定义的操作码,可以防止一些引用了这个文件的程序出现崩溃。进一步的,本申请中的方法因为使用的是没被使用的magic_number,所以不会对其它python执行环境造成影响,提高了兼容性。附图说明此处所说明的附图用来提供对本专利技术实施例的进一步理解,构成本申请的一部分,并不构成对本专利技术实施例的限定;图1是操作码在opcode.h文件中定义示意图;图2是本申请中修改import.c中定义的版本号示意图;图3是本申请中修改import.c中的生成pyc文件的相关内容示意图;图4是本申请中修改marshal.c中有关显示编译后pyc文件内容的接口示意图;图5是本申请中在opcode.h中任意交换操作码示意图;图6是本申请中保护Python程序的方法的流程示意图。具体实施方式本专利技术提供了一种保护Python程序的方法,解决了现有的Python程序保护方法中存在的兼容性问题以及在运行特定代码时出现程序崩溃的问题,实现了在防止反编译的基础上提高了兼容性,防止程序出现崩溃的技术效果。为了能够更清楚地理解本专利技术的上述目的、特征和优点,下本文档来自技高网
...
一种保护Python程序的方法

【技术保护点】
一种保护Python程序的方法,其特征在于,所述方法包括:平行步骤和位于平行步骤之后的非平行步骤,其中,平行步骤包括:平行子步骤A:基于任意预设的操作码对应关系,在opcode.h中交换第一预设号操作码,然后再交换第二预设号操作码;平行子步骤B:修改opcode.py中的操作码,保持与预设的操作码对应关系一致;非平行步骤包括:步骤1:重新编译源码,获得新的python解释器。

【技术特征摘要】
1.一种保护Python程序的方法,其特征在于,所述方法包括:平行步骤和位于平行步骤之后的非平行步骤,其中,平行步骤包括:平行子步骤A:基于任意预设的操作码对应关系,在opcode.h中交换第一预设号操作码,然后再交换第二预设号操作码;平行子步骤B:修改opcode.py中的操作码,保持与预设的操作码对应关系一致;非平行步骤包括:步骤1:重新编译源码,获得新的python解释器。2.根据权利要求1所述的保护Python程序的方法,其特征在于,所述平行步骤还包括:修改import.c中定义的版本号为一个没有被使用的值。3.根据权利要求1所述的保护Python程序的方法,其特征在于,所述平行步骤还包括:修改import.c中的生成pyc文件的相关内容,使python解释器不能生成pyc文件。...

【专利技术属性】
技术研发人员:王影
申请(专利权)人:成都恒高科技有限公司
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1