买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:北京大学
摘要:本发明公开了一种基于LLVM的虚拟机保护方法及系统,通过实现自定义指令集与程序解释器,在LLVM中间代码层面实现虚拟机保护。本发明通过将源代码转化为LLVM中间表示,遍历整个IR程序获得程序所有的函数和基本块作为基本单位,为所有基本单位进行依赖分析并根据依赖分析结果对基本单位进行切分得到基本指令,将基本指令进行重组得到新基本块,并绑定操作码,根据新基本块创建操作码数组和解释器,通过解释器完成整个程序的控制逻辑从而达到虚拟机保护的目的。相比传统静态混淆技术,本发明具有更高的反混淆能力;相比传统的虚拟机保护技术,本发明在保证高混淆强度的情况下,极大地降低了混淆所需要的时间、空间开销。
主权项:1.一种基于LLVM的虚拟机保护方法,通过将源代码编译为LLVM中间表示,遍历整个LLVM中间表示程序获得程序所有的函数和基本块作为基本单位,为所有基本单位进行依赖分析并根据依赖分析结果对基本单位进行切分得到基本指令,将基本指令进行重组得到新基本块并绑定操作码,根据新基本块创建操作码数组和解释器,通过解释器完成整个程序的控制逻辑,从而达到虚拟机保护的目的;具体包括如下步骤:1将源代码转化成LLVM中间表示,即使用编译器clang++将源代码编译链接成LLVM可分析的单个.bc文件;2根据步骤1得到的源代码的.bc文件,获取源程序中的函数和基本块,即在整个程序层面和程序中的所有函数层面进行遍历,获取到程序中的所有函数,以及函数中的所有基本块,并将这些信息作为基本单位进行保存;3根据步骤2中得到的基本单位信息,对基本单位的每一条指令进行遍历,每条指令有一个标志位来标识是否经过了依赖分析,其中指令信息存储在一个向量中,表示为:vectorInstruction;标志信息存储在一个map中,表示为:mapInstruction,bool,map的key值代表一条指令,value值代表该指令是否经过了依赖分;对指令信息进行倒序遍历,拿到一个没有经过依赖分析的指令进行步骤4的依赖分析;4对于没有经过依赖分析的指令,从该条指令开始,分析得到该指令的所有依赖指令,并将所有依赖指令放进同一个分组,该分组代表一个最小的不可分割的单位;5对步骤4得到的分组进行指令重组,将分组中的指令包装成为一个新基本块;6为新基本块生成一个操作码,该操作码与新基本块是唯一对应关系;删除原基本单位中已经被加入新基本块的所有指令,防止指令重复;7收集步骤6中生成的所有操作码,组成一个操作码集合,将该集合的名称随机化之后,将该集合作为程序的一部分加入到源代码中,生成操作码数组;8对每一个基本单位设计一个解释器用来控制该基本单位的运行,解释器根据当前的操作码索引,找到当前需要执行操作码,利用操作码跳转到步骤6中该操作码唯一对应的新基本块中去执行,执行结束之后会重新跳回解释器,直到程序结束。
全文数据:
权利要求:
百度查询: 北京大学 一种基于LLVM的虚拟机保护方法及系统
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。