CN110929234B - 一种基于代码虚拟化的Python程序加密保护系统与方法 - Google Patents
一种基于代码虚拟化的Python程序加密保护系统与方法 Download PDFInfo
- Publication number
- CN110929234B CN110929234B CN201911189495.6A CN201911189495A CN110929234B CN 110929234 B CN110929234 B CN 110929234B CN 201911189495 A CN201911189495 A CN 201911189495A CN 110929234 B CN110929234 B CN 110929234B
- Authority
- CN
- China
- Prior art keywords
- code
- pyc
- module
- python
- file
- 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 30
- 238000012805 post-processing Methods 0.000 claims abstract description 11
- 230000006870 function Effects 0.000 claims description 54
- 238000012545 processing Methods 0.000 claims description 18
- 239000012634 fragment Substances 0.000 claims description 14
- 238000004806 packaging method and process Methods 0.000 claims description 13
- 230000006835 compression Effects 0.000 claims description 4
- 238000007906 compression Methods 0.000 claims description 4
- 230000000694 effects Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 4
- 230000002155 anti-virotic effect Effects 0.000 description 2
- JLQUFIHWVLZVTJ-UHFFFAOYSA-N carbosulfan Chemical compound CCCCN(CCCC)SN(C)C(=O)OC1=CC=CC2=C1OC(C)(C)C2 JLQUFIHWVLZVTJ-UHFFFAOYSA-N 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000001047 pyretic effect Effects 0.000 description 1
- 238000012857 repacking Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- 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
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种基于代码虚拟化的Python程序加密保护系统与方法,本发明通过设置pyc分析模块、code对象反汇编模块、加密虚拟机生成模块、code对象后处理模块、code对象生成模块以及pyc生成模块,在不对Python解释器层进行任何修改以及不加载任何第三方dll、so库的前提下,尽可能的高强度保护Python代码,破坏原有pyc文件结构,致使通用反编译工具在架构上无法应用于被加密后的pyc文件,提高程序安全性,实现Python脚本语言所写软件防篡改、防伪造。
Description
技术领域
本发明涉及软件程序加密技术领域,特别是一种基于代码虚拟化的Python程序加密保护系统与方法。
背景技术
目前,市面上使用的私有或公开商业化的Python代码保护方案,大致可分为以下几种类型:
1、对Python源代码进行变量名、函数名混淆,或进行加密处理后使用exec语句执行。该中方法没有改变源代码流程和结构本身,因为Python脚本语言的特殊性,被混淆的代码依然是明文存在,且可被直接查看。虽然丢失了标识符名称之后的Python脚本更加难以阅读,但依旧可以很容易找出关键位置的算法,并可直接修改相关代码,起不到实质上的保护作用。对于将Python脚本进行加密并调用exec的方式,由于可以直接拦截compile与exec语句,从而可以直接获得原始的Python源码。此方式虽然更大程度上加大了分析的复杂度,但相反的却更容易被完全解密,甚至是被做出通用解密工具,直接获取到完整的源码。
2、将Python编译为pyc之后进行分发。由于目前业界对Python的研究较为成熟,而Python的编译机制存在着高度的规律性,因此目前市面上已有“pyretic”、“uncompyle”等通用pyc反编译工具,反编译准确率非常高。将Python编译成pyc之后依旧可以被简单的反编译,无实际保护作用。此方式可直接通过Python的自带模块py_compile完成,知晓率较高,但安全性几乎没有。
3、使用nuitka、pyinstaller、py2exe等第三方库打包成独立的可执行文件。该方式首先遇到的问题即为跨平台问题。例如,用py2exe打包的Python软件,将只能在Windows平台上运行,无法用于Linux系统。同时,打包为可执行之后,因需要附带一个完整的Python解释器以及相关Python自带模块,软件体积大幅度增大。且由于py2exe、pyinstaller等软件均为开源工具,其工作原理非常清晰明了。市面上甚至已经出现了如“pyinstallerrebuilder”等通用反编译、修改后重打包的工具,使得此类方法依旧没有很好的实际保护效果。
4、对pyc本身的co_varnames、co_names等字段混淆后,在co_code中增加花指令并重新生成pyc文件。此方式改良了pyc文件可被轻易反编译的弱点。被修改后的pyc文件不符合Python的正常编译结果,直接导致通用反编译工具报错退出。但这个过程往往是可逆的,即使原始的co_varnames、co_names字段已被抹去,依旧可以通过替换为如var_1、var_2等合法变量名的方式再进行二次处理;而对于co_code中的花指令,由于插花的类型是有限的,可以通过简单的正则表达式予以去除,之后将代码按照流程重排序并修复跳转地址,即可直接送入通用反编译工具进行正常反编译。此方式进一步提高了逆向分析的门槛,但依旧是没有解决原程序流程直接暴露的问题,导致二次处理即可直接反编译。
5、重新编译Python解释器,置换解释器主循环中的Opcode操作码的对应数字。此方式直接导致了pyc文件无法被正常识别和反编译。在接触不到被修改后的Python虚拟机以及自带模块的情况下,此方法确实是无懈可击的。但由于Python自带模块大同小异,被编译后的自带模块虽然被替换了Opcode指令的对应关系,但结构上依旧和正常的模块是一致的。因此对于Python的自带模块,可以直接用一个正常的同名文件进行文件对比,重新找出Opcode的对应关系,之后将Opcode对应关系重新恢复即可送入通用反编译工具进行反编译。此方式也同样对pyc文件的逆向分析造成了干扰,但依旧没有改变pyc的原始结构,导致存在不少的漏洞可以作为切入点。
6、加载第三方dll(或so库),拦截python的import过程,在pyc脚本被加载前先通过自己的dll进行解密。该方式首先带来的问题依旧是跨平台问题。一些代码保护库只有dll版本或只有so版本,致使无法在所有的操作系统上都可以正常加载。其次,由于第三方dll的不规范性,往往一些过多的反调试、反分析方式会造成杀毒软件的报警,或者需要过多的系统权限,这些无不对用户体验造成严重的不良影响。且此方法依然没有解决根本问题,简单拦截Python的import,或使用Python自带的反射功能,都能够获取到被解密之后的原始code对象,进而直接写到文件进行反编译。
发明内容
本发明的目的是提供一种基于代码虚拟化的Python程序加密保护系统与方法,旨在解决现有技术中Python脚本语言所写软件存在安全性低的问题,实现在不对Python解释器层进行任何修改以及不加载任何第三方dll、so库的前提下,提高程序安全性。
为达到上述技术目的,本发明提供了一种基于代码虚拟化的Python程序加密保护系统,所述系统包括:
pyc分析模块、code对象反汇编模块、加密虚拟机生成模块、code对象后处理模块、code对象生成模块以及pyc生成模块;
所述pyc分析模块用于载入pyc文件,并反序列化读取code对象,从code对象的co_consts字段中递归读取pyc文件中包含的全部函数的code对象;
所述code对象反汇编模块用于将code对象中包含的opcode序列反汇编并拆分为相互独立的单条指令,并根据跳转语句对指令进行分块处理,得到多个不含跳转语句的顺序执行代码片段;
所述加密虚拟机生成模块用于生成虚拟机,并使用生成的虚拟机代码片段替换函数中的代码片段;
所述code对象后处理模块用于对每个函数的代码片段添加花指令,并对每个代码片段进行乱序重排序;
所述code对象生成模块用于对所有的代码片段重新组装为可正常执行的code对象;
所述pyc生成模块用于将重新组装好的code对象打包或压缩,生成新的pyc文件。
优选地,所述pyc文件为通过py_compile模块对py源码编译得到。
优选地,所述pyc文件在载入后需裁剪头8个字节。
优选地,所述新的pyc文件在打包或压缩前需追加pyc文件头。
本发明还提供了一种基于代码虚拟化的Python程序加密保护方法,所述方法包括以下步骤:
S1、载入pyc文件,并反序列化读取code对象,从code对象的co_consts字段中递归读取pyc文件中包含的全部函数的code对象;
S2、将code对象中包含的opcode序列反汇编并拆分为相互独立的单条指令,并根据跳转语句对指令进行分块处理,得到多个不含跳转语句的顺序执行代码片段;
S3、对于每个函数,查询对应的code对象中co_consts字段是否包含预设字符串常量,如果存在则生成虚拟机,并使用生成的虚拟机代码片段替换函数中的代码片段,否则不对函数进行处理;
S4、对每个函数的代码片段添加花指令,并对每个代码片段进行乱序重排序;
S5、对所有的代码片段重新组装为可正常执行的code对象;
S6、将重新组装好的code对象打包或压缩,生成新的pyc文件。
优选地,所述pyc文件为通过py_compile模块对py源码编译得到。
优选地,所述pyc文件在载入后需裁剪头8个字节。
优选地,所述新的pyc文件在打包或压缩前需追加pyc文件头。
发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
与现有技术相比,本发明无需使用第三方dll或so库,保留了Python语言的跨平台性;使用代码虚拟化技术保护Python代码,使得加密后的Python代码无法通过拦截Python运行时提取;即使Python代码被提取,依旧需要对加密虚拟机本身进行完整逆向才能分析提取的Python代码,而由于加密虚拟机的高度随机性和复杂性,逆向加密虚拟机极为困难,工作成本远超过被保护代码本身的成本;加密虚拟机使用多种自校验算法与运行时动态解密算法,使加密虚拟机本身难以被篡改、调试、破解,修改虚拟机的任何一项数据都将直接导致自解密失败或上下文紊乱,使被保护的Python代码无法成功读取,算法上保护了被保护代码的安全;即使加密虚拟机被攻破或未使用虚拟化保护功能,被保护的Python代码依旧被插入了大量花指令,并进行了乱序排序混淆,仍然无法直接反编译,且干扰反汇编工具的正常执行;由于是算法本身上的防护,而非拦截系统api进行的调试器对抗检测,因此保护效果要更加可靠,同时与杀毒软件、主动防护程序、权限控制程序都有良好的兼容性;由于使用了编译性质的处理,因此源代码始终没有出现在加密后文件的任何一部分,因此在架构上杜绝了通过拦截Python运行时直接获取到源码的严重安全问题。
附图说明
图1为本发明实施例中所提供的一种基于代码虚拟化的Python程序加密保护系统框图;
图2为本发明实施例中所提供的一种基于代码虚拟化的Python程序加密保护方法流程图。
具体实施方式
为了能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
下面结合附图对本发明实施例所提供的一种基于代码虚拟化的Python程序加密保护系统与方法进行详细说明。
如图1所示,本发明实施例公开了一种基于代码虚拟化的Python程序加密保护系统,所述系统包括:
pyc分析模块、code对象反汇编模块、加密虚拟机生成模块、code对象后处理模块、code对象生成模块以及pyc生成模块;
所述pyc分析模块用于载入pyc文件,并反序列化读取code对象,从code对象的co_consts字段中递归读取pyc文件中包含的全部函数的code对象;
所述code对象反汇编模块用于将code对象中包含的opcode序列反汇编并拆分为相互独立的单条指令,并根据跳转语句对指令进行分块处理,得到多个不含跳转语句的顺序执行代码片段;
所述加密虚拟机生成模块用于生成虚拟机,并使用生成的虚拟机代码片段替换函数中的代码片段;
所述code对象后处理模块用于对每个函数的代码片段添加花指令,并对每个代码片段进行乱序重排序;
所述code对象生成模块用于对所有的代码片段重新组装为可正常执行的code对象;
所述pyc生成模块用于将重新组装好的code对象打包或压缩,生成新的pyc文件。
本发明实施例只需要将需要加密的函数,在任意函数位置插入“AVMPROTECTON”的字符串常量,即可对相应的函数进行虚拟机加密,而对于其他函数,则使用Opcode乱序打碎、花指令干扰等方式进行混淆处理。在不对Python解释器层进行任何修改的前提下,以及不加载任何第三方dll、so库的前提下,尽可能的高强度保护Python代码,破坏原有pyc文件结构,致使通用反编译工具在架构上无法应用于被加密后的pyc文件。
将py源码使用Python自带的py_compile模块编译为pyc文件,利用pyc分析模块载入编译的pyc文件,反序列化读取到主模块code对象,之后从主模块code对象的co_consts字段中递归读取到pyc文件中包含的全部函数的code对象。所述pyc分析模块将pyc文件读入后,裁剪其头8个字节,将剩余数据通过Python的marshal.loads函数反序列化为code对象。
对于每个函数的code对象,首先使用code对象反汇编模块将code对象中包含的opcode序列反汇编并拆分为相互独立的单条指令,并根据跳转语句对指令序列进行分块处理,最终得到多个不含跳转语句的顺序执行代码片段。所述code对象反汇编模块工作原理为递归获取code对象中的co_code指令序列,并根据Python的opcode操作码对应关系,重新生成对应的汇编指令序列,并根据跳转指令对生成的指令序列进行切割,成为多个不含跳转语句的顺序执行代码片段。
对于每个函数,查询该函数对应的code对象中,co_consts字段是否包含AVMPROTECTON字符串常量,若存在则使用加密虚拟机生成模块生成虚拟机,并使用生成的虚拟机代码片段替换该函数的代码片段,若不存在,则不对本函数进行处理。所述加密虚拟机生成模块的工作流程具体如下:
对原函数的Python代码使用code对象反汇编模块,得到汇编指令序列;
扫描汇编指令序列,将所有的Python汇编语句替换为加密虚拟机指令语句,并使用code对象后处理模块与code对象生成模块,混淆并编译,获得虚拟机目标代码;
对虚拟机代码进行编译,得到虚拟机code对象;
对虚拟机code对象的co_consts、co_names以及co_vamames字段进行混淆;
生成自解密key、checksum、自校验md5等参数,并替换虚拟机code对象中预留的占位符;
使用虚拟机code对象替换原函数的code对象。
对于每个函数的的代码片段,使用code对象后处理模块添加花指令,并对每个代码片段进行乱序重排序,使得常规反汇编工具无法正常反汇编被加密的code对象。
对于所有的代码片段,使用code对象生成模块,重新组装为可正常执行的code对象,最后使用pyc生成模块,将重新组装好的code对象打包或压缩,并生成为新的pyc,并输出到硬盘。
在下述实例中对所述系统进行具体说明。
设置核心文件,包括handlelist.py、opcompiler.py、pycanalyser.py以及vmprotectcore.py,handlelist.py文件中包含虚拟机指令句柄以及虚拟机头部以及尾部的代码;opcompiler.py用于对opcode汇编代码序列编译成可执行code对象;pycanalyser.py用于将code对象反汇编为opcode汇编代码序列,并包含混淆、乱序以及花指令生成的逻辑,可供调用;vmprotectcore.py用于创建并生成加密虚拟机本身。所述pyc分析模块、code对象反汇编模块、code对象后处理模块、pyc生成模块均由pycanalyser.py实现,code对象生成模块由opcompiler.py实现,加密虚拟机生成模块则由vmprotectcore.py实现。
在程序工作时,由pycanalyser.py中的函数负责整个流程的处理,将输入的pyc读入,去除前8个字节,加载后即可得到对应的pyc的code对象,利用自身的CodeAnalyser类,将code对象递归反汇编为多个汇编代码片段,对所有需要虚拟化保护的函数,将其送入vmprotectcore.py中,创建此函数的加密虚拟机汇编代码片段,并替换原函数的代码片段。在所有代码片段准备就绪后,pycanalyser.py调用AfterProcess类,对所有的代码片段添加花指令、乱序混淆。最后所有的代码片段被送入opcompiler.py中进行编译并组合,得到最终可执行的code对象,最后的code对象由pycanalyser.py重新添加8字节的pyc文件头,写出到文件并保存。
在使用被加密的Python文件时,只需直接用Python解释器执行即可,解释器本身无需作任何修改,同时被加密的Python文件无法直接查看到内部的常量和变量名,也无法使用通用反汇编、反编译工具进行分析。
如图2所示,本发明实施例还公开了一种基于代码虚拟化的Python程序加密保护方法,所述方法包括以下步骤:
S1、载入pyc文件,并反序列化读取code对象,从code对象的co_consts字段中递归读取pyc文件中包含的全部函数的code对象;
S2、将code对象中包含的opcode序列反汇编并拆分为相互独立的单条指令,并根据跳转语句对指令进行分块处理,得到多个不含跳转语句的顺序执行代码片段;
S3、对于每个函数,查询对应的code对象中co_consts字段是否包含预设字符串常量,如果存在则生成虚拟机,并使用生成的虚拟机代码片段替换函数中的代码片段,否则不对函数进行处理;
S4、对每个函数的代码片段添加花指令,并对每个代码片段进行乱序重排序;
S5、对所有的代码片段重新组装为可正常执行的code对象;
S6、将重新组装好的code对象打包或压缩,生成新的pyc文件。
将py源码使用Python自带的py_compile模块编译为pyc文件。
载入编译的pyc文件,反序列化读取到主模块code对象,之后从主模块code对象的co_consts字段中递归读取到pyc文件中包含的全部函数的code对象。将pyc文件读入后,需裁剪其头8个字节,将剩余数据通过Python的marshal.loads函数反序列化为code对象。
对于每个函数的code对象,将code对象中包含的opcode序列反汇编并拆分为相互独立的单条指令,并根据跳转语句对指令序列进行分块处理,最终得到多个不含跳转语句的顺序执行代码片段。
对于每个函数,查询该函数对应的code对象中,co_consts字段是否包含AVMPROTECTON字符串常量,若存在则生成虚拟机,并使用生成的虚拟机代码片段替换该函数的代码片段,若不存在,则不对本函数进行处理。其工作流程具体如下:
对原函数的Python代码进行反汇编,得到汇编指令序列;
扫描汇编指令序列,将所有的Python汇编语句替换为加密虚拟机指令语句,混淆并编译,获得虚拟机目标代码;
对虚拟机代码进行编译,得到虚拟机code对象;
对虚拟机code对象的co_consts、co_names以及co_vamames字段进行混淆;
生成自解密key、checksum、自校验md5等参数,并替换虚拟机code对象中预留的占位符;
使用虚拟机code对象替换原函数的code对象。
对于每个函数的的代码片段,使用code对象后处理模块添加花指令,并对每个代码片段进行乱序重排序,使得常规反汇编工具无法正常反汇编被加密的code对象。
对于所有的代码片段,重新组装为可正常执行的code对象,并将重新组装好的code对象打包或压缩,并生成为新的pyc,并输出到硬盘。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于代码虚拟化的Python程序加密保护系统,其特征在于,所述系统包括:
pyc分析模块、code对象反汇编模块、加密虚拟机生成模块、code对象后处理模块、code对象生成模块以及pyc生成模块;
所述pyc分析模块用于载入pyc文件,并反序列化读取code对象,从code对象的co_consts字段中递归读取pyc文件中包含的全部函数的code对象;
所述code对象反汇编模块用于将code对象中包含的opcode序列反汇编并拆分为相互独立的单条指令,并根据跳转语句对指令进行分块处理,得到多个不含跳转语句的顺序执行代码片段;
所述加密虚拟机生成模块用于生成虚拟机,并使用生成的虚拟机代码片段替换函数中的代码片段;
所述code对象后处理模块用于对每个函数的代码片段添加花指令,并对每个代码片段进行乱序重排序;
所述code对象生成模块用于对所有的代码片段重新组装为可正常执行的code对象;
所述pyc生成模块用于将重新组装好的code对象打包或压缩,生成新的pyc文件。
2.根据权利要求1所述的一种基于代码虚拟化的Python程序加密保护系统,其特征在于,所述pyc文件为通过py_compile模块对py源码编译得到。
3.根据权利要求1所述的一种基于代码虚拟化的Python程序加密保护系统,其特征在于,所述pyc文件在载入后需裁剪头8个字节。
4.根据权利要求1所述的一种基于代码虚拟化的Python程序加密保护系统,其特征在于,所述新的pyc文件在打包或压缩前需追加pyc文件头。
5.一种基于代码虚拟化的Python程序加密保护方法,其特征在于,所述方法包括以下步骤:
S1、载入pyc文件,并反序列化读取code对象,从code对象的co_consts字段中递归读取pyc文件中包含的全部函数的code对象;
S2、将code对象中包含的opcode序列反汇编并拆分为相互独立的单条指令,并根据跳转语句对指令进行分块处理,得到多个不含跳转语句的顺序执行代码片段;
S3、对于每个函数,查询对应的code对象中co_consts字段是否包含预设字符串常量,如果存在则生成虚拟机,并使用生成的虚拟机代码片段替换函数中的代码片段,否则不对函数进行处理;
S4、对每个函数的代码片段添加花指令,并对每个代码片段进行乱序重排序;
S5、对所有的代码片段重新组装为可正常执行的code对象;
S6、将重新组装好的code对象打包或压缩,生成新的pyc文件。
6.根据权利要求5所述的一种基于代码虚拟化的Python程序加密保护方法,其特征在于,所述pyc文件为通过py_compile模块对py源码编译得到。
7.根据权利要求5所述的一种基于代码虚拟化的Python程序加密保护方法,其特征在于,所述pyc文件在载入后需裁剪头8个字节。
8.根据权利要求5所述的一种基于代码虚拟化的Python程序加密保护方法,其特征在于,所述新的pyc文件在打包或压缩前需追加pyc文件头。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911189495.6A CN110929234B (zh) | 2019-11-28 | 2019-11-28 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911189495.6A CN110929234B (zh) | 2019-11-28 | 2019-11-28 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110929234A CN110929234A (zh) | 2020-03-27 |
CN110929234B true CN110929234B (zh) | 2023-03-24 |
Family
ID=69847455
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911189495.6A Active CN110929234B (zh) | 2019-11-28 | 2019-11-28 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110929234B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111523120A (zh) * | 2020-04-30 | 2020-08-11 | 广州锦行网络科技有限公司 | 一种 Python 源码安全防护的实现方法及系统 |
CN113626773B (zh) * | 2020-05-06 | 2024-04-02 | 上海蜚语信息科技有限公司 | 一种基于中间语言的代码保护方法 |
CN112347430A (zh) * | 2020-10-28 | 2021-02-09 | 山东开创云计算有限公司 | Ios应用加固保护系统 |
CN112988137B (zh) * | 2021-03-19 | 2024-05-17 | 武汉虹信技术服务有限责任公司 | 一种类文件导入代码管理系统及方法 |
CN113434874B (zh) * | 2021-06-11 | 2022-05-20 | 湖南大学 | 一种基于pyc加密的Python源代码保护方法和系统 |
CN113642015A (zh) * | 2021-08-02 | 2021-11-12 | 北京奇艺世纪科技有限公司 | 一种文件加密方法、装置、电子设备及存储介质 |
CN113672239B (zh) * | 2021-08-26 | 2024-02-09 | 征图智能科技(江苏)有限公司 | 基于语言分析的视觉算法包开发方法 |
CN113961240B (zh) * | 2021-12-20 | 2022-04-08 | 杭州安恒信息技术股份有限公司 | 一种虚拟化加密程序逆向分析方法及相关组件 |
CN116089983B (zh) * | 2023-02-23 | 2024-03-26 | 北京微步在线科技有限公司 | 一种py文件的加固编译方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503496A (zh) * | 2016-12-08 | 2017-03-15 | 合肥康捷信息科技有限公司 | 基于操作码替换与合并的Python脚本程序防逆转方法 |
CN107808101A (zh) * | 2017-11-06 | 2018-03-16 | 上海金途信息科技有限公司 | 一种通过加密Python明文源码token的知识产权保护系统 |
CN109543368A (zh) * | 2018-11-23 | 2019-03-29 | 杭州哲信信息技术有限公司 | 一种基于中间语言解释器的跨平台源码虚拟化保护方法 |
CN110378085A (zh) * | 2019-07-30 | 2019-10-25 | 四川长虹电器股份有限公司 | 一种Python字节码防逆向方法 |
-
2019
- 2019-11-28 CN CN201911189495.6A patent/CN110929234B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503496A (zh) * | 2016-12-08 | 2017-03-15 | 合肥康捷信息科技有限公司 | 基于操作码替换与合并的Python脚本程序防逆转方法 |
CN107808101A (zh) * | 2017-11-06 | 2018-03-16 | 上海金途信息科技有限公司 | 一种通过加密Python明文源码token的知识产权保护系统 |
CN109543368A (zh) * | 2018-11-23 | 2019-03-29 | 杭州哲信信息技术有限公司 | 一种基于中间语言解释器的跨平台源码虚拟化保护方法 |
CN110378085A (zh) * | 2019-07-30 | 2019-10-25 | 四川长虹电器股份有限公司 | 一种Python字节码防逆向方法 |
Non-Patent Citations (1)
Title |
---|
对Python源码加密及反编译前后对比;auto;《Python3学习》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110929234A (zh) | 2020-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110929234B (zh) | 一种基于代码虚拟化的Python程序加密保护系统与方法 | |
Hiser et al. | ILR: Where'd my gadgets go? | |
Caballero et al. | Binary Code Extraction and Interface Identification for Security Applications. | |
Coogan et al. | Automatic static unpacking of malware binaries | |
CN104239757B (zh) | 应用程序防止逆向的方法及装置、运行方法及终端 | |
EP2958044B1 (en) | A computer implemented method and a system for controlling dynamically the execution of a code | |
KR100503387B1 (ko) | 악성 암호화 스크립트에 대한 분석 및 해독 방법 | |
JP4922951B2 (ja) | ソフトウェア保護方法 | |
CN106203006A (zh) | 基于dex与so文件动态执行的Android应用加固方法 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
US20170372068A1 (en) | Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN109684794B (zh) | 一种代码保护虚拟机kvm系统实现方法、装置、计算机设备及存储介质 | |
CN107291485B (zh) | 动态链接库的加固方法、运行方法、加固装置和安全系统 | |
CN112163195B (zh) | 一种基于堆栈隐藏的虚拟机软件保护方法 | |
CN105512521A (zh) | 一种软件安装包的加固保护方法和系统 | |
CN104573427A (zh) | 一种可执行应用的混淆方法和装置 | |
CN104573426A (zh) | 一种可执行应用的混淆方法和装置 | |
US20120096562A1 (en) | Method for protecting the source code of a computer program | |
Suk et al. | UnThemida: Commercial obfuscation technique analysis with a fully obfuscated program | |
CN110472425A (zh) | 基于Mono的Unity插件加密方法、存储介质 | |
CN112632536B (zh) | 基于pe文件改造的内存加载方法 | |
CN118051910A (zh) | 针对移动端应用的基于安全切面的智能混淆方法和系统 | |
Bilge et al. | Thwarting real-time dynamic unpacking | |
KR102557007B1 (ko) | 바이너리 파일 재구성 방법 및 그 장치 |
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 |