CN104573425B - 一种基于对称算法和专用加载模块的Python程序模块加密方法 - Google Patents
一种基于对称算法和专用加载模块的Python程序模块加密方法 Download PDFInfo
- Publication number
- CN104573425B CN104573425B CN201410850871.2A CN201410850871A CN104573425B CN 104573425 B CN104573425 B CN 104573425B CN 201410850871 A CN201410850871 A CN 201410850871A CN 104573425 B CN104573425 B CN 104573425B
- Authority
- CN
- China
- Prior art keywords
- python
- module
- encryption
- key
- load
- 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
- 238000000034 method Methods 0.000 title claims abstract description 15
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001681 protective effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- 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
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Abstract
本发明公开了一种基于对称算法和专用加载模块的Python程序模块加密方法,其使用固定对称密钥加密Python程序模块,并在应用的主程序中,通过包含固定对称密钥的专用加载模块,在运行时加载、解密并运行所加密的模块,其中加密时使用的密钥要和专用加载模块中的密钥保持一致。本发明可以保护Python程序模块不被轻易反编译分析,从而保护Python所开发程序的知识产权。
Description
技术领域
本发明涉及一种网络安全技术,具体涉及一种Python程序模块的安全技术。
背景技术
随着Python语言的流行,不少应用开始采用Python来实现。但Python语言开发的程序模块(pyc、pyo),很容易被反编译出源代码。而且由于Python语言自身的特性,无法用类似Java、C#的混淆器对程序模块进行混淆,所以用Python开发的应用很难保护其源代码的知识产权。
现有的一些保护方法,要么影响开发(比如定制一个专用的Python解释器,开发和发布用不同),要么仅仅是将其打包成一个exe文件(如py2exe工具,但Python程序模块仍可以很容易地拿出并反编译),缺少一个方便易用的、防护性较强的代码保护方法。
发明内容
针对现有Python语言开发的程序模块在安全防护方面所存在的问题,本发明提供一种Python程序模块加密方法,可以在不影响开发的前提下,保护Python程序模块不被反编译。
为了达到上述目的,本发明采用如下的技术方案:
一种基于对称算法和专用加载模块的Python程序模块加密方法,所述加密方法使用固定对称密钥加密Python程序模块,并在应用的主程序中,通过包含固定对称密钥的专用加载模块,在运行时加载、解密并运行所加密的模块,其中加密时使用的密钥要和专用加载模块中的密钥保持一致。
优选的,所述加密方法具体包括如下步骤:
1)采用固定密钥和对称算法加密需要保护的Python程序模块;
2)基于步骤1)中的固定密钥和对称算法,形成一Python程序专用加载模块,来加载、解密所加密的Python程序模块;
3)应用启动时先加载专用加载模块;
4)应用发布时,只发布加密后的Python程序模块和应用的启动部分。
进一步的,所述步骤2)中形成的专用加载模块编译为Python扩展模块,并通过固定密钥和对称算法加密Python程序模块。
基于本发明提供的加密方法,除了应用的启动部分外,所有用Python写的业务逻辑程序模块,都可以用对称算法的加密得到保护,而且专用的加载模块也是C语言编译的Python扩展模块,从而保护这些程序模块不会轻易被反编译,从而保护应用的知识产权。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合实例,进一步阐述本发明。
本发明提供的Python程序模块加密方法,其基于对称算法和专用加载模块,使用固定对称密钥加密Python程序模块,并在应用的主程序中,通过包含固定对称密钥的专用加载模块,在运行时加载、解密并运行所加密的模块,其中加密时使用的密钥要和专用加载模块中的密钥保持一致。
基于上述原理,该Python程序模块加密方法具体通过如下步骤实现:
1)采用固定密钥和对称算法加密需要保护的Python程序模块。
2)基于步骤1)中的固定密钥和对称算法,形成一Python程序专用加载模块,来加载、解密所加密的Python程序模块。该专用加载模块具体编译为Python扩展模块,以此来保护密钥以及加密算法不被轻易反编译。
3)应用启动时先加载专用加载模块;
4)应用发布时,只发布加密后的Python程序模块和应用的启动部分。
以下通过一具体实例来进一步说明本发明的方案:
1)选择一种对称加密算法(如果RC4算法),并生成一个随机的对称密钥。
2)用步骤1)中生成的对称密钥和对称算法,对需要保护的Python的编译文件(pyc、pyo)加密,加密后的文件以.pye结尾。
3)用Python实现一个专用加载模块。具体为,实现Python中的一个finder(负责搜索并加载Python程序模块)对象,此对象可以在指定搜索路径中搜索以.pye结尾的加密Python程序模块,并可根据步骤1)中的对称密钥和对称算法对加密的Python程序模块解密。
4)将步骤3)中用Python实现的专用加载模块,用Cython工具转换生成C语言,并进一步编译生成为Python扩展模块,以保护其中定义的对称密钥和对称算法实现不被轻易地反编译。
5)在应用的启动部分,首先加载步骤4)中生成的Python扩展模块,并指定待搜索的加密Python程序模块的路径。
6)在应用发布时,只发布加密后的Python程序模块和应用的启动部分。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (1)
1.一种基于对称算法和专用加载模块的Python程序模块加密方法,其特征在于,所述加密方法使用固定对称密钥加密Python程序模块,并在应用的主程序中,通过包含固定对称密钥的专用加载模块,在运行时加载、解密并运行所加密的模块,其中加密时使用的密钥要和专用加载模块中的密钥保持一致;
所述加密方法具体包括如下步骤:
1)选择一种对称加密算法,并生成一个随机的对称密钥;
2)用步骤1)中生成的对称密钥和对称算法,对需要保护的Python的编译文件pyc、pyo加密,加密后的文件以.pye结尾;
3)用Python实现一个专用加载模块,具体为,实现Python中的一个负责搜索并加载Python程序模块对象,此对象可以在指定搜索路径中搜索以.pye结尾的加密Python程序模块,并可根据步骤1)中的对称密钥和对称算法对加密的Python程序模块解密;
4)将步骤3)中用Python实现的专用加载模块,用Cython工具转换生成C语言,并进一步编译生成为Python扩展模块,以保护其中定义的对称密钥和对称算法实现不被轻易地反编译;
5)在应用的启动部分,首先加载步骤4)中生成的Python扩展模块,并指定待搜索的加密Python程序模块的路径;
6)在应用发布时,只发布加密后的Python程序模块和应用的启动部分。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410850871.2A CN104573425B (zh) | 2014-12-31 | 2014-12-31 | 一种基于对称算法和专用加载模块的Python程序模块加密方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410850871.2A CN104573425B (zh) | 2014-12-31 | 2014-12-31 | 一种基于对称算法和专用加载模块的Python程序模块加密方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104573425A CN104573425A (zh) | 2015-04-29 |
CN104573425B true CN104573425B (zh) | 2018-01-30 |
Family
ID=53089468
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410850871.2A Active CN104573425B (zh) | 2014-12-31 | 2014-12-31 | 一种基于对称算法和专用加载模块的Python程序模块加密方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104573425B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105574368B (zh) * | 2015-12-10 | 2018-05-04 | 华青融天(北京)技术股份有限公司 | 一种Python程序模块的安全调用方法和装置 |
CN106599628B (zh) * | 2016-12-08 | 2019-04-02 | 合肥康捷信息科技有限公司 | 一种基于模块钩子的Python字节码文件保护方法 |
CN107808101B (zh) * | 2017-11-06 | 2020-11-06 | 上海金途信息科技有限公司 | 一种通过加密Python明文源码token的知识产权保护系统 |
CN108363911B (zh) * | 2018-02-11 | 2021-10-29 | 西安四叶草信息技术有限公司 | 一种Python脚本混淆、水印的方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101419652A (zh) * | 2008-08-22 | 2009-04-29 | 航天信息股份有限公司 | 一种软硬件结合的保护程序的方法 |
CN103745141A (zh) * | 2013-12-02 | 2014-04-23 | 上海斐讯数据通信技术有限公司 | 智能终端android系统中防止应用程序反编译的方法 |
CN103761457A (zh) * | 2013-12-27 | 2014-04-30 | 华为技术有限公司 | 一种软件保护方法、装置及系统 |
CN103761456A (zh) * | 2013-10-12 | 2014-04-30 | 利尔达科技集团股份有限公司 | 一种单片机核心代码防破解的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102007045743A1 (de) * | 2007-09-25 | 2009-04-02 | Siemens Ag | Verfahren und System zum Schutz gegen einen Zugriff auf einen Maschinencode eines Gerätes |
-
2014
- 2014-12-31 CN CN201410850871.2A patent/CN104573425B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101419652A (zh) * | 2008-08-22 | 2009-04-29 | 航天信息股份有限公司 | 一种软硬件结合的保护程序的方法 |
CN103761456A (zh) * | 2013-10-12 | 2014-04-30 | 利尔达科技集团股份有限公司 | 一种单片机核心代码防破解的方法 |
CN103745141A (zh) * | 2013-12-02 | 2014-04-23 | 上海斐讯数据通信技术有限公司 | 智能终端android系统中防止应用程序反编译的方法 |
CN103761457A (zh) * | 2013-12-27 | 2014-04-30 | 华为技术有限公司 | 一种软件保护方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104573425A (zh) | 2015-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104573425B (zh) | 一种基于对称算法和专用加载模块的Python程序模块加密方法 | |
CN105426708B (zh) | 一种Android系统的应用程序的加固方法 | |
CN102890758B (zh) | 一种保护可执行文件的方法及系统 | |
CN106203128B (zh) | 网页数据加解密方法、装置和系统 | |
US9100170B2 (en) | File packing and unpacking method, and device thereof | |
CN107977553A (zh) | 移动应用程序的安全加固的方法及装置 | |
BR112015026372B8 (pt) | Dispositivo de comunicação que reforça a segurança para um arquivo armazenado em uma unidade virtual | |
US20120144208A1 (en) | Indexed table based code encrypting/decrypting device and method thereof | |
GB201215241D0 (en) | Protecting application programs from malicious software or malware | |
RU2018141237A (ru) | Использование аппаратно-обеспечиваемой защищенной изолированной области для предотвращения пиратства и мошенничества в электронных устройствах | |
CN104268444A (zh) | 一种云OS Java源代码保护方法 | |
GB2509422A (en) | Decryption and encryption of application data | |
JP2010140473A5 (zh) | ||
BRPI0908621A2 (pt) | método de criptografia de um item de dados que tem um identificador para identificar o item de dados, método de descriptografia de um item de dados criptografado, produto de programa de computador, sistema de computação, método de gestão de direitos digitais drm | |
CN105426777A (zh) | 一种动态链接库文件加密、解密方法及装置 | |
AR088823A1 (es) | Aparato de procesamiento de informacion, aparato de almacenamiento de informacion, sistema de procesamiento de informacion, metodo de procesamiento de informacion y programa | |
PH12018500929A1 (en) | Method and system for generating ciphertext by pin entry device | |
CN104657635A (zh) | 一种应用处理方法、装置和服务器 | |
CN103595524B (zh) | 一种基于流密码的丢位加密-补位解密的加解密方法 | |
CN104504310A (zh) | 基于壳技术的软件保护方法和装置 | |
CN105335666A (zh) | 一种防止电子文档外泄的方法 | |
WO2011111981A3 (ko) | 데이터 자동 암복호화 방법 및 장치 | |
CN106650342B (zh) | 一种Jar包加固方法及系统 | |
WO2015188202A3 (en) | Point-to-point secure data store and communication system and method | |
Kim et al. | Robust anti reverse engineering technique for protecting android applications using the aes algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 200436 Room 601, Lane 299, Lane 299, JIANGCHANG West Road, Jingan District, Shanghai Patentee after: Geer software Limited by Share Ltd Address before: 200070 B, 501E, 199 JIANGCHANG West Road, Zhabei District, Shanghai. Patentee before: Geer Software Co., Ltd., Shanghai |
|
CP03 | Change of name, title or address |