Coder Social home page Coder Social logo

neprogramguarddecompilation's Introduction

网易易盾的防反编译、加固等技术实现

[TOC]

一、Android客户端安全攻防分析

1.1 反编译安全威胁

1.1.1 攻击方式

  • 文件反编译:DEX文件、SDK文件、SO文件、资源文件;
  • 代码分析:Java代码、C/C++代码、JS/HTML代码;
  • 逆向破解:调试、抓包、HOOK注入、绕过签名校验等。

1.1.2 安全威胁

  • 逆向分析:代码调试,漏洞挖掘,协议分析;
  • 二次打包:APP盗版仿冒,插入广告、病毒木马,修改资源等;
  • 功能破解:VIP,会员,内购破解,去广告等。

1.2 Android应用加固

1.2.1 加固清单

功能 说明
DEX加固 DEX文件进行加壳保护,防止被静态反编译工具破解获取源码
防二次打包 应用在被非法二次打包后不能正常运行
防调试器 防止通过调试工具对应用进行非法破解
内存防dump 防止运行时在内存中dump数据
资源文件保护 加密资源文件,防止APK资源文件被破解
H5文件混淆 JS/HTML代码文件进行保护,防止破解分析
SDK加固 jar/AAR文件进行保护,防止反编译获取源码
SO加密保护 SO进行加壳,保护native代码不被逆向分析

1.2.2 网易易盾解决方案

Android加固:

  1. DEX加固;
  2. SDK加固;
  3. 资源加固;
  4. SO加固;
  5. H5保护。

1.2.3 Android加固主要功能

image

二、加固技术实现

2.1 DEX加固

  • **防反编译:**基础的做法是针对市面上出现的反编译工具做对抗,找漏洞,使得这些工具无法反编译。后来升级到VMP加固和java2c的方案之后,防反编译已经不是主要问题了,因为被网易易盾加固后,即使反编译出来的内容也不是原来的代码了,仅仅是一些无用的外壳代码。
  • **VMP加固:**主要是把dex中的函数指令运行在壳的VMP环境中,极大地提高了破解的门槛,让破解变得不可能。
  • **Java2c:**通过把java代码在加固阶段就转换为Native层的c代码,破解分析完全不可逆,在性能上相较于VMP加固也有很大改进。

2.1.1 保护classes.dex

  • 加固前的classes.dexclases2.dex直接暴露给了分析者;
  • 加固后只有一个classes.dex,用baksmali.jar/jeb等工具查看,无法查看原app代码逻辑,同时保护classes.dexclasses2.dex

image

防止classes.dex被逆向分析

  • 加固前很容易反编译出jar包文件查看源码;
  • 加固后让反编译失败,并无从查看源码。

image

代码逻辑混淆替换

image

2.1.2 VMP保护效果

image

VMP指令替换:

image

VMP执行流程:

加固指令加密替换 --> APP运行 --> 外壳执行 --> 加载加密DEX指令 --> 易盾虚拟机解析指令

2.1.3 Java2c保护效果

方法级,Java代码彻底转换为Native代码指令。与VMP相比,用空间换时间。

image

image

java2c原理:

image

2.1.4 防止动态调试

加固后APK一旦被调试,APP异常退出,阻断调试。使用IDA Pro调试APP自动退出。

image

2.2 资源加固

2.2.1 assets资源透明加解密

image

2.2.2 res资源混淆保护

image

2.2.3 H5保护效果--js保护

保护方式:

  • 字符串加密;
  • 混淆/去log/变量名混淆/函数名混淆;
  • 压缩;
  • 游戏保护/平台识别;
  • 防篡改/防加速。

image

2.2.4 H5保护效果--html保护

保护方式:

  • 加密后内容分块;
  • 乱序插入干扰信息;
  • 压缩处理,去除注释无用属性等;
  • 平台识别,检测到非移动平台,不显示网页。

image

2.3 SDK/SO加固

2.3.1 SDK加固

从代码安全、文件安全等方面对SDK进行保护。对抗反编译手段,防止恶意篡改SDK、窃取用户隐私信息等,有效提升SDK保护的强度。

  • SDK接口保持不变,对接入者透明;
  • 支持JAR包、AAR包;
  • 可灵活指定加固保护的类和函数;
  • 加固体积增量几乎无影响。

Java代码保护

JAR包的保护,我们采取将重要逻辑代码抽离保护的方案,在运行时再动态修复回去,这样接入者在开发阶段仍然可以依赖JAR包作为库文件直接引用接口函数,保持了接入者开发的透明。但是实际代码又是抽离的,我们测试时只选取了xxxx.jar中类com.test.app.view.ExampleShell的接口进行处理,那么接入者在打开JAR包时只能看到如下的效果:

image

函数的指令代码被隐藏保护了,相应的,其它类和函数也可以依此方案处理。

由于代码逻辑被隐藏掉了,接入者看不到代码逻辑,也就无法分析甚至阉割SDK的功能了。

2.3.2 SO加固

SO加固可以阻断IDA分析soso代码加密。SO加固后IDA将无法正常打开SO进行分析,IDA会显示如下报错:

image

SO加固后与加固前已没有任何相似性,代码合字符串都被加密(左边为原始SO,右边为加固后的SO):

image

SO导出函数隐藏

SO调用接口常常以Java_xxx_xxx_xxx形式导出,从接口名字即可大致看出该函数的功能。SO加固可将该函数完全隐藏,此处将反IDA静态分析功能去掉做示例对比:

image

SO加固反调试

SO加固反调试效果,IDA attach到进程上后,IDA面板都为空,获取不到指令和模块信息:

image

SO加固保护优点

优点 介绍
无需源码 只需要编译好的so即可加保护,相比于有些厂商提交源码的so保护方式,更为安全,有效保护厂商的技术机密
关键函数动态加密 一些关键函数运行完后,对其进行动态加密,提升安全性
全平台支持 支持armeabiarmeabi-v7ax86arm64-v8ax86_64五大平台
防系统API HOOK Hook一些系统API,比如strcmpstrcpy等字符串操作函数就可以获取到很多关键信息。加保护后,这些hook将获取不到任何信息
无法脱壳 直接对ELF结构进行改造,仅在运行时存在可运行的代码,其它结构全部重构,任何时刻都不存在原生so的内存

neprogramguarddecompilation's People

Contributors

tianyalu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.