一种Python脚本混淆、水印的方法及装置制造方法及图纸

技术编号:18592619 阅读:41 留言:0更新日期:2018-08-04 20:05
本发明专利技术提供一种Python脚本混淆、水印的方法及装置,其中,一种Python脚本混淆、水印的装置,包括脚本源代码编译单元、解析单元、规则记录单元、优先权设定单元、co_varnames生成单元、封装单元、Loader生成单元、加密单元以及pyc文件生成单元,本发明专利技术还提供了一种Python脚本混淆、水印的方法,以提高python程序模块的安全性,并且保护编译后Python脚本不被反编译、水印不能被篡改,且兼容CPython、Jython、IronPython、PyPy等各种python解释器。

A method and device for Python script confusion and watermark

The invention provides a method and device for Python script confusion and watermark, in which a Python script confusion and watermark device includes the script source code compilation unit, the parsing unit, the rule recording unit, the priority setting unit, the co_varnames generating unit, the package single element, the Loader generation unit, the encryption unit and the encryption unit. PyC file generating unit, the invention also provides a Python script confusion, watermark method to improve the security of the python program module, and protect the compiled Python script from decompile, watermark can not be tampered, and compatible with CPython, Jython, IronPython, PyPy and other Python interpreters.

【技术实现步骤摘要】
一种Python脚本混淆、水印的方法及装置
本专利技术属于Python脚本处理技术,具体涉及一种Python脚本混淆、水印的方法及装置。
技术介绍
Python是一门编程语言,具有开发速度快,第三方扩展完善,代码编写量少等优点,由于Python的上述优点符合对开发效率要求,故Python成为众多软件开发热门语言之一;一般情况下应用程序发布时会将Python代码编译,来加快处理速度和隐藏源代码,用以保证Python代码的安全性。Python的上述优点,使得Python大大方便了软件的开发,但是,由于Python的源代码只能编译,而不能加密,而使得Python代码一直存在被盗用的问题;并且Python代码编译出的二进制文件可以使用第三方软件反编译回Python源代码,从而使得Python代码存在的被盗用的问题得不到有效的解决。
技术实现思路
有鉴于此,本专利技术的主要目的是提供一种Python脚本混淆、水印的方法及装置。本专利技术采用的技术方案是:一种Python脚本混淆、水印的方法,包括如下步骤:第一步:根据要保护python脚本源代码编译单元生成所有PyCodeObject;第二步:为PyCodeObject的字节码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的跳转顺序和跳转的条件记录规则并设定优先权。优选的,在第三步中,按照第二步记录规则和设定优先权连接第二步的中OPBLOCK,若为非跳转OPBLOCK,则生成一个JUMP_ABSOLUTE连接其顺序并执行下一个OPBLOCK;若为无条件直接跳转OPBLOCK,则修正其直接跳转的位置;若为无条件相对跳转OPBLOCK,则将相对跳转修改为直接跳转并修正其直接跳转的位置;若为有条件跳转OPBLOCK,则计算其跳转的位置,生成新的直接跳转到该位置,并修改条件跳转到新直接跳转;若直接跳转超出65535则需要使用EXTENDED_ARG来扩展JUMP_ABSOLUTE指令;最后在跳转指令后填充0-5个随机JUNKCODE字节,通过指令乱序,将指令从物理空间上彻底打乱,是反汇编工具无法顺序解析字节码。优选的,在第七步中,生成混淆后的pyc文件的具体方法为:通过types.CodeType组装混淆后Loader的PyCodeObject,再通过marshal.dumps序列化为字符串,最后在头部添加imp.get_magic()和时间戳保存pyc文件。一种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文件。本专利技术提供了一种Python脚本混淆、水印的方法和装置,以提高python程序模块的安全性,并且保护编译后Python脚本不被反编译、水印不能被篡改,且兼容CPython、Jython、IronPython、PyPy等各种python解释器。附图说明图1为本专利技术中PyCodeObject的嵌套结构原理图;图2为本专利技术的方法流程图。具体实施方式下面将结合附图以及具体实施例来详细说明本专利技术,在此本专利技术的示意性实施例以及说明用来解释本专利技术,但并不作为对本专利技术的限定。参照图1,本专利技术提供了一种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的PyCodeObject进行压缩;并以Loader混淆后PyCodeObject的字节码co_code作为密钥对压缩后的数据进行加密,pyc文件生成单元,生成混淆后的pyc文件。本专利技术还提供了一种Python脚本混淆、水印的方法,包括如下步骤:第一步:根据要保护python脚本源代码编译单元生成所有PyCodeObject;第二步:为PyCodeObject的字节码co_code利用解析单元按照解析的时间顺序依次生成若干OPBLOCK实例,判断OPBLOCK实例中的opcode是否具备跳转,并记录跳转规则;参照表1,在第二步中跳转规则为:判断跳转是否为相对跳转或者是否直接跳转、跳转是否为无条件或者是否有条件跳转,按照OPBLOCK的跳转顺序和跳转的条件记录规则并设定优先权。表1为跳本文档来自技高网...

【技术保护点】
1.一种Python脚本混淆、水印的方法,其特征在于,包括如下步骤:第一步:根据要保护python脚本源代码编译单元生成所有PyCodeObject;第二步:为PyCodeObject的字节码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文件。...

【技术特征摘要】
1.一种Python脚本混淆、水印的方法,其特征在于,包括如下步骤:第一步:根据要保护python脚本源代码编译单元生成所有PyCodeObject;第二步:为PyCodeObject的字节码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文件。2.根据权利要求1所述的Python脚本混淆、水印的方法,其特征在于,在第二步中跳转规则为:判断跳转是否为相对跳转或者是否直接跳转、跳转是否为无条件或者是否有条件跳转,按照OPBLOCK的跳转顺序和跳转的条件记录规则并设定优先权。3.根据权利要求1所述的Python脚本混淆、水印的方法,其特征在于,在第三步中,按照第二步记录规则和设定优先权连接第二步的中OPBLOCK,若为非跳转OPBLOCK,则生成一个JUMP_ABSOLUTE连接其顺序并执行下一个OPBLOCK;若为无条件直接跳转OPBLOCK,则修正其直接跳转的位置;若为无条件相对跳转OPBLOCK...

【专利技术属性】
技术研发人员:赵培源刘浩杰
申请(专利权)人:西安四叶草信息技术有限公司
类型:发明
国别省市:陕西,61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1