截至2018年12月,我国网民规模达8.29亿,手机网民规模达8.17亿,其中手机网民占98.6%。移动应用的安全越来越重要,为了防止Android应用被破解和反编译,一般会对Dex文件进行加固保护,本文主要解读了网易易盾最新一代Android移动应用Dex文件保护方案-Java2c加固。
一、新一代Android Dex文件保护方案-Java2c方案简介
Java2c方案是网易易盾推出的最新一代Android移动应用Dex文件保护方案,加固后的移动应用包就是二进制代码的形式,无论是安装还是运行速度都可以有极大地提升。而且Android开发天然就支持NDK(简单来说就是底层提供C++代表编译成的SO),加固时把Java代码转换成NDK层的二进制代码,这样就解决了性能和兼容性问题。由于二进制转换是在加固期间做的,加固后的移动应用包是转换后的二进制结果,它是不可逆的,也因此大大地提高了安全强度。
二、Java2c加固效果展示
加固前后效果对比如下,可以看到保护前的java层代码完全下沉到本地层,为了观察前后的效果没有增加混淆和so的加壳处理,即便如此也有力的增大了攻击者的分析难度。
加固前如下图:
加固前反编译代码
加固后:
反编译java层代码
加固后的反编译代码
生成的本地层代码
加固后的本地层代码
三、Java2c加固特性
以下就java2c方案加固强度、性能、兼容性、灵活性上进行对比分析:
1.加固强度:以“代码下沉”的方式把java层代码完全下沉到本地层,大大增大了攻击者的分析难度,高于以往的加壳以及dexVmp保护。
应用程序经过易盾加固java2c方案加固以后,加固强度上远远高于早先的代码抽取的各种壳。于当下比较流行的三代dex VMP相比,在dex VMP中攻击者可以在内存中对虚拟解释器中的指令进行监控,通过映射表进行还原 ,对于经过java2c加固以后,Java层代码完全的下沉到本地层面,攻击者的攻击目标由Java层转为Native层面,这个时候对于攻击者而言 ,从Native层面还原为Java层面的这个过程是不可逆的,不存在还原,难度会大大的增加。
Android Dex加固技术演化
2.加固性能:独有的“静态保护”技术,没有运行时的内存劫持改变,加固后的运行性能上面优于加壳和dex Vmp保护;以下是加固前后CPU和内存占用率对比、启动时间对比、体积增加对比、测试通过率的对比。
2.1加固前后CPU、内存占用率对比
以下是魅拍APP对其中的四大组件下面所有的类进行java2c加固以后的性能数据对比图,加固前后的应用的CPU占用率、以及内存占比影响不大,并且在实际的加固中会根据每个应用类的特色进行甄选,加固产生的性能影响可以忽略不计。
2.2加固前后启动时间对比:
下图为市面上各个类型的应用程序经过加固以后的启动时间对比图,从图中可以看到经过加固以后的程序的启动时间增加非常小,对于用户的影响可以忽略不计。
2.3加固前后测试通过率对比:
如下图所示为同样类型的应用程序加固以后通过百台测试机测试的通过率与加固前的对比图,从图中可以看出通过率基本上与加固前是一致的。
2.4加固前后体积增加对比:
由于在易盾加固java2c方案中应用加固体积的增加与自身应用的类和方法的复杂性是息息相关的,在某些应用上还会出现加固以后变小的可能。如图所示加固处理的默认规则为四大组件下面的所有的类和方法,方法数量在几百至几千个,整体大小的增加均在可接受范围内,由于某些APP本身的方法比较复杂,因此体积增加可能比较明显,可以通过黑白名单对于一些不重要的类和方法进行过滤处理,达到用户的需求。
3.加固兼容性:易盾加固java2c方案不仅加固上支持dex的全指令级以及函数级的细粒度化,通过中间状态的介入再生成各个目标平台代码,兼容性上与保护前一样。
由于易盾加固java2c方案是把待保护APK中的dex文件中间状态变换为一个另一种的中间状态,这个时候还没有生成底层的各个目标平台的状态。因此兼容性上与保护前的状态是一样的。
4.加固灵活性: 默认加固当前APK四大组件下面的所有的类和方法,同时通过黑白名单和注解的方式来满足用户对于不同类和方法粒度化的加固需求配置。既可以通过黑白名单对默认处理规则以外的类进行控制,同时可以通过注解“NEJ2CProtect”对待加固的类和方法进行标记处理;在加固的时候就会只对sub方法进行处理。
四、Java2C加固总结:
新一代Android移动应用Dex文件保护方案-Java2C加固,以独有的“静态保护”技术,使得应用程序中的代码出现“下沉”,达到不可逆的效果,兼顾“冷热启动时间”、“CPU”、 “内存占用率”、“体积”等重要指标,同时保障用户加固的灵活性。
相关阅读: