CN116089983B - 一种py文件的加固编译方法及装置 - Google Patents
一种py文件的加固编译方法及装置 Download PDFInfo
- Publication number
- CN116089983B CN116089983B CN202310157742.4A CN202310157742A CN116089983B CN 116089983 B CN116089983 B CN 116089983B CN 202310157742 A CN202310157742 A CN 202310157742A CN 116089983 B CN116089983 B CN 116089983B
- Authority
- CN
- China
- Prior art keywords
- file
- pyc
- custom
- pycodeobject
- class structure
- 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 77
- 230000003014 reinforcing effect Effects 0.000 title claims description 3
- 230000002787 reinforcement Effects 0.000 claims abstract description 33
- 230000006870 function Effects 0.000 claims description 55
- 238000004590 computer program Methods 0.000 claims description 10
- 238000001514 detection method Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000006855 networking Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000001010 compromised effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003287 optical effect Effects 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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- 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
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供一种py文件的加固编译方法及装置,该方法包括:获取py文件;基于自定义编写Python解释器对py文件进行编译,得到pyc文件;下发pyc文件和自定义编写Python解释器。可见,该方法能够对py文件进行加固编译,从而增加反编译的难度,进而实现对Python脚本代码的高强度保护。
Description
技术领域
本申请涉及网络安全技术领域,具体而言,涉及一种py文件的加固编译方法及装置。
背景技术
由于Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,所以,Python受到了很多人的喜爱。然而,在应用当中,Python脚本的源代码非常容易被逆向得到,从而导致了源代码的泄露,给开发者造成不必要的损失。
发明内容
本申请实施例的目的在于提供一种py文件的加固编译方法及装置,能够对py文件进行加固编译,从而增加反编译的难度,进而实现对Python脚本代码的高强度保护。
本申请实施例第一方面提供了一种py文件的加固编译方法,包括:
获取py文件;
基于自定义编写Python解释器对所述py文件进行编译,得到pyc文件;
下发所述pyc文件和所述自定义编写Python解释器。
在上述实现过程中,该方法可以优先获取py文件;然后,基于自定义编写Python解释器对py文件进行编译,得到pyc文件;最后,再下发pyc文件和自定义编写Python解释器。可见,该方法可以基于自编写的Python解析器对py文件进行编译,从而使得传统反编译方法无法对通过该方法编译得到的pyc文件进行反编译,进而以此增加了反编译的难度,实现了对Python脚本代码的高强度保护。
进一步地,所述获取py文件的步骤之前,所述方法还包括:
获取原始Python解释器源码;
获取所述原始Python解释器源码中的原始PyCodeObject类结构;
调整所述原始PyCodeObject类结构中成员变量的顺序,得到自定义编写PyCodeObject类结构;
基于所述自定义编写PyCodeObject类结构,生成自定义编写python解释器。
在上述实现过程中,该方法可以修改PyCodeObject类结构,从而使得攻击者无法轻易通过PyCodeObject对象解析出Python源代码。
进一步地,所述调整所述原始PyCodeObject类结构中成员变量的顺序,得到自定义编写PyCodeObject类结构的步骤包括:
调整所述原始PyCodeObject类结构中成员变量的顺序,得到修改PyCodeObject类结构;
在所述修改PyCodeObject类结构中添加成员变量key,得到自定义编写PyCodeObject类结构;其中,所述成员变量key为字符串类型,用于记录所述pyc文件的解密密钥。
进一步地,所述基于所述自定义编写PyCodeObject类结构,生成自定义编写python解释器的步骤包括:
对所述原始Python解释器源码中py源码导出函数名进行重命名,得到命名函数名;
基于所述自定义编写PyCodeObject类结构和所述命名函数名,生成自定义编写python解释器。
在上述实现过程中,该方法能够让攻击者无法直接使用编译出来的Python.dll文件。
进一步地,所述基于自定义编写Python解释器对所述py文件进行编译,得到pyc文件的步骤包括:
识别自定义编写Python解释器中的自定义编写PyCodeObject类结构;
基于所述PyCodeObject类结构对所述py文件进行编译,得到pyc初始文件;
自动生成pyc文件的解密密钥,并通过所述解密密钥对所述pyc初始文件进行加密,得到pyc加密文件;
基于自动生成的文件头、所述解密密钥、所述解密密钥的长度值和所述pyc加密文件,生成pyc文件。
在上述实现过程中,该方法能够通过密钥策略对pyc文件进行多重执行防护,从而实现对Python脚本代码的高强度保护。
进一步地,所述自动生成pyc文件的解密密钥的步骤包括:
基于新增的Opcode指令,自动生成pyc文件的解密密钥。
在上述实现过程中,该方法能够通过增加自定义Opcode和Opcode处理函数,来对Opcode和参数都进行一定的算法加固。
进一步地,所述下发所述pyc文件和所述自定义编写Python解释器的步骤之前,所述方法还包括:
基于新增的MyCheck函数在所述pyc文件首部添加运行检测策略,并剥离所述pyc文件中的解密密钥。
在上述实现过程中,该方法可以基于运行检测策略来检测pyc文件是否可以运行(如联网检测是否允许运行),从而以此来进一步实现对Python脚本代码的高强度保护。
本申请实施例第二方面提供了一种py文件的加固编译装置,所述py文件的加固编译装置包括:
获取单元,用于获取py文件;
编译单元,用于基于自定义编写Python解释器对所述py文件进行编译,得到pyc文件;
下发单元,用于下发所述pyc文件和所述自定义编写Python解释器。
在上述实现过程中,该装置可以通过获取单元获取py文件;通过编译单元基于自定义编写Python解释器对py文件进行编译,得到pyc文件;再通过下发单元下发pyc文件和自定义编写Python解释器。可见,该装置能够对py文件进行加固编译,从而增加反编译的难度,进而实现对Python脚本代码的高强度保护。
进一步地,所述py文件的加固编译装置还包括:
所述获取单元,还用于获取原始Python解释器源码;
所述获取单元,还用于获取所述原始Python解释器源码中的原始PyCodeObject类结构;
调整单元,用于调整所述原始PyCodeObject类结构中成员变量的顺序,得到自定义编写PyCodeObject类结构;
生成单元,用于基于所述自定义编写PyCodeObject类结构,生成自定义编写python解释器。
进一步地,所述调整单元包括:
调整子单元,用于调整所述原始PyCodeObject类结构中成员变量的顺序,得到修改PyCodeObject类结构;
添加子单元,还用于在所述修改PyCodeObject类结构中添加成员变量key,得到自定义编写PyCodeObject类结构;其中,所述成员变量key为字符串类型,用于记录所述pyc文件的解密密钥。
进一步地,所述生成单元包括:
重命名子单元,用于对所述原始Python解释器源码中py源码导出函数名进行重命名,得到命名函数名;
第一生成子单元,用于基于所述自定义编写PyCodeObject类结构和所述命名函数名,生成自定义编写python解释器。
进一步地,所述编译单元包括:
识别子单元,用于识别自定义编写Python解释器中的自定义编写PyCodeObject类结构;
编译子单元,用于基于所述PyCodeObject类结构对所述py文件进行编译,得到pyc初始文件;
加密子单元,用于自动生成pyc文件的解密密钥,并通过所述解密密钥对所述pyc初始文件进行加密,得到pyc加密文件;
第二生成子单元,用于基于自动生成的文件头、所述解密密钥、所述解密密钥的长度值和所述pyc加密文件,生成pyc文件。
进一步地,所述加密子单元,具体用于基于新增的Opcode指令,自动生成pyc文件的解密密钥。
进一步地,所述py文件的加固编译装置还包括:
处理单元,用于基于新增的MyCheck函数在所述pyc文件首部添加运行检测策略,并剥离所述pyc文件中的解密密钥。
本申请实施例第三方面提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本申请实施例第一方面中任一项所述的py文件的加固编译方法。
本申请实施例第四方面提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本申请实施例第一方面中任一项所述的py文件的加固编译方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种py文件的加固编译方法的流程示意图;
图2为本申请实施例提供的一种py文件的加固编译装置的结构示意图;
图3为本申请实施例提供的一种py文件的加固编译方法的举例流程示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
实施例1
请参看图1,图1为本实施例提供了一种py文件的加固编译方法的流程示意图。其中,该py文件的加固编译方法包括:
S101、获取原始Python解释器源码。
S102、获取原始Python解释器源码中的原始PyCodeObject类结构。
S103、调整原始PyCodeObject类结构中成员变量的顺序,得到修改PyCodeObject类结构。
本实施例中,该方法可以修改Python源码中的原始PyCodeObject类结构,以实现重新编写PyCodeObject相关源码函数的效果。
S104、在修改PyCodeObject类结构中添加成员变量key,得到自定义编写PyCodeObject类结构;其中,成员变量key为字符串类型,用于记录pyc文件的解密密钥。
本实施例中,该方法可以调整PyCodeObject成员变量的顺序,使其各个成员变量在内存中顺序有所改变。
在本实施例中,该方法可以添加一个新的char*类型成员变量key,作为code解密密钥。
S105、在原始Python解释器源码中的pyc文件读写函数里增加对成员变量key的MyCheck函数;其中,MyCheck函数用于对pyc文件进行校验,并用于读取或生成key以完成加密或解密处理。
本实施例中,该方法可以在原始Python解释器源码中的pyc文件读写的函数(w_object和r_object)里增加对PyCodeObject类结构的成员变量key的处理函数——MyCheck;其中,该MyCheck函数主要用于对生成和读取的pyc文件进行校验,读取或生成key,进行加密或解密处理。
S106、在原始Python解释器源码中新增Opcode指令;其中,该Opcode指令用于对自定义编写PyCodeObject类结构中成员变量进行加解密。
S107、对原始Python解释器源码中py源码导出函数名进行重命名,得到命名函数名。
S108、基于自定义编写PyCodeObject类结构和命名函数名,生成自定义编写python解释器。
本实施例中,该方法可以对Python源代码导出函数进行重命名,从而使得攻击者无法直接使用编译出来的Python.dll文件。
S109、获取py文件。
S110、识别自定义编写Python解释器中的自定义编写PyCodeObject类结构。
S111、基于PyCodeObject类结构对py文件进行编译,得到pyc初始文件。
S112、自动生成解密密钥,并基于解密密钥对pyc初始文件进行加密,得到pyc加密文件。
本实施例中,该方法可以修改Opcode,增加自定义Opcode和Opcode处理函数,对Opcode和参数进行一定的算法加固。
在本实施例中,该方法可以通过异或的方式修改源代码中的Opcode。并新增一个无参数的Opcode指令,Opcode值155,作为解密code的指令。
在本实施例中,修改_PyEval_EvalFrameDefault函数源代码结构,添加部分混淆代码,能够破坏该函数编译后的代码特征。
在本实施例中,该方法可以在_PyEval_EvalFrameDefault函数中添加新指令的处理代码。根据PyCodeObject的成员变量key的值,对code成员进行解密,采用对称加密的方式进行加解密。如果PyCodeObject的成员变量key设置为空,读取特定路径文件查询是否有对应解密密钥。没找到解密密钥,就弹出执行异常,结束执行。
S113、基于自动生成的文件头、解密密钥、解密密钥的长度值和pyc加密文件,生成pyc文件。
本实施例中,该方法中的pyc文件具有如下表示出的结构。
作为一种可选的实施方式,在生成pyc文件的步骤之后,该方法还包括:
基于新增的MyCheck函数在pyc文件首部添加运行检测策略,并剥离pyc文件中的解密密钥。
本实施例中,该方法可以在builtin_methods中自定义系统函数,并在关键py文件首部中加入此函数的调用。其中,该函数可用于对当前运行环境进行检测,如:检测Hook、系统环境、是否有调试器、模块内存哈希检测等。
在本实施例中,该方法可以在builtin_methods添加一个无参数的MyCheck函数。该函数负责进行反调试、反虚拟工作。该函数内也可添加一个联网请求执行的功能。
在本实施例中,该方法可以编译新的Python。在需要保护py文件首部添加MyCheck的函数调用。编译生成新的pyc文件。剥离其中的密钥部分,随后即可将pyc文件和Python.dll文件一同下发。
S114、下发pyc文件和自定义编写Python解释器。
本实施例中,该方法可以修改pyc写入和读取函数,增加对pyc文件加密和解密过程,修改pyc文件结构。为防止高强度的破解,部分pyc文件可加入密钥策略。执行时需要配置密钥信息,否则无法执行对应pyc文件。如果有设定自定义Opcode,还可以在生成pyc时在code中加入自定义Opcode指令。
举例来说,该方法生成pyc文件的过程可以为:生成特定的文件头Head。在原始pyc的code中添加自定新Opcode指令。随机生成特定长度范围的一个Key,用来对原始pyc中的code进行加密,随后将Key_len和Key写到文件中。对原始的pyc数据进行特定的异或加密,生成Pyc_buf保存文件中。用户可以基于需求将生成的pyc文件的Key取出,按照特定格式保存于其他文件中。
举例来说,该方法读取pyc文件的过程可以为:判断文件头是否是加密文件头。是加密的pyc文件,解密其中加密的Pyc_buf,生成一个PyCodeObject对象。将文件密钥Key初始化到PyCodeObject的成员变量key中。pyc文件中的Key_len和Key可以设置为0,那需要在本地特定路径下配置密钥文件。
本实施例中,该方法的执行主体可以为计算机、服务器等计算装置,对此本实施例中不作任何限定。
在本实施例中,该方法的执行主体还可以为智能手机、平板电脑等智能设备,对此本实施例中不作任何限定。
可见,实施本实施例所描述的py文件的加固编译方法,能够自定义pyc格式,从而在pyc单独泄露的时候,使其无法在常规的Python环境下正常执行;进一步地,能够在pyc和Python.dll同时泄露的时候,通过密钥策略防止pyc文件执行;还能够在pyc、Python.dll和密钥同时泄露时,通过自设的联网策略来防止pyc文件执行;还能够对Python源代码的修改,从而有效的增加逆向工程的成本。
实施例2
请参看图2,图2为本实施例提供的一种py文件的加固编译装置的结构示意图。如图2所示,该py文件的加固编译装置包括:
获取单元210,用于获取py文件;
编译单元220,用于基于自定义编写Python解释器对py文件进行编译,得到pyc文件;
下发单元230,用于下发pyc文件和自定义编写Python解释器。
作为一种可选的实施方式,py文件的加固编译装置还包括:
获取单元210,还用于获取原始Python解释器源码;
获取单元210,还用于获取原始Python解释器源码中的原始PyCodeObject类结构;
调整单元240,用于调整原始PyCodeObject类结构中成员变量的顺序,得到自定义编写PyCodeObject类结构;
生成单元250,用于基于自定义编写PyCodeObject类结构,生成自定义编写python解释器。
作为一种可选的实施方式,调整单元240包括:
调整子单元241,用于调整原始PyCodeObject类结构中成员变量的顺序,得到修改PyCodeObject类结构;
添加子单元242,还用于在修改PyCodeObject类结构中添加成员变量key,得到自定义编写PyCodeObject类结构;其中,成员变量key为字符串类型,用于记录pyc文件的解密密钥。
作为一种可选的实施方式,生成单元250包括:
重命名子单元251,用于对原始Python解释器源码中py源码导出函数名进行重命名,得到命名函数名;
第一生成子单元252,用于基于自定义编写PyCodeObject类结构和命名函数名,生成自定义编写python解释器。
作为一种可选的实施方式,py文件的加固编译装置还包括:
新增单元,用于在原始Python解释器源码中的pyc文件读写函数里增加对成员变量key的MyCheck函数;其中,MyCheck函数用于对pyc文件进行校验,并用于读取或生成key以完成加密或解密处理。
作为一种可选的实施方式,新增单元,还用于在原始Python解释器源码中新增Opcode指令;其中,该Opcode指令用于对自定义编写PyCodeObject类结构中成员变量进行加解密。
作为一种可选的实施方式,编译单元220包括:
识别子单元221,用于识别自定义编写Python解释器中的自定义编写PyCodeObject类结构;
编译子单元222,用于基于PyCodeObject类结构对py文件进行编译,得到pyc初始文件;
加密子单元223,用于自动生成pyc文件的解密密钥,并通过解密密钥对pyc初始文件进行加密,得到pyc加密文件;
第二生成子单元224,用于基于自动生成的文件头、解密密钥、解密密钥的长度值和pyc加密文件,生成pyc文件。
作为一种可选的实施方式,加密子单元223,具体用于基于新增的Opcode指令,自动生成pyc文件的解密密钥。
作为一种可选的实施方式,py文件的加固编译装置还包括:
处理单元260,用于基于新增的MyCheck函数在pyc文件首部添加运行检测策略,并剥离pyc文件中的解密密钥。
本实施例中,对于py文件的加固编译装置的解释说明可以参照实施例1中的描述,对此本实施例中不再多加赘述。
可见,实施本实施例所描述的py文件的加固编译装置,能够自定义pyc格式,从而在pyc单独泄露的时候,使其无法在常规的Python环境下正常执行;进一步地,能够在pyc和Python.dll同时泄露的时候,通过密钥策略防止pyc文件执行;还能够在pyc、Python.dll和密钥同时泄露时,通过自设的联网策略来防止pyc文件执行;还能够对Python源代码的修改,从而有效的增加逆向工程的成本。
本申请实施例提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本申请实施例1中的py文件的加固编译方法。
本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本申请实施例1中的py文件的加固编译方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (7)
1.一种py文件的加固编译方法,其特征在于,包括:
获取py文件;
基于自定义编写Python解释器对所述py文件进行编译,得到pyc文件;
下发所述pyc文件和所述自定义编写Python解释器;
其中,所述获取py文件的步骤之前,所述方法还包括:
获取原始Python解释器源码;
获取所述原始Python解释器源码中的原始PyCodeObject类结构;
调整所述原始PyCodeObject类结构中成员变量的顺序,得到自定义编写PyCodeObject类结构;
基于所述自定义编写PyCodeObject类结构,生成自定义编写python解释器;
其中,所述调整所述原始PyCodeObject类结构中成员变量的顺序,得到自定义编写PyCodeObject类结构的步骤包括:
调整所述原始PyCodeObject类结构中成员变量的顺序,得到修改PyCodeObject类结构;
在所述修改PyCodeObject类结构中添加成员变量key,得到自定义编写PyCodeObject类结构;其中,所述成员变量key为字符串类型,用于记录所述pyc文件的解密密钥;
其中,所述方法还包括:
在原始Python解释器源码中的pyc文件读写函数里增加对成员变量key的MyCheck函数;其中,MyCheck函数用于对pyc文件进行校验,并用于读取或生成key以完成加密或解密处理;
其中,所述下发所述pyc文件和所述自定义编写Python解释器的步骤之前,所述方法还包括:
基于新增的MyCheck函数在所述pyc文件首部添加运行检测策略,并剥离所述pyc文件中的解密密钥。
2.根据权利要求1所述的py文件的加固编译方法,其特征在于,所述基于所述自定义编写PyCodeObject类结构,生成自定义编写python解释器的步骤包括:
对所述原始Python解释器源码中py源码导出函数名进行重命名,得到命名函数名;
基于所述自定义编写PyCodeObject类结构和所述命名函数名,生成自定义编写python解释器。
3.根据权利要求1所述的py文件的加固编译方法,其特征在于,所述基于自定义编写Python解释器对所述py文件进行编译,得到pyc文件的步骤包括:
识别自定义编写Python解释器中的自定义编写PyCodeObject类结构;
基于所述PyCodeObject类结构对所述py文件进行编译,得到pyc初始文件;
自动生成pyc文件的解密密钥,并通过所述解密密钥对所述pyc初始文件进行加密,得到pyc加密文件;
基于自动生成的文件头、所述解密密钥、所述解密密钥的长度值和所述pyc加密文件,生成pyc文件。
4.根据权利要求3所述的py文件的加固编译方法,其特征在于,所述自动生成pyc文件的解密密钥的步骤包括:
基于新增的Opcode指令,自动生成pyc文件的解密密钥。
5.一种py文件的加固编译装置,其特征在于,所述py文件的加固编译装置包括:
获取单元,用于获取py文件;
编译单元,用于基于自定义编写Python解释器对所述py文件进行编译,得到pyc文件;
下发单元,用于下发所述pyc文件和所述自定义编写Python解释器;
其中,所述py文件的加固编译装置还包括:
所述获取单元,还用于获取原始Python解释器源码;
所述获取单元,还用于获取所述原始Python解释器源码中的原始PyCodeObject类结构;
调整单元,用于调整所述原始PyCodeObject类结构中成员变量的顺序,得到自定义编写PyCodeObject类结构;
生成单元,用于基于所述自定义编写PyCodeObject类结构,生成自定义编写python解释器;
其中,所述调整单元包括:
调整子单元,用于调整所述原始PyCodeObject类结构中成员变量的顺序,得到修改PyCodeObject类结构;
添加子单元,还用于在所述修改PyCodeObject类结构中添加成员变量key,得到自定义编写PyCodeObject类结构;其中,所述成员变量key为字符串类型,用于记录所述pyc文件的解密密钥;
其中,py文件的加固编译装置还包括:
新增单元,用于在原始Python解释器源码中的pyc文件读写函数里增加对成员变量key的MyCheck函数;其中,MyCheck函数用于对pyc文件进行校验,并用于读取或生成key以完成加密或解密处理;
其中,所述py文件的加固编译装置还包括:
处理单元,用于基于新增的MyCheck函数在pyc文件首部添加运行检测策略,并剥离pyc文件中的解密密钥。
6.一种电子设备,其特征在于,所述电子设备包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行权利要求1至4中任一项所述的py文件的加固编译方法。
7.一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行权利要求1至4任一项所述的py文件的加固编译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310157742.4A CN116089983B (zh) | 2023-02-23 | 2023-02-23 | 一种py文件的加固编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310157742.4A CN116089983B (zh) | 2023-02-23 | 2023-02-23 | 一种py文件的加固编译方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116089983A CN116089983A (zh) | 2023-05-09 |
CN116089983B true CN116089983B (zh) | 2024-03-26 |
Family
ID=86199209
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310157742.4A Active CN116089983B (zh) | 2023-02-23 | 2023-02-23 | 一种py文件的加固编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116089983B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503496A (zh) * | 2016-12-08 | 2017-03-15 | 合肥康捷信息科技有限公司 | 基于操作码替换与合并的Python脚本程序防逆转方法 |
CN106599628A (zh) * | 2016-12-08 | 2017-04-26 | 合肥康捷信息科技有限公司 | 一种基于模块钩子的Python字节码文件保护方法 |
CN107315930A (zh) * | 2017-07-07 | 2017-11-03 | 成都恒高科技有限公司 | 一种保护Python程序的方法 |
CN108363911A (zh) * | 2018-02-11 | 2018-08-03 | 西安四叶草信息技术有限公司 | 一种Python脚本混淆、水印的方法及装置 |
CN110378085A (zh) * | 2019-07-30 | 2019-10-25 | 四川长虹电器股份有限公司 | 一种Python字节码防逆向方法 |
CN110929234A (zh) * | 2019-11-28 | 2020-03-27 | 施羊梦燊 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
CN111159757A (zh) * | 2019-12-18 | 2020-05-15 | 成都烽创科技有限公司 | 文件加密方法、解密方法及相应装置 |
CN111523120A (zh) * | 2020-04-30 | 2020-08-11 | 广州锦行网络科技有限公司 | 一种 Python 源码安全防护的实现方法及系统 |
CN112100582A (zh) * | 2020-09-22 | 2020-12-18 | 焦点教育科技有限公司 | 一种应用强对称加密保护软件分发安全的方法 |
CN113434874A (zh) * | 2021-06-11 | 2021-09-24 | 湖南大学 | 一种基于pyc加密的Python源代码保护方法和系统 |
CN114154123A (zh) * | 2022-02-09 | 2022-03-08 | 北京天防安全科技有限公司 | 应用于Python项目的加密保护方法 |
CN114266020A (zh) * | 2021-12-22 | 2022-04-01 | 杭州安恒信息技术股份有限公司 | 一种软件保护方法、装置、设备及可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090249492A1 (en) * | 2006-09-21 | 2009-10-01 | Hans Martin Boesgaard Sorensen | Fabrication of computer executable program files from source code |
-
2023
- 2023-02-23 CN CN202310157742.4A patent/CN116089983B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503496A (zh) * | 2016-12-08 | 2017-03-15 | 合肥康捷信息科技有限公司 | 基于操作码替换与合并的Python脚本程序防逆转方法 |
CN106599628A (zh) * | 2016-12-08 | 2017-04-26 | 合肥康捷信息科技有限公司 | 一种基于模块钩子的Python字节码文件保护方法 |
CN107315930A (zh) * | 2017-07-07 | 2017-11-03 | 成都恒高科技有限公司 | 一种保护Python程序的方法 |
CN108363911A (zh) * | 2018-02-11 | 2018-08-03 | 西安四叶草信息技术有限公司 | 一种Python脚本混淆、水印的方法及装置 |
CN110378085A (zh) * | 2019-07-30 | 2019-10-25 | 四川长虹电器股份有限公司 | 一种Python字节码防逆向方法 |
CN110929234A (zh) * | 2019-11-28 | 2020-03-27 | 施羊梦燊 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
CN111159757A (zh) * | 2019-12-18 | 2020-05-15 | 成都烽创科技有限公司 | 文件加密方法、解密方法及相应装置 |
CN111523120A (zh) * | 2020-04-30 | 2020-08-11 | 广州锦行网络科技有限公司 | 一种 Python 源码安全防护的实现方法及系统 |
CN112100582A (zh) * | 2020-09-22 | 2020-12-18 | 焦点教育科技有限公司 | 一种应用强对称加密保护软件分发安全的方法 |
CN113434874A (zh) * | 2021-06-11 | 2021-09-24 | 湖南大学 | 一种基于pyc加密的Python源代码保护方法和系统 |
CN114266020A (zh) * | 2021-12-22 | 2022-04-01 | 杭州安恒信息技术股份有限公司 | 一种软件保护方法、装置、设备及可读存储介质 |
CN114154123A (zh) * | 2022-02-09 | 2022-03-08 | 北京天防安全科技有限公司 | 应用于Python项目的加密保护方法 |
Non-Patent Citations (2)
Title |
---|
一种有效的Python字节码保护方法;陈悟;顾乃杰;杜云开;;电子技术(第06期);全文 * |
基于操作码的Python程序防逆转算法研究与实现;王小强;《中国优秀硕士学位论文全文数据库 信息科技辑》;正文第2章-第4章第4.2节 * |
Also Published As
Publication number | Publication date |
---|---|
CN116089983A (zh) | 2023-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7254586B2 (en) | Secure and opaque type library providing secure data protection of variables | |
KR101597251B1 (ko) | 소프트웨어 애플리케이션들의 화이트박스 구현들을 생성하는 시스템 및 방법 | |
EP1546892B1 (en) | Protecting mobile code against malicious hosts cross references to related applications | |
CN106599628B (zh) | 一种基于模块钩子的Python字节码文件保护方法 | |
US8286251B2 (en) | Obfuscating computer program code | |
KR101687439B1 (ko) | 소프트웨어 무결성을 보장하기위한 프로세서 실행 방법 | |
US7421586B2 (en) | Protecting mobile code against malicious hosts | |
US20090178022A1 (en) | Systems and methods for watermarking software and other media | |
US20030018906A1 (en) | Method and system for protecting software applications against static and dynamic software piracy techniques | |
Piao et al. | Server‐based code obfuscation scheme for APK tamper detection | |
US20110271350A1 (en) | method for protecting software | |
JP6670318B2 (ja) | ソフトウェアアプリケーションにおける分類及びirmの実現 | |
CN111680272A (zh) | 一种字节码加密和解密方法及装置 | |
Bouffard et al. | Reversing the operating system of a Java based smart card | |
JP2886969B2 (ja) | プログラム変換方法 | |
CN116089983B (zh) | 一种py文件的加固编译方法及装置 | |
US20070061790A1 (en) | Partially compiled data security software | |
Lee et al. | Classification and analysis of security techniques for the user terminal area in the internet banking service | |
JP6906057B2 (ja) | ソフトウェアコードをセキュアにするための方法 | |
US20220207166A1 (en) | Hidden information-based security system for electronic documents | |
Lanet et al. | Memory forensics of a java card dump | |
US20190121987A1 (en) | Light-weight context tracking and repair for preventing integrity and confidentiality violations | |
KR20080096054A (ko) | 데이터의 암호화 저장 방법 및 암호화된 데이터의 판독방법 | |
Lackner et al. | Countering type confusion and buffer overflow attacks on Java smart cards by data type sensitive obfuscation | |
CN116235174A (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 |