[发明专利]一种Python脚本混淆、水印的方法及装置有效
| 申请号: | 201810139504.X | 申请日: | 2018-02-11 |
| 公开(公告)号: | CN108363911B | 公开(公告)日: | 2021-10-29 |
| 发明(设计)人: | 赵培源;刘浩杰 | 申请(专利权)人: | 西安四叶草信息技术有限公司 |
| 主分类号: | G06F21/16 | 分类号: | G06F21/16;G06F21/14;G06F21/12 |
| 代理公司: | 西安泛想力专利代理事务所(普通合伙) 61260 | 代理人: | 李思源 |
| 地址: | 710077 陕西省西安市高新区锦*** | 国省代码: | 陕西;61 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 python 脚本 混淆 水印 方法 装置 | ||
1.一种Python脚本混淆、水印的方法,其特征在于,包括如下步骤:
第一步:根据要保护python脚本源代码编译单元生成PyCodeObject;
第二步:获取PyCodeObject的字节码co_code,利用解析单元按照解析的时间顺序依次生成co_code的OPBLOCK实例,判断OPBLOCK实例中的opcode是否具备跳转,并记录跳转规则;
第三步:依据记录的跳转规则以及生成的OPBLOCK实例,保留生成的OPBLOCK实例的时间顺序,将剩余的OPBLOCK实例随机排列;从物理空间上彻底打乱OPBLOCK实例,使反汇编工具无法顺序解析字节码;
第四步:获取PyCodeObject的局部变量名元组co_varnames,替换为不合法的变量名;
第五步:通过types.CodeType递归组装步骤三生成的co_code与步骤四生成的co_varnames;
第六步:生成混淆的Loader,对Loader源代码进行编译形成Loader+0,并再次对Loader+0的PyCodeObject进行压缩;并以Loader混淆后PyCodeObject的字节码co_code作为密钥对压缩后的数据进行加密,最终替换Loader中的compressed_encrypted_data以便Loader在启动后动态解密和解压;
第七步:生成混淆后的pyc文件;
在第二步中跳转规则为:判断跳转是否为相对跳转或者是否直接跳转、跳转是否为无条件或者是否有条件跳转,按照OPBLOCK的跳转顺序和跳转的条件记录规则并设定优先权。
2.根据权利要求1所述的Python脚本混淆、水印的方法,其特征在于,在第三步中,按照第二步记录规则和设定优先权连接第二步中的OPBLOCK,若为非跳转OPBLOCK,则生成一个JUMP_ABSOLUTE连接其顺序并执行下一个OPBLOCK;若为无条件直接跳转OPBLOCK,则修正其直接跳转的位置;若为无条件相对跳转OPBLOCK,则将相对跳转修改为直接跳转并修正其直接跳转的位置;若为有条件跳转OPBLOCK,则计算其跳转的位置,生成新的直接跳转到该位置,并修改条件跳转到新直接跳转;若直接跳转超出65535则需要使用EXTENDED_ARG来扩展JUMP_ABSOLUTE指令;最后在跳转指令后填充0-5个随机JUNKCODE字节,通过指令乱序,将指令从物理空间上彻底打乱,使反汇编工具无法顺序解析字节码。
3.根据权利要求1所述的Python脚本混淆、水印的方法,其特征在于,在第七步中,生成混淆后的pyc文件的具体方法为:通过types.CodeType组装混淆后Loader的PyCodeObject,再通过marshal.dumps序列化为字符串,最后在头部添加imp.get_magic()和时间戳保存pyc文件。
4.一种Python脚本混淆、水印的装置,其特征在于,包括
脚本源代码编译单元,根据要保护python脚本源代码编译生成所有PyCodeObject,
解析单元,对PyCodeObject的字节码co_code按照时间顺序依次解析生成每个OPBLOCK实例,
规则记录单元,记录OPBLOCK实例中的opcode跳转规则;
优先权设定单元,根据OPBLOCK实例中的opcode跳转规则设定OPBLOCK实例跳转权限,
co_varnames生成单元,获取PyCodeObject的局部变量名元组co_varnames,
封装单元,通过types.CodeType递归组装步骤三生成的co_code与步骤四生成的co_varnames,
Loader生成单元,依据封装单元组装的步骤三生成的co_code与步骤四生成的co_varnames生成Loader;
加密单元:对Loader源代码进行编译形成Loader+0,并再次对Loader+0的PyCodeObject进行压缩;并以Loader混淆后PyCodeObject的字节码co_code作为密钥对压缩后的数据进行加密,
pyc文件生成单元,生成混淆后的pyc文件。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安四叶草信息技术有限公司,未经西安四叶草信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810139504.X/1.html,转载请声明来源钻瓜专利网。





