[发明专利]一种基于代码虚拟化的Python程序加密保护系统与方法有效
申请号: | 201911189495.6 | 申请日: | 2019-11-28 |
公开(公告)号: | CN110929234B | 公开(公告)日: | 2023-03-24 |
发明(设计)人: | 施羊梦燊;费奕铭;鞠方舟 | 申请(专利权)人: | 施羊梦燊;费奕铭;鞠方舟 |
主分类号: | G06F21/12 | 分类号: | G06F21/12;G06F21/14;G06F21/60 |
代理公司: | 济南诚智商标专利事务所有限公司 37105 | 代理人: | 朱晓熹 |
地址: | 211899 江苏省南京市浦口区江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 代码 虚拟 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文件。
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文件头。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于施羊梦燊;费奕铭;鞠方舟,未经施羊梦燊;费奕铭;鞠方舟许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911189495.6/1.html,转载请声明来源钻瓜专利网。