[发明专利]基于不透明谓词和有限状态机加固源代码的方法及装置有效
申请号: | 201810146259.5 | 申请日: | 2018-02-12 |
公开(公告)号: | CN108416191B | 公开(公告)日: | 2021-11-19 |
发明(设计)人: | 阚志刚;陈彪;王文洋;李世杰;尉爽生;卢佐华 | 申请(专利权)人: | 北京梆梆安全科技有限公司 |
主分类号: | G06F21/12 | 分类号: | G06F21/12;G06F21/14 |
代理公司: | 北京国昊天诚知识产权代理有限公司 11315 | 代理人: | 许志勇 |
地址: | 100083 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 不透明 谓词 有限状态机 加固 源代码 方法 装置 | ||
1.一种基于不透明谓词和有限状态机加固源代码的方法,其特征在于,包括:
定位应用程序的源代码中的第一条件变量;
在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定;
利用所述第二条件变量替换所述第一条件变量;
基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态,其中,每个代码块以跳转逻辑结束;
基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机,所述代码块跳转状态机用于表征各个所述代码块对应的各个状态之间的跳转关系;
将代码块中的跳转逻辑通过所述代码块跳转状态机实现,以生成应用程序加固后的源代码;
所述方法还包括对所述代码块跳转状态机进行加密,所述对所述代码块跳转状态机进行加密,包括:
根据各个所述代码块对应的各个状态之间的跳转关系,确定各个状态的跳转顺序;根据所述跳转顺序为各个状态配置序列号;根据各个状态之间的跳转关系及各个所述状态对应的序列号,建立跳转表并进行加密。
2.如权利要求1所述的方法,
所述代码块跳转状态机为代码块跳转函数,所述将代码块中的跳转逻辑通过所述代码块跳转状态机实现,包括:
通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,其中,所述代码块跳转函数的参数包括代码块标识和跳转条件,所述代码块跳转函数用于在所述代码块执行到所述代码块跳转函数时,基于跳转条件跳转到目标代码块。
3.如权利要求2所述的方法,所述通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,包括:
在每个所述代码块的结束位置处嵌入所述代码块跳转函数;其中,所述代码块跳转函数的参数只有一个用于标识当前代码块的状态;
通过调用当前代码块的结束位置处的所述代码块跳转函数,实现从当前代码块跳至所述目标代码块。
4.如权利要求2所述的方法,所述通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,包括:
在每个所述代码块中至少一个位置处嵌入所述代码块跳转函数;其中,所述代码块跳转函数的参数至少包括用于标识当前代码块的状态;
通过调用当前代码块中的所述代码块跳转函数,实现从当前代码块跳至所述目标代码块。
5.如权利要求1所述的方法,对代码块跳转状态机进行加密,包括:
建立所述代码块跳转函数的参数或所述代码块跳转函数的参数中的跳转条件与预定值的对应关系;
根据所述对应关系,将所述参数或所述参数中的跳转条件替换为所述预定值。
6.如权利要求1所述的方法,对代码块跳转状态机进行加密,包括:
将代码块跳转函数替换为预设函数,所述代码块跳转函数与预设函数存在对应关系。
7.如权利要求1所述的方法,所述不透明谓词包括恒为真的函数表达式或恒为假的函数表达式。
8.如权利要求1所述的方法,所述在所述第一条件变量中添加至少一个不透明谓词,包括:
在所述第一条件变量之前或之后添加所述至少一个不透明谓词,并利用预设符号分隔所述第一条件变量和所述不透明谓词。
9.如权利要求1所述的方法,所述在所述第一条件变量中添加至少一个不透明谓词,包括:
利用预设规则将所述第一条件变量分割为多个字符段;
在所述多个字符段之间添加所述至少一个不透明谓词。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京梆梆安全科技有限公司,未经北京梆梆安全科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810146259.5/1.html,转载请声明来源钻瓜专利网。