[发明专利]一种基于LLVM的程序控制流混淆方法及装置在审
申请号: | 201811550460.6 | 申请日: | 2018-12-18 |
公开(公告)号: | CN109784010A | 公开(公告)日: | 2019-05-21 |
发明(设计)人: | 许伟;陈国庆 | 申请(专利权)人: | 武汉极意网络科技有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14;G06F8/41 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;吴欢燕 |
地址: | 430000 湖北省武汉市东湖开发区大学*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基本块 中间代码文件 程序控制流 集合 编译 混淆 目标二进制文件 目标函数 判定结果 编译期 控制流 遍历 预设 调用 判定 语言 分析 | ||
本发明实施例提供一种基于LLVM的程序控制流混淆方法及装置。其中,方法包括:提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。本发明实施例提供的方法及装置,通过在编译期改变LLVM中间代码文件,从而复杂化控制流,不利于逆向分析,提高了程序的安全性,并支持针对所有可以原生调用C语言库的语言。
技术领域
本发明实施例涉及计算机安全技术领域,尤其涉及一种基于LLVM的程序控制流混淆方法及装置。
背景技术
控制流也即代码逻辑,是指程序执行时代码的执行顺序。在各种代码逻辑的作用下,程序会沿着特定的逻辑顺序执行。一般代码逻辑包括有\无条件分支、循环、函数调用等。在正常情况下程序的代码逻辑非常好理解,开发过程中有各种人为的行为使代码逻辑清晰,便于维护和扩展。但同时,对于逆向行为来说,清晰的代码逻辑会导致很容易抓住程序重点,加快破解速度。
为了增加程序破解者对程序的逆向分析难度,降低程序的破解速度或防止对程序进行破解,需要保护程序内部代码逻辑,而现有技术中,大部分解决方法都针对于java语言,而对于C语言库的语言,目前还没有有效的解决方法。
发明内容
针对现有技术中存在的技术问题,本发明实施例提供一种基于LLVM的程序控制流混淆方法及装置。
第一方面,本发明实施例提供一种基于LLVM的程序控制流混淆方法,包括:
提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;
若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;
将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
第二方面,本发明实施例提供一种基于LLVM的程序控制流混淆装置,包括:
提取模块,用于提取LLVM编译生成的中间代码文件中目标函数中的基本块,组成基本块集合;
复杂化处理模块,用于若计数值大于预设阈值,则遍历所述基本块集合中的每一基本块并判定所述基本块是否需进行复杂化处理,当判定结果为需进行复杂化处理时,对所述基本块进行复杂化处理;
编译模块,用于将所述基本块集合中无需进行复杂化处理的基本块和复杂化处理后生成的复杂块编译为目标二进制文件。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所提供的方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
本发明实施例提供的一种基于LLVM的程序控制流混淆方法及装置,通过在编译期改变LLVM中间代码文件,从而复杂化控制流,不利于逆向分析,提高了程序的安全性,并支持针对所有可以原生调用C语言库的语言,包括但不仅限C、C++、C#、Objective-C、Swift、Rust和Kotlin等开发语言。
附图说明
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉极意网络科技有限公司,未经武汉极意网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811550460.6/2.html,转载请声明来源钻瓜专利网。