[发明专利]Go语言源代码混淆方法、系统、终端及存储介质在审
申请号: | 202110961967.6 | 申请日: | 2021-08-20 |
公开(公告)号: | CN113849781A | 公开(公告)日: | 2021-12-28 |
发明(设计)人: | 齐增田 | 申请(专利权)人: | 苏州浪潮智能科技有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14;G06F8/30 |
代理公司: | 济南舜源专利事务所有限公司 37205 | 代理人: | 孙玉营 |
地址: | 215100 江苏省苏州*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | go 语言 源代码 混淆 方法 系统 终端 存储 介质 | ||
本发明提供一种Go语言源代码混淆方法、系统、终端及存储介质,包括:读取源代码,构建所述源代码的抽象语法树;利用第一加密函数将抽象语法树的包名加密;利用二进制运算技术将抽象语法树中的字符串混淆为字节码;利用第二加密函数对抽象语法树中的符号的类型定义、函数定义和相对路径进行加密;利用Go编译工具对经加密混淆处理后的抽象语法树进行编译得到混淆的二进制程序。本发明不只是对字符串进行了混淆,还对类型以及包名进行混淆,极大地增加了程序的复杂度,填补了Go语言的混淆技术的空白,可以有效防止静态的逆向分析,提高产品的安全性,可以有效防止程序产品被逆向破解,避免不必要的财产损失。
技术领域
本发明涉及软件开发技术领域,具体涉及一种Go语言源代码混淆方法、系统、终端及存储介质。
背景技术
Go语言是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go被誉为云计算开发语言,因为它能够一次编译到处运行,由于编译后的二进制程序只有一个可执行文件,不存在依赖库,Go语言能够做到语言级别的跨平台支持。
但是也由于Go语言原生的跨平台特性,编译后的二进制文件中包含大量的源代码信息,逆向工程师可在二进制文件中轻易找到源代码编译时依赖的包,使用的字符串和符号信息,这些能够帮助逆向工程师更加容易地破解程序。
与其他跨平台语言对比,比如Python,Lua,Java等等,它们是解释型语言,用他们编写的程序运行时,需要借助中间字节码进行差异性处理,以达到跨平台的目的。针对此种解释型语言使用的混淆技术是对字节码进行的混淆,不是二进制的。Go语言是静态型语言,编译时直接生成机器代码,不存在中间字节码转换。因此,解释型语言的混淆技术不适用于Go语言,不能达到在二进制层次混淆的目的,只能混淆字节码,但是在逆向时,操作的文件是二进制的,不是字节码的,混淆就失去了作用。
编译型的语言包括C,C++,它们的语法结构与Go语言截然不同,不存在包结构,因此,对于C和C++混淆的技术不能应用在Go语言上。
为了弥补Go语言源代码开发的程序容易被逆向破解的问题,本发明提供一种Go语言源代码混淆方法、系统、终端及存储介质。
发明内容
针对现有技术存在的由于Go语言源代码没有适用的混淆方法导致基于Go语言源代码的程序容易被逆向破解,本发明提供一种Go语言源代码混淆方法、系统、终端及存储介质,以解决上述技术问题。
第一方面,本发明提供一种Go语言源代码混淆方法,包括:
读取源代码,构建所述源代码的抽象语法树;
利用第一加密函数将抽象语法树的包名加密;
利用二进制运算技术将抽象语法树中的字符串混淆为字节码;
利用第二加密函数对抽象语法树中的符号的类型定义、函数定义和相对路径进行加密;
利用Go编译工具对经加密混淆处理后的抽象语法树进行编译得到混淆的二进制程序。
进一步的,读取源代码,构建所述源代码的抽象语法树,包括:
利用Go语音标准库中的构建抽象语法树的工具对源代码进行解析,如果源代码存在错误则返回错误信息;如果解析通过,返回抽象语法树结构,所述抽象语法树结构包含包的详细信息、在当前编译环境中的详细路径、每个语法节点的结构信息。
进一步的,利用加密函数将抽象语法树的包名加密,包括:
确定源代码的根目录,并遍历所述根目录下的所有包目录,采集包目录的相对路径;
利用第一加密函数对包目录的相对路径进行加密,并将得到的加密路径作为包名;
根据包名按照原目录架构创建目录,得到加密后的目录结构;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110961967.6/2.html,转载请声明来源钻瓜专利网。