代码加密方法、装置、程序产品以及电子设备与流程

专利2025-11-05  23


本技术涉及软件安全,具体而言,涉及一种代码加密方法、装置、程序产品以及电子设备。


背景技术:

1、python是目前软件开发技术领域流行的开发语言之一,python是一种解释型语言,其代码在运行时才会被解释器执行,这使得python代码难以像c、c++等编译型语言编写的代码那样能够通过编译器进行保护,并且,python具有动态类型、动态绑定、动态加载等特性,这些python特性使得python代码在运行时能够被动态地修改、添加和删除,攻击者能够利用python的这些特性来动态获取代码的运行逻辑,另外,python的开源特点还能够让攻击者根据其源代码来对python代码进行破解、修改和复制,例如,攻击者能够根据python解释器的代码逻辑将python解释器中的python字节码反向恢复为python源代码,从而造成现有技术中的python代码的安全性低的技术问题。

2、针对上述现有技术中的python代码难以保护,安全性低的技术问题,目前尚未提出有效的解决方案。


技术实现思路

1、本技术提供了一种代码加密方法、装置、程序产品以及电子设备,以至少解决python语言在运行过程中能够动态编辑和python解释器的开源特性所导致的python代码的安全性低的技术问题。

2、根据本技术的一个方面,提供了一种代码加密方法,包括:对目标代码进行编译,得到目标代码对应的代码对象,其中,目标代码为需要保护的python代码;将代码对象加密为目标字节码,其中,目标字节码用于以字节码的形式表征加密后的目标代码,并且目标字节码中包括加密过程中动态生成的密钥信息。

3、可选地,在将代码对象加密为目标字节码的过程中,代码加密方法还包括:对代码对象的第一属性进行扫描,得到l个常量,其中,l为正整数,第一属性用于表征代码对象的常量元组;在l个常量中的第i个常量为函数类型的情况下,对第i个常量所嵌入的代码对象进行递归加密;在第i个常量为字符串类型或数字类型的情况下,对第i个常量进行异或加密,其中,i为小于或等于l的正整数。

4、可选地,在第i个常量为字符串类型的情况下,对第i个常量进行异或加密,包括:将第i个常量划分为m个字节,其中,m为正整数;动态生成m个异或密钥,其中,m个异或密钥与m个字节一一对应,并且m个异或密钥中的第m+1个异或密钥是基于预设规则对第m个异或密钥进行更新得到的,其中,m为小于m的正整数;对m个异或密钥中的每个异或密钥和该异或密钥对应的字节进行异或处理,得到m个字节对应的所有异或结果;将m个字节对应的所有异或结果作为第i个常量的异或加密结果。

5、可选地,在将代码对象加密为目标字节码的过程中,代码加密方法还包括:对代码对象的第二属性进行扫描,得到n个字节码指令,其中,n为正整数,第二属性用于表征代码对象的字节码指令序列;将对代码对象的常量进行异或加密的过程中动态生成的最后一个异或密钥作为指令密钥的初始值,其中,指令密钥用于对字节码指令进行异或加密,字节码指令对应的冗余字节用于存储指令密钥的最新值;在n个字节码指令中的第j个字节码指令包括参数的情况下,依据指令密钥的最新值,对第j个字节码指令进行异或加密,并且禁止对指令密钥的最新值进行更新,其中,j为小于或等于n的正整数。

6、可选地,在将代码对象加密为目标字节码的过程中,代码加密方法还包括:在第j个字节码指令不包括参数的情况下,依据指令密钥的最新值对第j个字节码指令进行异或加密,并且将指令密钥的最新值更新为从预设范围中选取的随机数。

7、可选地,在将代码对象加密为目标字节码的过程中,代码加密方法还包括:判断密钥数量是否大于或等于第一预设阈值,其中,密钥数量为对字节码指令进行异或加密的过程中动态生成的指令密钥的总数量;在密钥数量大于或等于第一预设阈值的情况下,依据p个指令密钥生成目标密钥,其中,p个指令密钥为所有指令密钥中的生成时刻排名为前p个的指令密钥,p等于第一预设阈值;依据目标密钥对第一加密结果进行对称加密,其中,第一加密结果为通过第一集合中的指令密钥对代码对象的关键属性进行异或加密得到的结果,代码对象的关键属性至少包括第二属性,第一集合为所有指令密钥中除p个指令密钥之外的指令密钥组成的集合。

8、可选地,在将代码对象加密为目标字节码的过程中,代码加密方法还包括:判断密钥数量是否大于或等于第二预设阈值,其中,第二预设阈值大于第一预设阈值;在密钥数量大于或等于第二预设阈值的情况下,依据q个指令密钥生成目标向量,其中,q为正整数,q个指令密钥为所有指令密钥中的生成时刻排名为第p+1个至第r个的指令密钥,p等于第一预设阈值,r等于第二预设阈值;依据目标向量和目标密钥对第二加密结果进行对称加密,其中,第二加密结果为通过第二集合中的指令密钥对代码对象的关键属性进行异或加密得到的结果,第二集合为所有指令密钥中除p个指令密钥和q个指令密钥之外的指令密钥组成的集合。

