本发明涉及应用程序传输保护技术领域,尤其涉及一种基于安卓应用的文件传输保密系统。
背景技术:
随着移动互联网的快速发展,智能手机应用也紧随其发展,在现有的智能手机系统中,安卓系统因为开源特性在手机系统市场中占有不少地位,但是安卓应用被逆向篡改等现象对用户的隐私和财产造成安全方面的隐患,同时对安卓应用开发者的合法权益也会造成侵犯,安卓应用的安全性也成为了安卓应用开发中重要的一部分。
目前关于安卓应用安全保护由最初的代码混淆到给安卓应用加壳再到基于虚拟机定制的安卓应用加固技术,加固技术也由文件加密到方法指令抽取再到虚拟机一步步的提高安全级别,这些方法虽取得一定成效,其中一些加固技术存在容易被破解等问题,软件加壳技术是目前使用最多的加固技术,但是主流的基于类加载器和基于方法替换的加壳技术都已经出现了自动脱壳破解方案。
技术实现要素:
本发明的目的是为了解决现有技术中存在的缺点,而提出的一种基于安卓应用的文件传输保密系统。
为了实现上述目的,本发明采用了如下技术方案:一种基于安卓应用的文件传输保密系统,包括以下步骤:
ss01:遍历dex文件结构找到class段、解析class段下的每个类的类数据,解析每个classitemdata中的方法字段;
ss02:进一步向结构体内部解析方法字段,找到code结构体的指令集数组,把指令数组进行aes加密后保存;
ss03:在解析出指令数组后,把指令偏移处指定大小的字节流置为0,来返回一个指令集为0的dex文件的字节流,这样就找不到原指令数组对应的数据,达到隐藏代码的目的;
ss04:由于对dex文件进行了修改,必须对dex文件进行重新校验,重新计算dex文件头中的两个字段checksum和signature,否则安装安卓应用的时候,系统校验不会通过。
ss05:指令抽取后的安卓应用和加密过的指令数组上传到服务端,用户下载传输安卓应用时连同加密的指令一同下载传输,加密过后的指令存放在dex文件中,这样安全性能得到提高,但是dex文件大小会改变,修改启动apk的入口,apk启动时,首先运行修改后的入口,读取dex文件,从dex文件中取出存放的加密指令,获得加密指令后,应用存放在assets目录里的秘钥对指令进行解密,并保存在assets目录中;
ss06:抽空指令的dex文件放到手机指定目录下,运行加载dex,在native层hooklibdvm.so中的dexfindclass函数,通过这个函数可以找到dex,在java层使用dexclassloader加载dex,并且通过反射运行被抽空的类的方法,通过dexfile结构体获取被抽空的方法对应的指令,把上面保存在assets目录中解密后的指令还原。
作为上述技术方案的进一步描述:
所述dex文件是dalvik可执行文件格式,android平台的应用程序是由一个或者多个dex文件组成,是8字节的二进制流文件,且dex文件结构中存储着android平台的应用程序所有类文件的信息。
作为上述技术方案的进一步描述:
所述dex文件结构主要包括文件头、索引区和数据区;
所述文件头主要是对dex文件合法性校验,所述索引区主要是类、方法等的索引,所述索引可以在数据区找到对应的数据。
作为上述技术方案的进一步描述:
所述索引区包括字符串的索引string_ids、类型的索引type_ids、方法原型的索引proto_ids、域的索引field_ids和方法的索引method_ids;
所述数据区包括类的定义区class_ids、数据去data、和链接数据区linkdata。
作为上述技术方案的进一步描述:
所述类的定义区class_ids存储着源码中类的各种详细信息,其中dex文件修改的就是类的定义区class_ids中encode_method结构体,其中,encode_method结构体保存着类方法的详细信息。
作为上述技术方案的进一步描述:
所述encode_method结构体还是源码的逻辑结构,其中encode_method结构体中的code_item就是这个方法中的代码信息。
作为上述技术方案的进一步描述:
所述ss04步骤中字段checksum为文件校验码,其中,字段checksum用于检测文件损坏情况。
作为上述技术方案的进一步描述:
所述ss04步骤中字段signature是sha-1签名,其中,字段signature用于对文件进行唯一标识。
作为上述技术方案的进一步描述:
所述ss04步骤中对dex文件进行重新校验包括对dex文件除magic和checksum字段之外的文件剩下的内容使用adler-32校验算法进行算;
所述ss04步骤中对dex文件进行重新校验还包括对对dex文件除magic、checksum和signature字段之外的文件的内容的进行sha1计算。
作为上述技术方案的进一步描述:
所述ss04步骤中对dex文件进行重新校验,先进行sha1计算,然后再进行adler-32校验。
有益效果
本发明提供了一种基于安卓应用的文件传输保密系统。具备以下有益效果:
该一种基于安卓应用的文件传输保密系统通过研究android操作系统的安全弱点、android应用程序的安全弱点、android应用程序的逆向工程技术等,提出一个完整的安全保护方案,该一种基于安卓应用的文件传输保密系统从逆向工程入手,借鉴传统pc端的安全保护技术,结合android平台本身的特点,将混淆、防反编译、动态加载、完整性校验、加密等方面融合为一体,采用多层安全保护措施,全面提高了应用程序的安全性能。
附图说明
图1为本发明提出的一种基于安卓应用的文件传输保密系统的整体示意图;
图2为本发明中dex文件的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
实施例一,参照图1-2,一种基于安卓应用的文件传输保密系统,包括以下步骤:
ss01:遍历dex文件结构找到class段、解析class段下的每个类的类数据,解析每个classitemdata中的方法字段;
ss02:进一步向结构体内部解析方法字段,找到code结构体的指令集数组,把指令数组进行aes加密后保存;
ss03:在解析出指令数组后,把指令偏移处指定大小的字节流置为0,来返回一个指令集为0的dex文件的字节流,这样就找不到原指令数组对应的数据,达到隐藏代码的目的;
ss04:由于对dex文件进行了修改,必须对dex文件进行重新校验,重新计算dex文件头中的两个字段checksum和signature,否则安装安卓应用的时候,系统校验不会通过。
ss05:指令抽取后的安卓应用和加密过的指令数组上传到服务端,用户下载传输安卓应用时连同加密的指令一同下载传输,加密过后的指令存放在dex文件中,这样安全性能得到提高,但是dex文件大小会改变,修改启动apk的入口,apk启动时,首先运行修改后的入口,读取dex文件,从dex文件中取出存放的加密指令,获得加密指令后,应用存放在assets目录里的秘钥对指令进行解密,并保存在assets目录中;
ss06:抽空指令的dex文件放到手机指定目录下,运行加载dex,在native层hooklibdvm.so中的dexfindclass函数,通过这个函数可以找到dex,在java层使用dexclassloader加载dex,并且通过反射运行被抽空的类的方法,通过dexfile结构体获取被抽空的方法对应的指令,把上面保存在assets目录中解密后的指令还原。
该基于安卓应用的文件传输保密系统是基于安卓应用中dex文件的加固,通过修改dex文件中的指令数组,对dex文件中指令的抽取,并且对抽取的指令数组使用aes加密算法进行再次加密,上传服务端保存,从服务端下载传输加固过的安卓应用,apk安装运行时动态加载dex对指令数组进行解密,并且把抽取的指令数组进行还原。
dex文件是dalvik可执行文件格式,android平台的应用程序是由一个或者多个dex文件组成,是8字节的二进制流文件,且dex文件结构中存储着android平台的应用程序所有类文件的信息。
dex文件结构主要包括文件头、索引区和数据区;
文件头主要是对dex文件合法性校验,索引区主要是类、方法等的索引,索引可以在数据区找到对应的数据。
索引区包括字符串的索引string_ids、类型的索引type_ids、方法原型的索引proto_ids、域的索引field_ids和方法的索引method_ids;
数据区包括类的定义区class_ids、数据去data、和链接数据区linkdata。
类的定义区class_ids存储着源码中类的各种详细信息,其中dex文件修改的就是类的定义区class_ids中encode_method结构体,其中,encode_method结构体保存着类方法的详细信息。
encode_method结构体还是源码的逻辑结构,其中encode_method结构体中的code_item就是这个方法中的代码信息。
ss04步骤中字段checksum为文件校验码,其中,字段checksum用于检测文件损坏情况。
ss04步骤中字段signature是sha-1签名,其中,字段signature用于对文件进行唯一标识。
ss04步骤中对dex文件进行重新校验包括对dex文件除magic和checksum字段之外的文件剩下的内容使用adler-32校验算法进行算;
ss04步骤中对dex文件进行重新校验还包括对对dex文件除magic、checksum和signature字段之外的文件的内容的进行sha1计算。
ss04步骤中对dex文件进行重新校验,先进行sha1计算,然后再进行adler-32校验。
实施例二,作为实施例一的另一种实施方式,在步骤3中对类方法的指令进行了替换,同样可以通过对类字段、静态字段隐藏、类方法的重新定义达到修改原始dex文件,这样修改过后的dex同样可以隐藏或串改原始内容;
实施例三,作为实施例一的另一种实施方式,在步骤5中加密过后的指令可以存放在apk中的任意目录下或者存储在dex、so库等文件中,解密时从对应目录获取文件解密或者从文件中取出后解密。
在本说明书的描述中,参考术语“一个实施例”、“示例”、“具体示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。