[发明专利]基于寄存器架构的Android应用完整性验证方法有效
申请号: | 201510009389.0 | 申请日: | 2015-01-08 |
公开(公告)号: | CN104598808B | 公开(公告)日: | 2018-02-16 |
发明(设计)人: | 王蕊;贾晓启;林子敏;张道娟 | 申请(专利权)人: | 中国科学院信息工程研究所 |
主分类号: | G06F21/52 | 分类号: | G06F21/52;G06F21/55 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙)11200 | 代理人: | 余长江 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 寄存器 架构 android 应用 完整性 验证 方法 | ||
1.一种基于寄存器架构的Android应用完整性验证方法,其步骤包括:
1)将Android应用程序的Dex格式代码转化为Dalvik Smali格式的虚拟指令代码;
2)基于Android寄存器架构和指令结构特点,对需要保护的应用程序代码段进行胎记分析,得到可用于胎记提取的指令代码状态和寄存器状态信息,其方法为:
2-1)对应用代码执行过程进行分析,获取应用代码段中的类对象层次关系图和控制流程图,分析出应用代码可能的调用执行过程;
2-2)基于应用代码执行过程的分析结果,对代码进行代码中寄存器状态分析,通过寄存器状态恢复代码执行过程指令中缺失的寄存器类型信息;
2-3)基于应用代码执行过程的分析结果,对代码中寄存器的值进行不确定状态分析,通过不确定状态分析排除可能受到不确定因素影响的指令数据;
3)根据步骤2)得到的可用于胎记提取的指令代码状态和寄存器状态信息,生成相应的胎记提取代码;胎记提取代码的生成过程针对单条Dalvik指令中的目的寄存器操作数,将其计算转换为合适的中间胎记状态,再将所有的中间胎记状态融合生成最终的胎记值,具体过程为:
3-1)将不同数据类型的寄存器数据转化为胎记中间值,用于进一步的胎记整合;
3-2)计算控制流状态,当应用代码不受不确定因素影响时,对于同样的初始化条件,保持相同的执行流程,提取出确定的胎记信息;当不确定因素引入时,通过生成确定的执行代码过程,得到确切的执行路径过程和路径之上的胎记信息;
3-3)胎记融合,针对代码指令中提取到的中间胎记信息值,利用随机运算与随机数值联合生成最终的胎记值;
4)通过代码插桩过程将胎记提取代码植入步骤1)生成的虚拟指令代码中,并重新进行编译生成新的应用;
5)通过动态执行应用预计算出胎记信息,在应用使用过程中,用胎记信息对应用进行完整性验证。
2.如权利要求1所述的方法,其特征在于,步骤1)将Android应用程序的Dex格式的classes.dex代码转化为Smali格式的Android应用的Dalvik虚拟指令代码。
3.如权利要求1所述的方法,其特征在于,所述寄存器状态分析的具体步骤为:首先根据Dalvik指令结构定义出可确定的寄存器参数类型和参数间的数据类型依赖关系,进一步基于代码控制流程图,通过迭代搜索分析出指令间寄存器参数的后向依赖关系,从而通过寄存器参数具体的使用行为确定数据类型。
4.如权利要求1所述的方法,其特征在于,所述不确定状态分析的具体步骤为:首先定义可能的外部不确定因素,设计基于Dalvik虚拟指令的内容敏感的前向数据流分析过程,然后通过静态污点传播算法扩展所有可能代码中可能受到不确定因素影响的指令和状态;整个内容敏感的数据流分析过程基于构造的代码控制流图,首先初始化每个数据块中涉及的寄存器状态信息,以起始代码块开始按照预定义的不确定源和静态状态扩展策略,按照指令执行顺序迭代扩展,直到所有代码块的寄存器状态到达不动点状态。
5.如权利要求1所述的方法,其特征在于:步骤4)中的代码插桩过程基于Dalvik Smali虚拟指令,插桩后重新进行编译生成新的应用,执行时提取胎记信息用于实际验证。
6.如权利要求5所述的方法,其特征在于:所述代码插桩过程采用如下方法进行应用函数中寄存器的分配和调整:通过向本地寄存器末尾添加胎记提取需要个数的寄存器;计算单条指令中可能导致编译问题的参数寄存器个数,将新分配的部分寄存器作为临时寄存器使用,以解决寄存器分配带来的编译问题;在函数末尾添加一个引用参数,当函数结束时通过引用参数将胎记值传回,以实现在函数调用过程中传递胎记值。
7.一种采用权利要求1所述方法的基于寄存器架构的Android应用完整性验证系统,其特征在于,包括:
应用程序代码转换模块,用于将Android应用程序的Dex格式代码转换为Dalvik Smali格式虚拟机指令;
应用程序分析模块,用于对需要保护的代码段进行胎记分析,提取可用于胎记提取的指令代码状态和寄存器状态信息;
胎记提取代码生成模块,用于获取可用于胎记提取的代码指令和寄存器状态,生成相应的胎记提取代码;
代码插桩模块,用于通过代码插桩过程将胎记提取代码植入Smali格式虚拟指令代码中,并重新进行编译生成新的应用;
胎记预计算和验证模块,通过动态执行应用预计算出胎记信息,在应用使用过程中进行应用程序完整性验证。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所,未经中国科学院信息工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510009389.0/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种用于数控车床的双刀座刀架
- 下一篇:一种具有防工件安装偏心功能的机床尾座