首页(yè)> 技(jì )术观点 > 爱加密:手机APP加密的步骤及技(jì )术分(fēn)析

爱加密:手机APP加密的步骤及技(jì )术分(fēn)析

发布时间:2015-11-09

凡事都有(yǒu)两面性,各分(fēn)利弊。科(kē)技(jì )的发展给人们带来便利的同时,也带来了想不到的隐患。手机越来越多(duō),手机APP也越来越多(duō),但是,你的安(ān)全感是否越来越多(duō)了呢(ne)?据12321网站《10月份手机应用(yòng)安(ān)全问题报告》报道,10月份,12321举报中(zhōng)心共收到举报手机应用(yòng)安(ān)全问题(APP) 35001件次,较上月上升了47.5%。去重之后涉及约22636个。Android系统的开源性,手机APP易被黑客攻击、注入恶意代码、二次打包重新(xīn)上市场。在此,受损失的不仅仅是手机用(yòng)户,还有(yǒu)手机APP的开发者、开发商(shāng)等。如今,寻求手机APP加密方案,保护手机APP的安(ān)全已迫在眉睫。 

伪加密

伪加密是Android4.2.x系统发布前的手机APP加密方案之一,通过java代码对APK(压缩文(wén)件)进行伪加密,其修改原理(lǐ)是修改连续4位字节标记為(wèi)”P K 01 02”的后第5位字节,奇数表示不加密偶数表示加密。

虽然伪加密可(kě)以起到一定防破解作(zuò)用(yòng),但也会出现问题,首先使用(yòng)伪加密对其APK加密后市场无法对其进行安(ān)全检测,导致部分(fēn)市场会拒绝这类APK上传;其次,伪加密的加密方式和解密方式也早已公(gōng)布导致它的安(ān)全程度也大大降低;再次,Android4.2.x系统无法安(ān)装(zhuāng)伪加密的APK;最后伪加密只是对APK做简单保护,在java层源码加壳保护、核心so库、资源文(wén)件、主配文(wén)件、第三方架包方面却没有(yǒu)任何保护处理(lǐ)。

混淆保护

把原来有(yǒu)具(jù)體(tǐ)含义的类名(míng),变量名(míng),方法名(míng),修改成让人看不懂的名(míng)字,例如方法名(míng)getUserName编程了方法名(míng)。

混淆保护只是增加了代码阅读难度,对于破解基本上是没有(yǒu)实质(zhì)性作(zuò)用(yòng)的!

运行时验证

运行时验证,主要是指在代码启动的时候本地获取签名(míng)信息然后对签名(míng)信息进行检验来判断自己的应用(yòng)是否是正版,如果签名(míng)信息不是正版则提示盗版或者直接崩溃。当然你可(kě)以把必要的数据放在服務(wù)器端。

破解:找到smali文(wén)件中(zhōng),判断是否相等的部分(fēn)。改為(wèi)常量true,即失效。

总之,反编译一些apk之后,只要是java代码写的总会有(yǒu)smil文(wén)件。对于smil文(wén)件,如果耐心读的话,还是可(kě)以查看到一些关键代码的。

相较于应用(yòng)来说,游戏apk因為(wèi)采用(yòng)cocos2d-x或者 unity3D,采用(yòng)的是c++和c# 编写的跨平台程序,在apk采用(yòng)JNI的方式。所以没有(yǒu)smali,可(kě)以防止静态被破解apk包。

当然游戏包apk在运行的时候,会把.*so加载到内存中(zhōng)。动态也是可(kě)以在内存中(zhōng)抓取相应的数据。只不过NDK相对于smali破解来说,根部不是一个层级的关系。 

使用(yòng)第三方手机APP加密平台

    举个栗子:

手机APP加密技(jì )术分(fēn)析

该classes.dex是原来的代码。没有(yǒu)混淆,没有(yǒu)做任何的手机APP加密方案保护。反编译的话,源代码暴露无疑。

手机APP加密技(jì )术分(fēn)析

该classes.dex是经过Android APK加 密之后的,现在看看反编译之后的效果。

手机APP加密技(jì )术分(fēn)析

NativeApplication类,加载exec.so和execmain.so ,里面应该是固定的代码,是对源码

手机APP加密技(jì )术分(fēn)析

SuperApplication继承自Application,程序主入口:

手机APP加密技(jì )术分(fēn)析

在手机APP加 密方案之后的apk包中(zhōng),多(duō)了一个assets目录,该目录下,有(yǒu)一些ijiami.dat,其实这个就是原来的classex.dex 

手机APP加密技(jì )术分(fēn)析

综上,爱加密手机APP加密方案步骤: 

    1.把原来的classex.dex 用(yòng)Android加密算法实现加密成assets/ijiami.dat,源classex.dex 隐藏起来了,在静态的时候就没有(yǒu)办(bàn)法对其破解。

    2.把事先写好的jni代码和相应的classex.dex替换到原有(yǒu)的位置

    3.程序安(ān)装(zhuāng)完运行起来以后,先运行手机APP加密方案 爱 加 密 的加壳程序,在jni里面动态加载原来的classex.dex代码,从而达到手机APP加密方案保护的目的。

    4、其余更多(duō)针对动静态内存安(ān)全保护、so库文(wén)件保护、及防止协议抓包的保护技(jì )术请前往爱加密官网www.ijiami.cn查看。

手机APP加密技(jì )术分(fēn)析


加入收藏