本发明专利技术提出一种针对函数级别加壳的脱壳方法及系统,包括:启动模拟器,初始化应用程序,调用应用程序的OnCreate;加载应用程序的Dex文件并保存,查找DexFile结构体;检索其中的class_defs类定义列表,并判断加载后的Dalvik虚拟机的Method对象与类定义列表中的特定代码段是否不同,及判断代码地址是否超出范围。本发明专利技术所述技术方案能从系统层面去调用时就可以实现主动解密,同时对于相似的加固技术,能够使用相似的脱壳方法,也有效的解决了通用性问题。
【技术实现步骤摘要】
本专利技术涉及信息安全
,尤其涉及一种针对函数级别加壳的脱壳方法及系统。
技术介绍
代码是一个程序的核心,不论是处于保密和安全考虑,还是为了隐藏行为,加壳技术是最为常见,也是最有效的方法。为了隐藏核心代码,保证系统核心流程的安全性,开发人员一般会对代码进行混淆和加密处理。而另一方面恶意应用为了达到隐藏自己、躲避安全软件的检测,也会对自己的代码进行加密。安全软件对于恶意代码的检测很大程度的依赖可知的代码,而加密无疑是为程序化的安全检测加上了一道锁。并且随着时间的推移,Android应用从最开始的少量应用、简单加密,到现在新出来的应用大部分都采用加固防护,脱壳技术尤为急迫。Android 应用目前在网上比较常见的脱壳技术,可以分为两种类型:一、Dex整体加密类型应用程序在运行时候对整体dex 文件进行解密,脱壳工具在分析DexFile结构,然后内存dump下来。缺点:现有方案运行时候内存dump的方式,比较依赖hook技术,并且容易被各种反调试技术阻碍。二、Dex函数抽离类型程序在加固处理的时候,将需要隐藏的代码抽取出来并且加密存放,这种脱壳技术需要对程序解密算法进行分析,然后单独实现或者调用解密算法,进行静态还原。缺点:算法针对性太强,没一种实现都需要大量人力去跟进和分析。Android系统作为一个开发的系统,具有较强的可以定制性。我们只需要在适当的位置加入我们的脱壳代码,对于应用程序来说,几乎是不可察觉的,这样可以有效的解决第一种脱壳技术的弊端。Android系统就是应用程序执行的环境,应用程序的结构关系,对于系统层来说都是可视的。对于运行时的调用解密,就可从系统层面去调用就可以变成一种主动解密,因此对于相似的加固技术比如函数抽离,能够使用相识的脱壳方法,这样可以有效的解决通用性问题。
技术实现思路
本专利技术通过启动模拟器,初始化应用程序Activity,调用脱壳代码主体,加载应用程序的Dex文件并保存至gDvm的hash_tables,检索DexFile结构体中的class_defs类定义列表,并判断加载后的Dalvik虚拟机的Method对象与class_defs类定义列表中的method结构体中AccessFlags和insn代码段是否不同的方法,以此从系统层面去调用时就可以实现主动解密,对于相似的加固技术,能够使用相似的脱壳方法,同时也有效的解决了通用性问题。本专利技术采用如下方法实现:一种针对函数级别加壳的脱壳方法,包括:启动模拟器,初始化应用程序Activity,调用应用程序的OnCreate;加载应用程序的Dex文件并保存至gDvm的hash_tables,在gDvm的hash_tables中查找DexFile结构体;检索DexFile结构体中的class_defs类定义列表,并判断加载后的Dalvik虚拟机的Method对象与class_defs类定义列表中的method结构体中AccessFlags和insn代码段是否不同,若不同,则从运行时Method获取解密代码,填写到DexFile结构体中method的AccessFlags位置;判断Method的insns代码地址是否超出DexFile范围,若是则扩展DexFile大小,将Method代码拷贝至新的内存区域,并且修复DexFile的Method偏移地址。进一步地,所述获取解密代码的方为:使用接口dexGetClassDef循环获取DexFile结构ClassDef,使用GetStaticMethodID查找含有clinit方法的类,实现主动解密。进一步地,使用接口dexGetClassDef循环获取DexFile结构ClassDef的次数为ClassDef的个数。进一步地,所述实现主动解密方法为循环查找内存中Method结构被解密的代码,判断AccessFlags 有无Native标志,若无,则表示已完成主动解密。进一步地,使用单独的内核接口对已完成主动解密的文件进行读写操作。本专利技术可以采用如下装置来实现:一种针对函数级别加壳的脱壳系统,其特征在于,包括:初始化模块,用于启动模拟器,初始化应用程序Activity,调用应用程序的OnCreate;查找模块,用于加载应用程序的Dex文件并保存至gDvm的hash_tables,在gDvm的hash_tables中查找DexFile结构体;分析模块,用于检索DexFile结构体中的class_defs类定义列表,并判断加载后的Dalvik虚拟机的Method对象与class_defs类定义列表中的method结构体中AccessFlags和insn代码段是否不同,若不同,则从运行时Method获取解密代码,填写到DexFile结构体中method的AccessFlags位置;修复模块,用于判断Method的insns代码地址是否超出DexFile范围,若是则扩展DexFile大小,将Method代码拷贝至新的内存区域,并且修复DexFile的Method偏移地址。进一步地,所述获取解密代码的方为:使用接口dexGetClassDef循环获取DexFile结构ClassDef,使用GetStaticMethodID查找含有clinit方法的类,实现主动解密。进一步地,使用接口dexGetClassDef循环获取DexFile结构ClassDef的次数为ClassDef的个数。进一步地,所述实现主动解密方法为循环查找内存中Method结构被解密的代码,判断AccessFlags 有无Native标志,若无,则表示已完成主动解密。进一步地,使用单独的内核接口对已完成主动解密的文件进行读写操作。本专利技术能较通用的解密现有的新型加固技术,相对于直接分析解密算法进行解密,有较好的适应性和准确性。综上所述,本专利技术通过启动模拟器,初始化应用程序Activity,调用脱壳代码主体,加载应用程序的Dex文件并保存至gDvm的hash_tables,检索DexFile结构体中的class_defs类定义列表,并判断加载后的Dalvik虚拟机的Method对象与class_defs类定义列表中的method结构体中AccessFlags和insn代码段是否不同的方法,以此从系统层面去调用时就可以实现主动解密,对于相似的加固技术,能够使用相似的脱壳方法,同时也有效的解决了通用性问题。有益效果为:1.是基于Android 系统进行的再开发,应用原有的接口不会改变,所以应用更不易察觉脱壳程序的存在。2、可以使用专用接口的方式突破hook封锁,以及功能扩展。3、使用的是运行时主动调用解密,对于应用程序来说,是属于正常的代码执行,不易被察觉。4、根据是脱壳前后代码差异进行判断,可以一次性解决一类加固方案,通用性强。附图说明为了更清楚地说明本专利技术或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术提供的一种针对函数级别加壳的脱壳方法实施例流程图;图2为本专利技术提供的一种针对函数级别加壳的脱壳系统实施例结构图。具体实施方式为本文档来自技高网...
【技术保护点】
一种针对函数级别加壳的脱壳方法,其特征在于,包括:启动模拟器,初始化应用程序Activity,调用应用程序的OnCreate;加载应用程序的Dex文件并保存至gDvm的hash_tables,在gDvm的hash_tables中查找DexFile结构体;检索DexFile结构体中的class_defs类定义列表,并判断加载后的Dalvik虚拟机的Method对象与class_defs类定义列表中的method结构体中AccessFlags和insn代码段是否不同,若不同,则从运行时Method获取解密代码,填写到DexFile结构体中method的AccessFlags位置;判断Method的insns代码地址是否超出DexFile范围,若是则扩展DexFile大小,将Method代码拷贝至新的内存区域,并且修复DexFile的Method偏移地址。
【技术特征摘要】
1.一种针对函数级别加壳的脱壳方法,其特征在于,包括:启动模拟器,初始化应用程序Activity,调用应用程序的OnCreate;加载应用程序的Dex文件并保存至gDvm的hash_tables,在gDvm的hash_tables中查找DexFile结构体;检索DexFile结构体中的class_defs类定义列表,并判断加载后的Dalvik虚拟机的Method对象与class_defs类定义列表中的method结构体中AccessFlags和insn代码段是否不同,若不同,则从运行时Method获取解密代码,填写到DexFile结构体中method的AccessFlags位置;判断Method的insns代码地址是否超出DexFile范围,若是则扩展DexFile大小,将Method代码拷贝至新的内存区域,并且修复DexFile的Method偏移地址。2.如权利要求1所述的方法,其特征在于,所述获取解密代码的方为:使用接口dexGetClassDef循环获取DexFile结构ClassDef,使用GetStaticMethodID查找含有clinit方法的类,实现主动解密。3.如权利要求2所述的方法,其特征在于,使用接口dexGetClassDef循环获取DexFile结构ClassDef的次数为ClassDef的个数。4.如权利要求2所述的方法,其特征在于,所述实现主动解密方法为循环查找内存中Method结构被解密的代码,判断AccessFlags 有无Native标志,若无,则表示已完成主动解密。5.如权利要求4所述的方法,其特征在于,使用单独的内核接口对已完成主动解密的文件进行读写操作。6.一种针对函数级别加壳的脱壳...
【专利技术属性】
技术研发人员:唐浩,马志远,潘宣辰,
申请(专利权)人:武汉安天信息技术有限责任公司,
类型:发明
国别省市:湖北;42
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。