[发明专利]Go语言源代码混淆方法、系统、终端及存储介质在审
申请号: | 202110961967.6 | 申请日: | 2021-08-20 |
公开(公告)号: | CN113849781A | 公开(公告)日: | 2021-12-28 |
发明(设计)人: | 齐增田 | 申请(专利权)人: | 苏州浪潮智能科技有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14;G06F8/30 |
代理公司: | 济南舜源专利事务所有限公司 37205 | 代理人: | 孙玉营 |
地址: | 215100 江苏省苏州*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | go 语言 源代码 混淆 方法 系统 终端 存储 介质 | ||
1.一种Go语言源代码混淆方法,其特征在于,包括:
读取源代码,构建所述源代码的抽象语法树;
利用第一加密函数将抽象语法树的包名加密;
利用二进制运算技术将抽象语法树中的字符串混淆为字节码;
利用第二加密函数对抽象语法树中的符号的类型定义、函数定义和相对路径进行加密;
利用Go编译工具对经加密混淆处理后的抽象语法树进行编译得到混淆的二进制程序。
2.根据权利要求1所述的方法,其特征在于,读取源代码,构建所述源代码的抽象语法树,包括:
利用Go语音标准库中的构建抽象语法树的工具对源代码进行解析,如果源代码存在错误则返回错误信息;如果解析通过,返回抽象语法树结构,所述抽象语法树结构包含包的详细信息、在当前编译环境中的详细路径、每个语法节点的结构信息。
3.根据权利要求1所述的方法,其特征在于,利用加密函数将抽象语法树的包名加密,包括:
确定源代码的根目录,并遍历所述根目录下的所有包目录,采集包目录的相对路径;
利用第一加密函数对包目录的相对路径进行加密,并将得到的加密路径作为包名;
根据包名按照原目录架构创建目录,得到加密后的目录结构;
将抽象语法树的初始包名更新为加密后的目录结构的对应包名。
4.根据权利要求1所述的方法,其特征在于,利用二进制运算技术将抽象语法树中的字符串混淆为字节码,包括:
在抽象语法树中通过节点类型查找字符串;
如果字符串为常量,则将字符串转换为保留字格式。
5.根据权利要求4所述的方法,其特征在于,将字符串转换为保留字格式,包括:
利用随机数生成函数生成与字符串同等字符数量的字节码;
依次将每个字符串和对应位置的随机字节码进行异或运算,生成中间字符串;
依次将每个字节码与对应位置的中间字符串进行异或运算,生成一串混淆字节码。
6.根据权利要求1所述的方法,其特征在于,利用加密函数对抽象语法树中的符号的类型定义、函数定义和相对路径进行加密,包括:
获取源代码的类型定义结构,采集类型定义结构的绝对路径,在绝对路径下的文件中读取函数定义;
遍历源代码,获取函数定义的接收类型,根据接收类型定位相对路径;
利用第二加密函数对抽象结构树中对应的类型定义结构、函数定义和相对路径进行加密。
7.根据权利要求1所述的方法,其特征在于,所述第一加密函数和第二加密函数均为客制化函数,客制化函数包括但不限于哈希函数、编码转换函数、组合函数中的任一种。
8.一种Go语言源代码混淆系统,其特征在于,包括:
目标构建单元,用于读取源代码,构建所述源代码的抽象语法树;
包名加密单元,用于利用第一加密函数将抽象语法树的包名加密;
字符混淆单元,用于利用二进制运算技术将抽象语法树中的字符串混淆为字节码;
符号加密单元,用于利用第二加密函数对抽象语法树中的符号的类型定义、函数定义和相对路径进行加密;
目标编译单元,用于利用Go编译工具对经加密混淆处理后的抽象语法树进行编译得到混淆的二进制程序。
9.一种终端,其特征在于,包括:
处理器;
用于存储处理器的执行指令的存储器;
其中,所述处理器被配置为执行权利要求1-7任一项所述的方法。
10.一种存储有计算机程序的计算机可读存储介质,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110961967.6/1.html,转载请声明来源钻瓜专利网。