CN111240654B - 一种Python代码加固保护的方法及其系统 - Google Patents
一种Python代码加固保护的方法及其系统 Download PDFInfo
- Publication number
- CN111240654B CN111240654B CN202010004234.9A CN202010004234A CN111240654B CN 111240654 B CN111240654 B CN 111240654B CN 202010004234 A CN202010004234 A CN 202010004234A CN 111240654 B CN111240654 B CN 111240654B
- Authority
- CN
- China
- Prior art keywords
- source code
- entry function
- python
- file
- decryption
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000002787 reinforcement Effects 0.000 title claims abstract description 45
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000004422 calculation algorithm Methods 0.000 claims description 57
- 230000006835 compression Effects 0.000 claims description 11
- 238000007906 compression Methods 0.000 claims description 11
- 238000005516 engineering process Methods 0.000 claims description 7
- 230000006837 decompression Effects 0.000 claims description 6
- 230000008676 import Effects 0.000 claims description 5
- 238000011161 development Methods 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 91
- 230000002441 reversible effect Effects 0.000 description 9
- 238000005336 cracking Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000004806 packaging method and process Methods 0.000 description 4
- OTZZZISTDGMMMX-UHFFFAOYSA-N 2-(3,5-dimethylpyrazol-1-yl)-n,n-bis[2-(3,5-dimethylpyrazol-1-yl)ethyl]ethanamine Chemical compound N1=C(C)C=C(C)N1CCN(CCN1C(=CC(C)=N1)C)CCN1C(C)=CC(C)=N1 OTZZZISTDGMMMX-UHFFFAOYSA-N 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000002427 irreversible effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000007596 consolidation process Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012858 packaging process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000003014 reinforcing effect Effects 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Abstract
本发明提供了一种Python代码加固保护的方法,所述方法为:步骤S1、对目录内的每个Python源代码文件进行解析;解析后进行混淆操作,然后对全文件进行压缩,再进行加密操作;步骤S2、根据用户设定的入口函数,添加一份新的可运行加密文件的新入口函数的Python源码,添加新入口函数的Python源码能使程序找到正确的解密途径,在运行时正常解密并执行;步骤S3、开发解密模块,所述解密模块用于在程序运行时并对加密的Python源代码文件进行解密,并根据新入口函数的Python源码将解密后的文件重新导入程序中进行运行;本发明只需指定源码路径和程序入口函数以及添加解密模块即可进行加固,极大地减少开发成本。
Description
技术领域
本发明涉及计算机编程技术领域,特别是一种Python代码加固保护的方法及其系统。
背景技术
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
目前使用Python语言编写而成的程序,在未打包的情况下会编译成pyc后缀的文件和带界面代码的pyw后缀的文件,以及优化后的pyo后缀的文件。直接使用文本编辑器查看这些文件并不会看到源码,但是经过简单的反编译,即可看到源码,使Python程序在商业用途上无法保护自身权益。
外界针对Python代码的加固保护通常采用以下方式:
1.使用C语言或者可以生成本地二进制的语言来编写关键的需要保护的代码,将其编译成pyd后缀的文件,作为Python调用的扩展来使用。
该方案虽然是较佳的Python代码保护方式,但是在开发环节中需要耗费人工针对不同项目的不同业务的核心代码进行移植,增加了额外的开发成本。且该方式仅保护了核心的代码,并非完全保护。
2.使用现有的打包工具对python代码进行编译并打包,在打包的同时对代码进行加密,并将密钥和解密算法单独编译成pyc文件。
该方案虽然简化了加固流程,无需针对不同的项目和业务代码进行特殊处理,通用性良好,但是将含有秘钥和解密算法的pyc文件并未被有效加固,所以可以被反编译后获得解密算法,从而得到被加固的源代码,不能有效保护程序。
本发明涉及的技术术语解释:
发明内容
为了解决上述问题:即繁琐的加固流程和过高的开发成本,而简便的通用加固方案并不能有效防护代码,本发明提供一种Python代码加固保护的方法。
本发明采用以下方案实现:一种Python代码加固保护的方法,所述方法包括如下步骤:步骤S1、对目录内的每个Python源代码文件进行解析;解析后进行混淆操作,然后对全文件进行压缩,再进行加密操作;
步骤S2、根据用户设定的入口函数,添加一份新的可运行加密文件的新入口函数的Python源码,添加新入口函数的Python源码能使程序找到正确的解密途径,在运行时正常解密并执行;
步骤S3、开发解密模块,所述解密模块用于在程序运行时并对加密的Python源代码文件进行解密,并根据新入口函数的Python源码将解密后的文件重新导入程序中进行运行。
进一步的,所述步骤S1中进一步具体为:对目录内的每个Python源代码文件进行解析;当解析获取到类、函数、全局变量、局部变量的名称字符串,则将名称字符串替换成随机乱序,或者无意义的字符,或由用户设定的字符进行混淆操作;当解析到常量字符串时,对每个字符串使用简单异或,或者取反,或者通过加密算法进行加密操作;当解析到常量浮点值或常量整型数值时,对其进行单次或多次数学运算操作。
进一步的,混淆操作后,针对每个Python源代码的内容进行压缩,最后对压缩后的数据进行简单异或,或者取反,或者通过加密算法进行加密操作。
进一步的,所述步骤S2中进一步具体为:根据用户设定的入口函数,创建一个新入口函数的Python源码,Python源码内容仅调用了入口函数,Python源码实现了导入带有解密算法的二进制文件,以及加密后的含有入口函数的源代码文件,在程序运行时,将首先运行新入口函数的Python源码,之后执行解密算法,再执行解密后的用户设定的入口函数,从而正常运行程序。
进一步的,所述步骤S3中进一步具体为:查找入口函数并遍历当前需要进行解密的Python源代码,找到后对加密的Python源代码进行解密,即编写与加固应用中加密算法对应的解密算法代码;之后对解密后的文件进行解压缩,即编写与加固应用中压缩算法对应的解压算法代码;添加对解密后的源代码进行导入到新入口函数,新入口函数的Python源码能使程序找到正确的解密途径,并执行解密后的源代码。
进一步的,所述方法还包括对解密模块进行加壳操作,所述加壳操作具体为:先编译解密模块,然后采用加壳技术对解密模块自身进行保护,或者对解密模块内部编写解密代码,而后再编写对解密模块加壳的应用进行保护。
本发明还提供了一种Python代码加固保护的系统,所述系统包括混淆模块、设置新入口函数模块、以及解密模块;
所述混淆模块,对目录内的每个Python源代码文件进行解析;解析后进行混淆操作,然后对全文件进行压缩,再进行加密操作;
所述置新入口函数模块,根据用户设定的入口函数,添加一份新的可运行加密文件的新入口函数的Python源码,添加新入口函数的Python源码能使程序找到正确的解密途径,在运行时正常解密并执行;
所述解密模块用于在程序运行时并对加密的Python源代码文件进行解密,并根据新入口函数的Python源码将解密后的文件重新导入程序中进行运行。
进一步的,所述混淆模块进一步具体为:对目录内的每个Python源代码文件进行解析;当解析获取到类、函数、全局变量、局部变量的名称字符串,则将名称字符串替换成随机乱序,或者无意义的字符,或由用户设定的字符进行混淆操作;当解析到常量字符串时,对每个字符串使用简单异或,或者取反,或者通过加密算法进行加密操作;当解析到常量浮点值或常量整型数值时,对其进行单次或多次数学运算操作。
进一步的,混淆操作后,针对每个Python源代码的内容进行压缩,最后对压缩后的数据进行简单异或,或者取反,或者通过加密算法进行加密操作。
进一步的,所述设置新入口函数模块进一步具体为:根据用户设定的入口函数,创建一个新入口函数的Python源码,Python源码内容仅调用了入口函数,Python源码实现了导入带有解密算法的二进制文件,以及加密后的含有入口函数的源代码文件,在程序运行时,将首先运行新入口函数的Python源码,之后执行解密算法,再执行解密后的用户设定的入口函数,从而正常运行程序。
进一步的,所述解密模块进一步具体为:查找入口函数并遍历当前需要进行解密的Python源代码,找到后对加密的Python源代码进行解密,即编写与加固应用中加密算法对应的解密算法代码;之后对解密后的文件进行解压缩,即编写与加固应用中压缩算法对应的解压算法代码;添加对解密后的源代码进行导入到新入口函数,新入口函数的Python源码能使程序找到正确的解密途径,并执行解密后的源代码。
进一步的,所述系统还能对解密模块进行加壳操作,所述加壳操作具体为:先编译解密模块,然后采用加壳技术对解密模块自身进行保护,或者对解密模块内部编写解密代码,而后再编写对解密模块加壳的应用进行保护。
本发明的有益效果在于:本专利在实际项目操作中得到了很好实践检验,对Python语言编写的源代码均有保护效果,保护后的代码经过编译打包均可在包含但不限于Mac,Linux,Windows操作系统上运行。
本专利应用于Python程序中,能有效抵御现有的逆向应用的静态分析,其不可逆的混淆代码有效保护开发者原先对代码命名和编写的意图,为破解增加难度。其加密步骤能保护源代码不被逆向人员轻易修改,而解密模块能保证程序的正常运行。
本发明采用对源代码加固,外界现有的针对编译后的文件进行逆向的应用,如反编译器,无法达到还原出源码的目的,也因此不会对后续的编译打包操作造成影响。
本发明通用的无关项目业务代码逻辑的加固方式使本专利应用广泛,在实际应用中只需指定源码路径和程序入口函数以及添加解密模块即可进行加固,极大地减少开发成本。
附图说明
图1是本发明的方法流程示意图。
图2是本发明加固前后程序内部运行状态流程图。
图3是本发明的系统框图。
图4是本发明一实施例的处理流程示意图。
图5是本发明一实施例的源代码加固保护前后示意图。
具体实施方式
下面结合附图对本发明做进一步说明。
本发明需要编写一个对目录内的Python源代码文件格式进行解析,然后对每个Python源代码中的名称字符,常量字符串,数值数据进行混淆,再进行压缩加密的应用。还要编写一个对加密后的文件进行解密解压缩的代码并将其编译,后续由保护程序运行时进行加载。
具体分3个阶段:
首先是开发加固应用,主要功能是对目录内的每个Python源代码文件进行解析;然后先进行混淆操作,然后对全文件进行压缩,然后再进行加密;混淆操作可以使加固后的文件即使被破解依然可以得到保护,增大还原源代码的难度。
之后根据用户指定的入口函数,添加一份新的可运行加密文件的新入口函数的Python源码。添加入口函数源码可以使程序找到正确的解密途径,在运行时正常解密并执行。
接下来是开发解密模块,主要功能是在程序运行时对加密的文件进行解密,然后将其重新导入程序中进行运行。
请参阅图1和图2所示,本发明的一种Python代码加固保护的方法,所述方法包括如下步骤:步骤S1、对目录内的每个Python源代码文件进行解析;解析后进行混淆操作,然后对全文件进行压缩,再进行加密操作;
步骤S2、根据用户设定的入口函数,添加一份新的可运行加密文件的新入口函数的Python源码,添加新入口函数的Python源码能使程序找到正确的解密途径,在运行时正常解密并执行;
步骤S3、开发解密模块,所述解密模块用于在程序运行时并对加密的Python源代码文件进行解密,并根据新入口函数的Python源码将解密后的文件重新导入程序中进行运行。
本发明具体实现方式为:1.编写加固应用
应用首先需要用户指定源码路径,这样可以根据源码路径遍历出源码文件,逐个进行解析,之后进行混淆操作,再全文压缩加密。
1.1混淆类和函数和变量名
针对每个Python源代码进行解析,获取类,函数,全局变量,局部变量的名称字符串,并将其原来可以被人类理解的名称替换成随机乱序,或者无意义的字符,或由用户指定的字符。
该步骤由于使用采用不可逆的操作,能防止逆向应用对代码破解后进行还原。同时因为使用将原名称进行无意义化,即混淆操作,能使逆向工具在显示该段代码时其类名,函数名,全局变量名,局部变量名无法被直观理解,为破解带来难度。
1.2加密字符串,数值
针对每个Python源代码进行解析,当识别到常量字符串时,对每个字符串可以使用简单异或,或者取反等自定义的加密算法,也可以使用公开的现有技术,如AES,DES,TDEA,RC5等高级对称加密算法进行加密或者多次加密。
当识别到常量浮点值或常量整型数值时,可以对其进行单次或多次数学运算,如进行加减乘除等计算后的结果,但是最终值不变(如原先是a=10(式子把值显示出来);现对其进行数学运算变成a=5+5,(这样最终值=10不变))。而不是直接将数值显示在源代码中。当识别到布尔值时,可以对其进行反转操作。
该步骤能使逆向应用无法通过输入关键字符搜索到特定名称,从而定位要修改的类或函数代码的位置。对常量数值进行计算,可以使数值内容难以理解,不会被轻易修改。
1.3压缩和加密源代码
针对每个Python源代码的内容进行压缩,可使用公开的现有技术,如zip,7z,lz4,rar等压缩算法进行压缩。最后对压缩后的数据进行简单异或,或者取反等自定义的加密算法,也可以使用公开的现有技术,如AES,DES,TDEA,RC5等高级对称加密算法进行加密或者多次加密。
该加密步骤能使逆向应用无法在解密算法二进制文件的情况下分析出源代码文件的数据内容,而对文件的压缩步骤会减少程序安装包的尺寸和加快解密速度。
2添加新的入口文件
根据用户指定入口函数,创建一个新的Python源码,源码内容仅调用了入口函数而不暴露其他代码。该源码主要实现了导入带有解密算法的二进制文件,以及加密后的含有新入口函数的源代码文件,并在主入口内调用该新入口函数。
该步骤可以使后续程序编译,打包会将加密后的源代码和带有解密算法的二进制文件一起打包。在程序运行时,将首先运行新入口函数,之后执行解密算法,再执行解密后的入口函数(即用户指定入口函数),从而正常运行程序。添加新入口之后的程序内部运行状态如图2所示。
3开发解密模块
解密模块由其他可以生成本地二进制文件的语言进行编写,主要功能是在程序运行时对加密的文件进行解密,并重新导入程序中,以达到程序能正常运行的目的。
3.1解密和解压缩源代码
查找入口函数并遍历当前需要导入的源代码模块,找到后对该源代码模块的文件进行解密,即编写与加固应用中加密算法对应的解密算法代码。
之后对解密后的文件进行解压缩,即编写与加固应用中压缩算法对应的解压算法代码。
该步骤能使程序在运行过程中还原出可执行的源代码。
3.2添加导入执行代码
添加对解密后的源代码进行导入到新入口函数,新入口函数的Python源码能使程序找到正确的解密途径,并执行真正的入口函数(即用户指定入口函数)和代码。
该步骤能使程序能正常执行解密后的源代码。
3.3对解密模块进行加壳
先编译解密模块,然后采用现有的成熟的加壳方案,如虚拟加固,压缩壳技术等进行对模块自身进行保护。也可以使用另一种加壳方案即对模块内部编写解密代码,而后再编写对模块加壳的应用进行保护。
该步骤能使解密模块自身得到有效保护,是破解者难以得到解密算法。
如图3所示,本发明还提供了一种Python代码加固保护的系统,所述系统包括混淆模块、设置新入口函数模块、以及解密模块;
所述混淆模块,对目录内的每个Python源代码文件进行解析;解析后进行混淆操作,然后对全文件进行压缩,再进行加密操作;
所述置新入口函数模块,根据用户设定的入口函数,添加一份新的可运行加密文件的新入口函数的Python源码,添加新入口函数的Python源码能使程序找到正确的解密途径,在运行时正常解密并执行;
所述解密模块用于在程序运行时并对加密的Python源代码文件进行解密,并根据新入口函数的Python源码将解密后的文件重新导入程序中进行运行。
其中,所述混淆模块进一步具体为:对目录内的每个Python源代码文件进行解析;当解析获取到类、函数、全局变量、局部变量的名称字符串,则将名称字符串替换成随机乱序,或者无意义的字符,或由用户设定的字符进行混淆操作;当解析到常量字符串时,对每个字符串使用简单异或,或者取反,或者通过加密算法进行加密操作;当解析到常量浮点值或常量整型数值时,对其进行单次或多次数学运算操作。
混淆操作后,针对每个Python源代码的内容进行压缩,最后对压缩后的数据进行简单异或,或者取反,或者通过加密算法进行加密操作。
所述设置新入口函数模块进一步具体为:根据用户设定的入口函数,创建一个新入口函数的Python源码,Python源码内容仅调用了入口函数,Python源码实现了导入带有解密算法的二进制文件,以及加密后的含有入口函数的源代码文件,在程序运行时,将首先运行新入口函数的Python源码,之后执行解密算法,再执行解密后的用户设定的入口函数,从而正常运行程序。
另外,所述解密模块进一步具体为:查找入口函数并遍历当前需要进行解密的Python源代码,找到后对加密的Python源代码进行解密,即编写与加固应用中加密算法对应的解密算法代码;之后对解密后的文件进行解压缩,即编写与加固应用中压缩算法对应的解压算法代码;添加对解密后的源代码进行导入到新入口函数,新入口函数的Python源码能使程序找到正确的解密途径,并执行解密后的源代码。
所述系统还能对解密模块进行加壳操作,所述加壳操作具体为:先编译解密模块,然后采用加壳技术(如虚拟加固,压缩壳技术)对解密模块自身进行保护,或者对解密模块内部编写解密代码,而后再编写对解密模块加壳的应用进行保护。
下面结合一具体实施例对本发明作进一步说明:
请参阅图4和图5所示,该实施例方案针对Python语言编写的程序源代码进行加固。
首先编写加固应用,其允许用户传入项目源代码的路径,以及项目的入口函数。应用内部将先根据项目源代码的路径遍历出所有的源代码文件,然后将每个源代码文件的代码进行解析,对其中的类名,函数名,全局变量和局部变量名进行混淆,对其中的常量字符串和数值类型的值进行运算加密。最后对每个源代码文件进行压缩和加密。
然后针对用户传入的项目入口函数,编写新的入口函数Python源码,源码增加了导入解密模块和新入口函数,该新入口函数将先执行解密再执行用户传入的项目入口函数。以达到程序能正常运行的目的。
最后编写解密模块的代码,查找入口函数所调用的Python源代码,将Python源代码进行解压缩解密,之后导入Python中进行执行,在执行的过程中还会遇到其他需要调用的Python源代码,针对未解密的源代码进行解压缩解密再次导入Python执行。之后对解密模块的代码进行编译和加壳。
具体应用时,加固应用会根据用户传入的项目源代码的路径将解密模块添加到项目中。
在应用的场景中,用户指定项目源代路径和程序入口函数,然后将项目源代码文件经过加固应用生成加固后的源代码文件,以及新入口函数的源码文件。之后将解密模块根据当前Python的版本和操作系统进行编译,添加到项目中。最后对项目进行编译和打包即可生成可以正常运行的可执行程序。整个过程如图4所示。源代码加固保护前后效果如图5所示。
而逆向应用因源代码文件并非是编译后的字节码,因此反编译失败,而去逆向解密模块又因为是加壳而阻碍。即使破解人员解密了源代码文件,又因为源代码已经被不可逆的混淆了名称以及字符串和数值,无法被人轻易理解而带来破解上的难度,大大增加了破解成本,有效保护开发者和企业的相关权益。
在实际应用时,因加固要求的操作步骤比较简单,只需指定源码路径和程序入口函数以及添加解密模块即可进行加固。因此大大降低用户对加固应用的学习成本,提高用户对加固应用的体验,降低用户的开发成本。
总之,本发明对Python代码的加固保护采用了在python源代码编译前进行加固,并封装了入口函数。这样既不会影响后续编译和打包流程也具有通用性,也可使加固和项目业务分开,减少人工成本。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (6)
1.一种Python代码加固保护的方法,其特征在于:所述方法包括如下步骤:步骤S1、对目录内的每个Python源代码文件进行解析;解析后进行混淆操作,然后对全文件进行压缩,再进行加密操作;所述步骤S1中进一步具体为:对目录内的每个Python源代码文件进行解析;当解析获取到类、函数、全局变量、局部变量的名称字符串,则将名称字符串替换成随机乱序,或者无意义的字符,或由用户设定的字符进行混淆操作;当解析到常量字符串时,对每个字符串使用简单异或,或者取反,或者通过加密算法进行加密操作;当解析到常量浮点值或常量整型数值时,对其进行单次或多次数学运算操作;
步骤S2、根据用户设定的入口函数,添加一份新的可运行加密文件的新入口函数的Python源码,添加新入口函数的Python源码能使程序找到正确的解密途径,在运行时正常解密并执行;所述步骤S2中进一步具体为:根据用户设定的入口函数,创建一个新入口函数的Python源码,Python源码内容仅调用了入口函数,Python源码实现了导入带有解密算法的二进制文件,以及加密后的含有入口函数的源代码文件,在程序运行时,将首先运行新入口函数的Python源码,之后执行解密算法,再执行解密后的用户设定的入口函数,从而正常运行程序;
步骤S3、开发解密模块,所述解密模块用于在程序运行时并对加密的Python源代码文件进行解密,并根据新入口函数的Python源码将解密后的文件重新导入程序中进行运行;所述步骤S3中进一步具体为:查找入口函数并遍历当前需要进行解密的Python源代码,找到后对加密的Python源代码进行解密,即编写与加固应用中加密算法对应的解密算法代码;之后对解密后的文件进行解压缩,即编写与加固应用中压缩算法对应的解压算法代码;添加对解密后的源代码进行导入到新入口函数,新入口函数的Python源码能使程序找到正确的解密途径,并执行解密后的源代码。
2.根据权利要求1所述的一种Python代码加固保护的方法,其特征在于:混淆操作后,针对每个Python源代码的内容进行压缩,最后对压缩后的数据进行简单异或,或者取反,或者通过加密算法进行加密操作。
3.根据权利要求1所述的一种Python代码加固保护的方法,其特征在于:所述方法还包括对解密模块进行加壳操作,所述加壳操作具体为:先编译解密模块,然后采用加壳技术对解密模块自身进行保护,或者对解密模块内部编写解密代码,而后再编写对解密模块加壳的应用进行保护。
4.一种Python代码加固保护的系统,其特征在于:所述系统包括混淆模块、设置新入口函数模块、以及解密模块;
所述混淆模块,对目录内的每个Python源代码文件进行解析;解析后进行混淆操作,然后对全文件进行压缩,再进行加密操作;所述混淆模块进一步具体为:对目录内的每个Python源代码文件进行解析;当解析获取到类、函数、全局变量、局部变量的名称字符串,则将名称字符串替换成随机乱序,或者无意义的字符,或由用户设定的字符进行混淆操作;当解析到常量字符串时,对每个字符串使用简单异或,或者取反,或者通过加密算法进行加密操作;当解析到常量浮点值或常量整型数值时,对其进行单次或多次数学运算操作;
所述置新入口函数模块,根据用户设定的入口函数,添加一份新的可运行加密文件的新入口函数的Python源码,添加新入口函数的Python源码能使程序找到正确的解密途径,在运行时正常解密并执行;所述设置新入口函数模块进一步具体为:根据用户设定的入口函数,创建一个新入口函数的Python源码,Python源码内容仅调用了入口函数,Python源码实现了导入带有解密算法的二进制文件,以及加密后的含有入口函数的源代码文件,在程序运行时,将首先运行新入口函数的Python源码,之后执行解密算法,再执行解密后的用户设定的入口函数,从而正常运行程序;
所述解密模块用于在程序运行时并对加密的Python源代码文件进行解密,并根据新入口函数的Python源码将解密后的文件重新导入程序中进行运行;所述解密模块进一步具体为:查找入口函数并遍历当前需要进行解密的Python源代码,找到后对加密的Python源代码进行解密,即编写与加固应用中加密算法对应的解密算法代码;之后对解密后的文件进行解压缩,即编写与加固应用中压缩算法对应的解压算法代码;添加对解密后的源代码进行导入到新入口函数,新入口函数的Python源码能使程序找到正确的解密途径,并执行解密后的源代码。
5.根据权利要求4所述的一种Python代码加固保护的系统,其特征在于:混淆操作后,针对每个Python源代码的内容进行压缩,最后对压缩后的数据进行简单异或,或者取反,或者通过加密算法进行加密操作。
6.根据权利要求4所述的一种Python代码加固保护的系统,其特征在于:所述系统还能对解密模块进行加壳操作,所述加壳操作具体为:先编译解密模块,然后采用加壳技术对解密模块自身进行保护,或者对解密模块内部编写解密代码,而后再编写对解密模块加壳的应用进行保护。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010004234.9A CN111240654B (zh) | 2020-01-03 | 2020-01-03 | 一种Python代码加固保护的方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010004234.9A CN111240654B (zh) | 2020-01-03 | 2020-01-03 | 一种Python代码加固保护的方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111240654A CN111240654A (zh) | 2020-06-05 |
CN111240654B true CN111240654B (zh) | 2023-03-14 |
Family
ID=70875967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010004234.9A Active CN111240654B (zh) | 2020-01-03 | 2020-01-03 | 一种Python代码加固保护的方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111240654B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111914225B (zh) * | 2020-07-15 | 2024-03-19 | 广东电网有限责任公司 | 一种源代码保护系统及源代码加密方法 |
CN112329033A (zh) * | 2020-10-30 | 2021-02-05 | 上海钐昆网络科技有限公司 | 一种数据加密方法、装置、设备及存储介质 |
CN113360859B (zh) * | 2021-05-28 | 2022-08-09 | 湖南大学 | 基于Python解释器的加密文件安全控制方法和装置 |
CN113591040B (zh) * | 2021-06-23 | 2023-10-24 | 北京百度网讯科技有限公司 | 加密方法及其装置、解密方法及其装置、电子设备和介质 |
CN114154123B (zh) * | 2022-02-09 | 2022-05-17 | 北京天防安全科技有限公司 | 应用于Python项目的加密保护方法 |
CN117150563B (zh) * | 2023-10-27 | 2024-02-20 | 国建大数据科技(辽宁)有限公司 | 一种软件开发数据加密保护方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106980504A (zh) * | 2017-03-28 | 2017-07-25 | 腾讯科技(深圳)有限公司 | 一种应用程序开发方法及其工具、设备 |
CN108363911A (zh) * | 2018-02-11 | 2018-08-03 | 西安四叶草信息技术有限公司 | 一种Python脚本混淆、水印的方法及装置 |
CN109960526A (zh) * | 2017-12-22 | 2019-07-02 | 航天信息股份有限公司 | 一种应用程序打包方法及装置 |
CN110633073A (zh) * | 2019-09-17 | 2019-12-31 | 福建天晴在线互动科技有限公司 | 基于Il2cpp编译的Unity代码混淆的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6931634B2 (en) * | 2000-12-21 | 2005-08-16 | Silicon Metrics Corporation | Encrypted compiler |
-
2020
- 2020-01-03 CN CN202010004234.9A patent/CN111240654B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106980504A (zh) * | 2017-03-28 | 2017-07-25 | 腾讯科技(深圳)有限公司 | 一种应用程序开发方法及其工具、设备 |
CN109960526A (zh) * | 2017-12-22 | 2019-07-02 | 航天信息股份有限公司 | 一种应用程序打包方法及装置 |
CN108363911A (zh) * | 2018-02-11 | 2018-08-03 | 西安四叶草信息技术有限公司 | 一种Python脚本混淆、水印的方法及装置 |
CN110633073A (zh) * | 2019-09-17 | 2019-12-31 | 福建天晴在线互动科技有限公司 | 基于Il2cpp编译的Unity代码混淆的方法 |
Non-Patent Citations (1)
Title |
---|
基于符号执行的Python攻击脚本分析平台;邱洋,王轶骏,薛质;《计算机工程》;20161130;第42卷(第11期);第1-8页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111240654A (zh) | 2020-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111240654B (zh) | 一种Python代码加固保护的方法及其系统 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
US7263722B1 (en) | Obfuscation of executable code | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
US8090959B2 (en) | Method and apparatus for protecting .net programs | |
CN110929234B (zh) | 一种基于代码虚拟化的Python程序加密保护系统与方法 | |
CN107273723B (zh) | 一种基于so文件加壳的Android平台应用软件保护方法 | |
JP2004038966A (ja) | セキュアな変数データ保護を提供するセキュアで不明瞭なタイプライブラリ | |
CN110598379B (zh) | 一种实现字符串混淆的方法、设备及存储介质 | |
CN105022936A (zh) | 一种类class文件加密解密方法和装置 | |
CN103218549A (zh) | 一种Java源代码加解密的方法及装置 | |
KR101861341B1 (ko) | 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 | |
CN106228041B (zh) | 一种针对Android预编译的代码保护方法 | |
CN107291485B (zh) | 动态链接库的加固方法、运行方法、加固装置和安全系统 | |
US20220360442A1 (en) | On demand code decryption | |
CN103413074B (zh) | 一种通过api实现软件保护的方法和装置 | |
CN114547558B (zh) | 授权方法、授权控制方法及装置、设备和介质 | |
CN110633073B (zh) | 基于Il2cpp编译的Unity代码混淆的方法 | |
KR20180015535A (ko) | 안드로이드 어플리케이션 패키지(apk) 내 dex 파일의 부분 암호화를 이용한 안드로이드 어플리케이션의 난독화 방법 | |
CN107871066B (zh) | 基于安卓系统的代码编译方法及装置 | |
Graux et al. | Obfuscated android application development | |
CN107257282A (zh) | 一种基于rc4算法的代码全包加密方法 | |
CN114416097A (zh) | 应用程序加固方法、系统、设备及存储介质 | |
CN112052461A (zh) | 一种基于指令注入的代码处理方法、终端及存储介质 | |
CN114444028A (zh) | 提升代码安全性的方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |