导语:几个月前,网易易盾正式推出Java2c加固。它以独有的“静态保护”技术,使得应用程序中的代码出现“下沉”,达到不可逆的效果,兼顾“冷热启动时间”、“CPU”、 “内存占用率”、“体积”等重要指标,保障用户加固的灵活性。
这种类型的加固是在什么契机下推出?它到底具有哪些优点?在实际测试和应用中,它的表现是什么样的?网易易盾两位技术专家为此撰写本文作出解读。java
其实灵感是来自于谷歌的DEX2OAT的理念:android
移动应用包能够在安装期间从Dex包转化为可执行的ELF格式的包,至关于从Java代码转换成了二进制代码,极大地提升了移动应用的运行速度。
基于这个理念延伸,咱们思考:何不把这个转换过程在加固期间就作掉呢?这样加固后的移动应用包就是二进制代码的形式,不管是安装仍是运行速度均可以有极大地提高。安全
并且Android开发自然就支持NDK(简单来讲就是底层提供C++表明编译成的SO),加固时把Java代码转换成NDK层的二进制代码,这样就解决了性能和兼容性问题。因为二进制转换是在加固期间作的,加固后的移动应用包是转换后的二进制结果,它是不可逆的,也所以大大地提升了安全强度。app
下面咱们就来看看具体的测试数据函数
1、特性说明:性能
易盾加固Java2c方案做为最新一代Android移动应用Dex文件保护方案:测试
1.强度上:以“代码下沉”的方式把java层代码彻底下沉到本地层,大大增大了攻击者的分析难度,高于以往的加壳以及dexVmp保护。spa
应用程序通过易盾加固java2c方案加固之后,在运行的过程当中不存在像以下图1所示的一代和二代“壳”保护完之后会在内存中出现总体或者部分数据还原,所以强度上远远高于早先的代码抽取的各类壳。于当下比较流行的三代dex VMP相比,在dex VMP中攻击者能够在内存中对虚拟解释器中的指令进行监控,经过映射表进行还原 ,对于通过java2c加固之后,Java层代码彻底的下沉到本地层面,攻击者的攻击目标由Java层转为Native层面,这个时候对于攻击者而言 ,从Native层面还原为Java层面的这个过程是不可逆的,不存在还原,难度会大大的增长。.net
2. 性能上:以独有的“静态保护”技术,没有运行时的内存劫持改变,加固后的运行性能上面优于以往的加壳以及当下流行的dexVmp保护;如下经过加固先后CPU、内存占用率对比、启动时间对比、测试经过率对比、体积增长对比来讲明。orm
2.1加固先后CPU、内存占用率对比
如下是魅拍APP对其中的四大组件下面全部的类进行java2c加固之后的性能数据对比图,从如下图二、3能够看出,加固先后的应用的CPU占用率、以及内存占比影响不大,而且在实际的加固中会根据每一个应用类的特点进行甄选,加固产生的性能影响能够忽略不计。
2.2加固先后启动时间对比:
如图4所示为市面上各个类型的应用程序通过加固之后的启动时间对比图,从图中能够看到通过加固之后的程序的启动时间增长很是小,对于用户的影响能够忽略不计。
2.3加固先后测试经过率对比:
如图5所示为一样类型的应用程序加固之后经过百台测试机测试的经过率与加固前的对比图,从图中能够看出经过率基本上与加固前是一致的。
2.4加固先后体积增长对比:
因为在易盾加固java2c方案中应用加固体积的增长与自身应用的类和方法的复杂性是息息相关的,在某些应用上还会出现加固之后变小的可能。如图6所示加固处理的默认规则为四大组件下面的全部的类和方法,方法数量在几百至几千个,总体大小的增长均在可接受范围内,因为某些APP自己的方法比较复杂,所以体积增长可能比较明显,能够经过黑白名单对于一些不重要的类和方法进行过滤处理,达到用户的需求。
3.兼容性上:易盾加固java2c方案不只加固上支持dex的全指令级以及函数级的细粒度化,从图7能够看到经过中间状态的介入再生成各个目标平台代码,兼容性上与保护前同样。
因为易盾加固java2c方案是把待保护APK中的dex文件中间状态变换为一个另外一种的中间状态,这个时候尚未生成底层的各个目标平台的状态。以下图5所示,所以兼容性上与保护前的状态是同样的。
4. 灵活性上:默认加固当前APK四大组件下面的全部的类和方法,同时经过黑白名单和注解的方式来知足用户对于不一样类和方法粒度化的加固需求配置。既能够经过黑白名单对默认处理规则之外的类进行控制,同时以下图8左所示能够经过注解“NEJ2CProtect”对待加固的类和方法进行标记处理;在加固的时候就会只对sub方法进行处理,反编译的结果如图8右所示。
2、效果展现:
接下来经过一个简单的Demo展现加固先后的比较。
加固前:
加固后:
反编译java层代码
生成的本地层代码
图十一、保护后的本地层代码
从上面的效果图能够看到保护前的java层代码彻底下沉到本地层,为了观察先后的效果没有增长混淆和so的加壳处理,即使如此也有力的增大了攻击者的分析难度。
易盾最新一代的Java2C加固方案,以独有的“静态保护”技术,使得应用程序中的代码出现“下沉”,达到不可逆的效果,兼顾“冷热启动时间”、“CPU”、 “内存占用率”、“体积”等重要指标,同时保障用户加固的灵活性,能够免费试用。
做者介绍:
赵贝贝,网易易盾高级客户端安全工程师。2018年7月加入网易,主要负责安卓移动应用安全加固。
朱星星,网易易盾客户端安全开发。2011年加入网易,主要负责游戏反外挂、安卓移动应用安全。
相关文章:
【推荐】 3招搞定APP注册做弊