9、可选地,在将代码对象加密为目标字节码之后,代码加密方法还包括:在将目标字节码加载至解释器之后,检测目标字节码中的需要调用的函数的加密标识,其中,函数的加密标识用于表征函数对应的代码对象是否被加密;在函数的加密标识为预设标识的情况下,通过调用函数对应的解密函数对函数对应的字节码进行解密,函数对应的解密函数为解密拓展库中存储的函数;检测函数的调用次数,其中,调用次数用于表征在函数被未完成运行的其他函数所调用的剩余次数;在调用次数等于预设次数的情况下,对函数对应的解密结果进行重新加密。

10、根据本技术的另一个方面,还提供了一种代码加密装置,包括:编译单元,用于对目标代码进行编译,得到目标代码对应的代码对象,其中,目标代码为需要保护的python代码;加密单元,用于将代码对象加密为目标字节码,其中,目标字节码用于以字节码的形式表征加密后的目标代码,并且目标字节码中包括加密过程中动态生成的密钥信息。

11、根据本技术的另一个方面,还提供了一种计算机程序产品,该计算机程序产品中存储有计算机程序,其中,在计算机程序运行时控制计算机程序产品执行上述任意一项的代码加密方法。

12、根据本技术的另一个方面,还提供了一种电子设备,其中,电子设备包括一个或多个处理器和存储器,存储器用于存储一个或多个程序,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器实现上述任意一项的代码加密方法。

13、在本技术中,在需要对python代码进行保护时,首先对目标代码进行编译,得到目标代码对应的代码对象,其中,目标代码为需要保护的python代码,之后,本技术将代码对象加密为目标字节码,其中,目标字节码用于以字节码的形式表征加密后的目标代码,并且目标字节码中包括加密过程中动态生成的密钥信息。

14、由上述内容可知,本技术的技术方案通过对python代码对应的字节码进行加密的方式,以实现对python代码进行保护的目的。本技术首先将需要保护的python代码编译为代码对象,之后,本技术将代码对象加密为目标字节码,从而得到python代码对应的已经过加密的字节码文件(即目标字节码),从而实现了对python代码的保护,同时,对比现有技术中未对python代码进行保护,直接将python代码转换为其对应的字节码文件的方式,本技术基于字节码的加密技术不会改变原来的python代码的运行逻辑,即本技术的技术方案对python代码进行加密的成本较低,不会造成额外的高成本的资源消耗。

15、由此可见,本技术采用对python代码对应的字节码进行加密的方式,实现了对python代码进行保护的目的,即使攻击者在python代码的运行过程中对python代码对应的中间态文件进行了修改,由于攻击者无法获取密钥信息,经过攻击者修改后的python代码也无法正常运行,从而实现了提高python代码的安全性的技术效果,进而解决了python语言在运行过程中能够动态编辑和python解释器的开源特性所导致的python代码的安全性低的技术问题。


技术特征:

1.一种代码加密方法,其特征在于,包括:

2.根据权利要求1所述的代码加密方法,其特征在于,在将所述代码对象加密为目标字节码的过程中,所述代码加密方法还包括:

3.根据权利要求2所述的代码加密方法,其特征在于,在所述第i个常量为字符串类型的情况下,对所述第i个常量进行异或加密,包括:

4.根据权利要求1所述的代码加密方法,其特征在于,在将所述代码对象加密为目标字节码的过程中,所述代码加密方法还包括:

5.根据权利要求1所述的代码加密方法,其特征在于,在将所述代码对象加密为目标字节码的过程中,所述代码加密方法还包括:

6.根据权利要求1或5所述的代码加密方法,其特征在于,在将所述代码对象加密为目标字节码的过程中,所述代码加密方法还包括:

7.根据权利要求1所述的代码加密方法,其特征在于,在将所述代码对象加密为目标字节码之后,所述代码加密方法还包括:

8.一种代码加密装置,其特征在于,包括:

9.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,其中,在所述计算机程序运行时控制所述计算机程序产品执行权利要求1至7中任意一项所述的代码加密方法。

10.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至7中任意一项所述的代码加密方法。


技术总结
本申请公开了一种代码加密方法、装置、程序产品以及电子设备,涉及软件安全技术领域,其中,该方法包括:首先,对目标代码进行编译,得到目标代码对应的代码对象,其中,目标代码为需要保护的Python代码,之后,将代码对象加密为目标字节码,其中,目标字节码用于以字节码的形式表征加密后的目标代码,并且目标字节码中包括加密过程中动态生成的密钥信息。本申请解决了Python语言在运行过程中能够动态编辑和Python解释器的开源特性所导致的Python代码的安全性低的技术问题。

技术研发人员:陈莹,何伊圣,张王俊杰,朱志权,请求不公布姓名
受保护的技术使用者:山石网科通信技术股份有限公司
技术研发日:
技术公布日:2024/11/11
转载请注明原文地址: https://tieba.8miu.com/read-17272.html

最新回复(0)