CN111523120A - 一种 Python 源码安全防护的实现方法及系统 - Google Patents
一种 Python 源码安全防护的实现方法及系统 Download PDFInfo
- Publication number
- CN111523120A CN111523120A CN202010367799.3A CN202010367799A CN111523120A CN 111523120 A CN111523120 A CN 111523120A CN 202010367799 A CN202010367799 A CN 202010367799A CN 111523120 A CN111523120 A CN 111523120A
- Authority
- CN
- China
- Prior art keywords
- python
- source code
- file
- interpreter
- zxx
- 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.)
- Pending
Links
Images
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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- 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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Bioethics (AREA)
- Virology (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种Python源码安全防护的实现方法及系统,包括如下步骤:S01.对Python源代码文件的内容进行加密;S02.修改Python解释器源码,获得修改后的Python解释器源码;S03.重新编译修改后的Python解释器源码得到Python二进制文件,并对Python二进制文件进行加壳保护,获得加壳的Python解释器;S04.使用加壳的Python解释器执行加密后的Python源代码程序,本发明在Python源代码文件加密的基础上,通过对编译后的Python解释器加壳,将Python源代码安全提升到了二进制文件安全,本发明解决了现有技术中Python源代码文件安全性较低的问题,增加了Python源代码的破译难度,加强了Python源代码安全。
Description
技术领域
本发明涉及网络安全技术领域,具体的说是一种Python源码安全防护的实现方法及系统。
背景技术
Python编程语言作为当下编程最为流行的计算机语言,自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程,越来越多人的开始使用 Python,在各个领域都能看到Python的身影。Python属于脚本(解释性)语言,即编写的Python 代码最终是由Python解释器来解释执行,其Python代码文件(.py)本质上跟文本文件没有什么区别,使用任意的文本编辑器都可以打开.py文件并查看其源代码。在一些商业场景下,我们其实并不想暴露源代码,因此需要使用一些技术手段来保护我们Python源码的安全。
目前常用的Python源码保护方案大概有以下几种:
1.Python源码混淆:通过将py源码中的变量名、类名、函数名等重命名为一些无意义的名字、源码中插入一些无意义的垃圾代码以实现保护的目的,但其本质上并未对源码进行保护,通过一些方法可以将重命名的无意义的变量名、类名、函数名等再次重命名回有意义的名字。
2.使用打包工具(py2exe、pyinstaller)直接打包成exe可执行文件:通过使用第三方打包工具,将py文件打包成exe可执行文件以实现保护的目的。但通常这些打包工具都是开源的,可以通过阅读打包工具源码来了解其打包的过程,最后按照相反的规程解包即可。
3.将py文件转换为so文件:通过将py文件转换成动态链接库so文件以实现保护的目的,但该方法不适用于较大的工程,且转换过程比较繁琐。
中国专利文献CN110378085A公开了一种Python字节码防逆向方法,包括:步骤S100: Python解释器将采用Python语言编写的源码文件利用编译模块编译成字节码;步骤S200:虚拟机将字节码文件包含的操作码序列中的非关键操作码用新的值进行替换,使其包含新的操作码。操作码替换其实质为将字节码文件包含的操作码序列中的非关键操作码用新的值进行替换,使其包含新的操作码,从而改变操作码序列的内容与结构,达到防逆转的目的。该专利在保证Python字节码运行结果和逻辑正确的前提下,对字节码中的非关键操作码进行替换,改变字节码文件中的操作码序列的内容和结构,使得字节码不能够被逆向反编译出源代码,但采用 Python源码混淆的方法后,仍可以通过一些破解工具可将被替换的非关键操作码重新替换回来,安全性能较低。
中国专利文献CN107808101A公开了一种通过加密Python明文源码token的知识产权保护系统,保护系统包括加密系统和运行系统;所述加密系统包括Python明文源码token加密模块,所述Python明文源码token加密模块通过自定义的对称密钥加密算法对Python明文源码文件进行加密;所述运行系统包括新Python解释器,所述新Python解释器用来对Python密文代码文件进行解密;所述新Python解释器内添加有Python密文代码token解密运行模块,所述新Python解释器为Python原生解释器通过Python密文代码token解密运行模块修改得到。该专利可以有效的保护Python文件安全,但该方法未对Python二进制文件进行保护,源码的防护性较低。
发明内容
针对上述现有技术中存在的问题,本发明公布了一种Python源码安全防护的实现方法及系统,本发明通过对编译后的Python解释器加壳,将Python源代码安全提升到了二进制文件安全,解决了现有技术中Python源代码文件安全性较低的问题,增加了Python源代码的破译难度,加强了Python源代码安全。
当Python源代码在执行过程中,首先会将py文件(源代码)的内容读入到Python解释器,然后再由Python解释器转换为对应的字节码,最终交由Python虚拟机执行。由于Python(解释器、虚拟机)本身是开源的,因此我们可以对Python解释器的源码做一些修改以实现对Python源代码保护的目的。
本发明所公开的具体的技术方案如下:一种Python源码安全防护的实现方法,包括如下步骤:
S01.对Python源代码文件的内容进行加密;
S02.修改Python解释器源码,获得修改后的Python解释器源码;
S03.重新编译修改后的Python解释器源码得到Python二进制文件,并对Python二进制文件进行加壳保护,获得加壳的Python解释器;
S04.使用加壳的Python解释器执行加密后的Python源代码程序。
进一步的,所述S02步骤中修改Python解释器源码的具体方法为:
S0211.在Python解释器源码中增加对加密.zxx文件的解密代码;
S0212.取消Python解释器中.pyc文件的生成。
Python解释器为了提高运行效率,在将.py文件转换为对应的字节码时,同时会生成其对应的.pyc文件,再次执行时就不需要再转换了,直接使用上次生成的.pyc文件即可。而对于.pyc 的反编译(转换成.py)是非常容易的,所以还需要取消对加密的.zxx文件生成.pyc。
进一步的,所述S01步骤中的加密方法采用对称加密算法或非对称加密算法。
进一步的,所述S04步骤中Python解释器执行过程中,当加密后的Python源代码转换为对应的字节码时,加密的.zxx文件无法生成.pyc文件
进一步的,所述加壳保护方法采用VMP或TMD加壳工具。
进一步的,所述源代码解密程序采用的解密算法与所述S01步骤中采用的加密算法相一致。
进一步的,所述S0212步骤中Python解释器取消生成.pyc文件的具体步骤为:Python解释器首先判断当前文件名是否为.zxx结尾,如果是.zxx结尾则不生成.pyc文件;如果不是.zxx结尾则生成.pyc文件。
基于上述方法,本专利还公开了一种Python源码安全防护的实现系统,所述系统可执行上述Python源码安全防护实现方法。
本发明同现有技术相比,具有如下优点:
1)本发明中通过对称加密算法或非对称加密算法对源代码文件进行加密,增强了源代码文件的安全性,提高了源代码文件的反编译难度。
2)本发明中通过对Python解释器进行源码修改,增加了对加密.zxx文件的解密代码,使源代码文件的加密解密过程自动进行,无需人为干预。
3)本发明可自动判别Python源代码文件是否需要加密,根据判别结果自动取消或生成.pyc 文件,提高程序运行效率。
4)本发明中通过对编译后的Python二进制文件进行加壳保护,将Python源码安全提升到了二进制文件安全,想要反编译得到Python源代码,首先需反编译Python解释器以获得解密算法,而想要反编译Python解释器,则需要先破解掉加壳代码,大大提升了反编译的难度,进一步加强了Python源代码安全。
附图说明
图1是本发明实施例中一种Python源码安全防护的实现方法的流程图;
图2是本发明实施例中一种Python源码安全防护的实现方法的程序图;
图3是本发明实施例中Python解释器取消生成.pyc文件的流程图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的实施例仅用于说明和解释本发明,并不用于限定本发明。
实施例:
结合图1-2所示,一种Python源码安全防护的实现方法,包括如下步骤:
S01.对Python源代码文件的内容进行加密;
S02.修改Python解释器源码,获得修改后的Python解释器源码;
S03.重新编译修改后的Python解释器源码得到Python二进制文件,并对Python二进制文件进行加壳保护,获得加壳的Python解释器;
S04.使用加壳的Python解释器执行加密后的Python源代码程序。
进一步的,所述S02步骤中修改Python解释器源码的具体方法为:
S0211.在Python解释器源码中增加对加密.zxx文件的解密代码;
S0212.取消Python解释器中.pyc文件的生成。
进一步的,所述S01步骤中的加密方法采用对称加密算法或非对称加密算法。
进一步的,所述S04步骤中Python解释器执行过程中,当加密后的Python源代码转换为对应的字节码时,加密的.zxx文件无法生成.pyc文件
进一步的,所述加壳保护方法采用VMP或TMD加壳工具。
进一步的,所述源代码解密程序采用的解密算法与所述S01步骤中采用的加密算法相一致。
进一步的,所述S0212步骤中Python解释器取消生成.pyc文件的具体步骤为:Python解释器首先判断当前文件名是否为.zxx结尾,如果是.zxx结尾则不生成.pyc文件;如果不是.zxx 结尾则生成.pyc文件。
结合图3所示,本发明中Python解释器具体执行流程为:
Python解释器加载需执行文件,并检查文件中是否存在.pyc文件,若存在则校验.pyc文件的合法性,合格后进行读取编译操作,加载至导入模块中,由Python执行程序操作;若不存在则Python解释器中的解析模块分析待执行文件是否为.zxx结尾,若是.zxx结尾则不生成.pyc 文件,直接加载至导入模块中,由Python执行程序操作,若不是.zxx结尾则首先生成.pyc文件,再加载至导入模块中,由Python执行。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均包含在本发明的保护范围之内。
Claims (8)
1.一种Python源码安全防护的实现方法,其特征在于,包括如下步骤:
S01.对Python源代码文件的内容进行加密;
S02.修改Python解释器源码,获得修改后的Python解释器源码;
S03.重新编译修改后的Python解释器源码得到Python二进制文件,并对Python二进制文件进行加壳保护,获得加壳的Python解释器;
S04.使用加壳的Python解释器执行加密后的Python源代码程序。
2.根据权利要求1所述的一种Python源码安全防护的实现方法,其特征为:所述S02步骤中修改Python解释器源码的具体方法为:
S0211.在Python解释器源码中增加对加密.zxx文件的解密代码;
S0212.取消Python解释器中.pyc文件的生成。
3.根据权利要求2所述的一种Python源码安全防护的实现方法,其特征在于,所述S01步骤中的加密方法采用对称加密算法或非对称加密算法。
4.根据权利要求3所述的一种Python源码安全防护的实现方法,其特征在于,所述S04步骤中Python解释器执行过程中,当加密后的Python源代码转换为对应的字节码时,加密的.zxx文件无法生成.pyc文件。
5.根据权利要求4所述的一种Python源码安全防护的实现方法,其特征为:所述加壳保护方法采用VMP或TMD加壳工具。
6.根据权利要求5所述的一种Python源码安全防护的实现方法,其特征为:所述源代码解密程序采用的解密算法与所述S01步骤中采用的加密算法相一致。
7.根据权利要求6所述的一种Python源码安全防护的实现方法,其特征在于,所述S0212步骤中Python解释器取消生成.pyc文件的具体步骤为:Python解释器首先判断当前文件名是否为.zxx结尾,如果是.zxx结尾则不生成.pyc文件;如果不是.zxx结尾则生成.pyc文件。
8.一种Python源码安全防护的实现系统,其特征在于,所述系统可执行权利要求1-7任意一项所述的Python源码安全防护实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010367799.3A CN111523120A (zh) | 2020-04-30 | 2020-04-30 | 一种 Python 源码安全防护的实现方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010367799.3A CN111523120A (zh) | 2020-04-30 | 2020-04-30 | 一种 Python 源码安全防护的实现方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111523120A true CN111523120A (zh) | 2020-08-11 |
Family
ID=71907595
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010367799.3A Pending CN111523120A (zh) | 2020-04-30 | 2020-04-30 | 一种 Python 源码安全防护的实现方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111523120A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112398843A (zh) * | 2020-11-09 | 2021-02-23 | 广州锦行网络科技有限公司 | 一种基于http走私攻击的检测方法及装置 |
CN113434874A (zh) * | 2021-06-11 | 2021-09-24 | 湖南大学 | 一种基于pyc加密的Python源代码保护方法和系统 |
CN116089983A (zh) * | 2023-02-23 | 2023-05-09 | 北京微步在线科技有限公司 | 一种py文件的加固编译方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315930A (zh) * | 2017-07-07 | 2017-11-03 | 成都恒高科技有限公司 | 一种保护Python程序的方法 |
CN107808101A (zh) * | 2017-11-06 | 2018-03-16 | 上海金途信息科技有限公司 | 一种通过加密Python明文源码token的知识产权保护系统 |
CN110378085A (zh) * | 2019-07-30 | 2019-10-25 | 四川长虹电器股份有限公司 | 一种Python字节码防逆向方法 |
CN110929234A (zh) * | 2019-11-28 | 2020-03-27 | 施羊梦燊 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
-
2020
- 2020-04-30 CN CN202010367799.3A patent/CN111523120A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315930A (zh) * | 2017-07-07 | 2017-11-03 | 成都恒高科技有限公司 | 一种保护Python程序的方法 |
CN107808101A (zh) * | 2017-11-06 | 2018-03-16 | 上海金途信息科技有限公司 | 一种通过加密Python明文源码token的知识产权保护系统 |
CN110378085A (zh) * | 2019-07-30 | 2019-10-25 | 四川长虹电器股份有限公司 | 一种Python字节码防逆向方法 |
CN110929234A (zh) * | 2019-11-28 | 2020-03-27 | 施羊梦燊 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
Non-Patent Citations (2)
Title |
---|
DHCN: "如何保护你的 Python 代码 (一)—— 现有加密方案", 《HTTPS://WWW.CNBLOGS.COM/DHCN/P/11077447.HTML》 * |
互联网资讯: "关于python的加密加壳的见解", 《HTTPS://BBS.PEDIY.COM/THREAD-228668.HTM》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112398843A (zh) * | 2020-11-09 | 2021-02-23 | 广州锦行网络科技有限公司 | 一种基于http走私攻击的检测方法及装置 |
CN113434874A (zh) * | 2021-06-11 | 2021-09-24 | 湖南大学 | 一种基于pyc加密的Python源代码保护方法和系统 |
CN116089983A (zh) * | 2023-02-23 | 2023-05-09 | 北京微步在线科技有限公司 | 一种py文件的加固编译方法及装置 |
CN116089983B (zh) * | 2023-02-23 | 2024-03-26 | 北京微步在线科技有限公司 | 一种py文件的加固编译方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111523120A (zh) | 一种 Python 源码安全防护的实现方法及系统 | |
KR101597251B1 (ko) | 소프트웨어 애플리케이션들의 화이트박스 구현들을 생성하는 시스템 및 방법 | |
Fournet et al. | Modular code-based cryptographic verification | |
JP5996810B2 (ja) | 自己書換え基盤のアプリケーションコード難読化装置及びその方法 | |
CN110069905A (zh) | 一种Springboot程序加密和解密的装置及方法 | |
Protzenko et al. | Formally verified cryptographic web applications in webassembly | |
CN106599628B (zh) | 一种基于模块钩子的Python字节码文件保护方法 | |
CN103218549B (zh) | 一种Java源代码加解密的方法及装置 | |
CN104268444A (zh) | 一种云OS Java源代码保护方法 | |
CN107808101B (zh) | 一种通过加密Python明文源码token的知识产权保护系统 | |
US20220303113A1 (en) | Intermediate code encryption method based on fully homomorphic encryption technology and ciphertext virtual machine system | |
CN107480478B (zh) | 一种java应用程序的加密方法及运行方法 | |
CN105812146A (zh) | 一种基于md5的双向加密数据保护方法 | |
CN110147656A (zh) | 一种Node.js的代码加密及底层运行时解密办法 | |
CN112100582A (zh) | 一种应用强对称加密保护软件分发安全的方法 | |
CN113626773B (zh) | 一种基于中间语言的代码保护方法 | |
CN111131281B (zh) | 消息传输方法、装置、系统及其保护代码更新方法、装置 | |
CN116226881A (zh) | 一种基于编译型语言的源码加密方法 | |
CN113434874B (zh) | 一种基于pyc加密的Python源代码保护方法和系统 | |
CN107403103B (zh) | 文件解密方法和装置 | |
CN113836495A (zh) | 一种将Java代码等价转换成C++代码的方法 | |
CN111460464B (zh) | 数据加解密方法、装置、电子设备及计算机存储介质 | |
CN113282893A (zh) | 源代码加固方法、装置、计算机设备和存储介质 | |
Sakabe et al. | Java obfuscation approaches to construct tamper-resistant object-oriented programs | |
Yasin et al. | Dynamic multi levels Java code obfuscation technique (DMLJCOT) |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200811 |
|
RJ01 | Rejection of invention patent application after publication |