文章目录

  • 1. 动态加载
    • 什么是动态加载? 为什么要动态加载?
  • 2. ClassLoader修正
    • 解决手段1:反射替换成DexClassLoader
    • 解决手段2:插入DexClassLoader
  • 3. 壳史
    • 第一代壳 Dex加密
    • 第二代壳 Dex抽取与So加固
    • 第三代壳 Dex动态解密与So混淆
    • 第四代壳 arm vmp(未来)
  • 4.用加固厂商特征:
  • 5. 加壳技术发展
    • Dex的加固技术发展
    • so加固的种类
  • 6. 加壳技术的识别
    • 函数抽取
    • VMP
    • Dex2C
    • 如何快速区分apk所采用的保护技术?
    • 如何区分VMP和Dex2C?
  • 7. 各种壳的解决方案
    • Dex整体加壳的基础防护
    • 函数抽取是中阶防护
    • VMP和dex2c是高级防护

参考: https://www.jb51.net/article/133834.htm

1. 动态加载

动态加载是Dex加壳、插件化、热更新的基础
比如阿里的AndFix和HotFix,腾讯的tinker、美团的Robust等热修复框架的基础

什么是动态加载? 为什么要动态加载?

动态加载就是用到的时候再去加载,也叫懒加载,也就意味着用不到的时候不会去加载。

2. ClassLoader修正

动态加载的dex不具备生命周期特征,App中的Activity、Service等组件无法正常工作,只能完成一半函数的调用;
需要对ClassLoader进行修正,App才能够正常运行,两种修正手段;

解决手段1:反射替换成DexClassLoader

修改系统组件类的ClassLoader(mClassLoader),通过反射的方式进行替换,替换成DexClassLoader.

解决手段2:插入DexClassLoader

在PathClassLoader和BootClassLoader中间插入DexClassLoader(双亲委派)

3. 壳史

第一代壳 Dex加密

Dex字符串加密资源加密对抗反编译反调试自定义DexClassLoader

第二代壳 Dex抽取与So加固

对抗第一代壳常见的脱壳法Dex Method代码抽取到外部(通常企业版)Dex动态加载So加密

第三代壳 Dex动态解密与So混淆

Dex Method代码动态解密So代码膨胀混淆对抗之前出现的所有脱壳法

第四代壳 arm vmp(未来)

vmp壳的识别

4.用加固厂商特征:

娜迦: libchaosvmp.so , libddog.solibfdog.so
爱加密:libexec.so, libexecmain.so
梆梆: libsecexe.so, libsecmain.so , libDexHelper.so
360:libprotectClass.so, libjiagu.so
通付盾:libegis.so
网秦:libnqshield.so
百度:libbaiduprotect.so

5. 加壳技术发展

Dex的加固技术发展

1、 dex整体加固:文件加载和内存加载
2、 函数抽取:在函数粒度完成代码的保护
3、 VMP和DEX2C:Java函数Native化

so加固的种类

1、 基于init、init_array以及JNI_Onload函数的加壳
2、基于自定义linker的加壳

6. 加壳技术的识别

整体加固是基础,所有加壳的app必然都有!关键是在于怎么区分函数抽取、VMP以及dex2c甚至是多种技术混合的混合型壳

函数抽取

获取到保护的dex后,函数体的内容是无效的,注意这里说的是无效,而不是无意义。有的app加壳后函数亦然是有意义的,但不是我们想要的;

VMP

获取到保护的dex后,函数的属性由Java属性变为native,典型的由数字的onCreate函数Native化

Dex2C

对Java函数进行语义分析后生成C/C++代码,生成相应的so文件。

如何快速区分apk所采用的保护技术?

是否Native化 函数体无效
函数抽取类壳 ×
VMP壳 native化
Dex2C壳 native化

如何区分VMP和Dex2C?

注册地址是否相同 函数逻辑是否相似
VMP壳
Dex2C壳 × ×

7. 各种壳的解决方案

Dex整体加壳的基础防护

1、文件加载:定位解密文件是关键
2、内存加载: 加载的时候和内存起始地址是关键

通用方案:dex打开和优化的流程以及产出的odex、dex2oat编译的流程和生成的oat文件等等

函数抽取是中阶防护

1、类加载和函数执行前的流程解密
2、函数执行中动态自解密

方案:关注被抽取的函数的执行流程是关键! 定位被抽取函数的恢复时机即可!

VMP和dex2c是高级防护

1、VMP:定位解释器是关键,找到映射关系即可恢复;
2、dex2C: 基础是编译原理,进行了等价语义转换,彻底还原难度巨大;

通用解决方案:关注JNI相关的api调用是关键,也是分析VMP和dex2c保护的函数的逻辑的关键;

一二三代壳和加壳技术分类识别相关推荐

  1. 逆向工程-查壳去壳和加壳的基本原理

    逆向工程-查壳去壳和加壳的基本原理 这里先说明一下壳的概念,壳主要是负责保护软件不被非法修改和反编译的程序. 它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务. 查壳的基本原理:像PE ...

  2. 查壳去壳和加壳的使用指南

    一.查壳去壳和加壳 壳的定义 计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序.它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务 查壳 查壳软件 fileinfoexe( ...

  3. 按照实际案例用常用的查壳去壳和加壳工具说明使用方法

    除了穿花衣服迷惑杀毒软件,木马还会套上盔甲,缩在乌龟壳中,念着:你咬我呀,你咬我呀,从容不迫地躲过杀毒软件的查杀-- 壳就是木马的盔甲 盔甲是人类在战争中发现的一种保护全身的防御武器(盔保护的是头部, ...

  4. 查壳去壳和加壳的基本原理

    1.1  壳的分类 1. 通常分为压缩壳和加密壳两类. 2. 压缩壳的特点是减小软件体积大小, 3. 加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机制. ...

  5. 木马病毒隐身穿墙术解密之修改特征码和加壳

    木马病毒隐身穿墙术解密之修改特征码和加壳 作者:比特网 | 比特网 本文关键词:安全 病毒 木马 现在,木马病毒在各种安全防范措施的拦截之下,依然没有任何减少的迹象,甚至还在向更多的方向发展.在防范木 ...

  6. cs免杀之基于混淆和加壳

    写在前面 最近也是没什么状态以及被身边人,事,物所受影响,环境对自己的影响也是非常大,但是随着时间的变化一切也都会改变,离群所居者,不是神灵,就是野兽,所以说需要脱离这种状态,找到自己人生中明确的方向 ...

  7. 壳的相关知识与木马加壳改壳免杀及各类修改特征码免杀方法

    1.壳的分类:压缩壳和加密壳 2.壳的作用:保护和文件免杀 二.加壳免杀的几个弱点 1.不能躲过像瑞星这类具有内存查杀功能的杀毒软件. 2.一般不能躲过卡巴的查杀 因为卡巴采用了一种叫虚拟机技术.首先 ...

  8. 壳 查壳 去壳 加壳的基本原理

    壳的概念 是指在一个程序的外面再包裹上另外一段代码,保护里面的代码不被非法修改或反编译的程序.壳最本质的功能就是实现加载器,它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务. 壳绝对不 ...

  9. 小米网关一二三代的区别【转载】网关,mesh ,zigbee

    小米智能家居 北京小米科技有限责任公司 索要资料 一般一个网关覆盖150平米的房子没什么问题,但是如果设备离网关太远,同时又隔了两三堵墙,中间又没有其它设备,那就会有点问题(zigbee设备每个设备之 ...

  10. 软件的壳和壳的含义、概念以及加壳和脱壳方法

    软件的壳和壳的含义.概念以及加壳和脱壳方法 PE(Portable Executable) 也就是EXE和DL)文件所具有的起压缩.加密.保护作用的东西.可以用PEiD等软件查壳. 加壳通过修改程序入 ...

最新文章

  1. ios证书导出不了p12文件_IOS苹果证书无法生成.P12文件解决方法
  2. Java课程设计——坦克大战
  3. python翻译成matlab_matlab语言转译成python
  4. 基于Sql Server 2008的分布式数据库的实践(三)
  5. c语言编程计算人口增长模式转变示意图,读“人口增长模式及其转变示意图”,回答下列问题。(5分)(1)图中字母代表的人口增长模式是:A____________、B____...
  6. kotlin获取属性_Kotlin程序获取系统名称
  7. oracle中的to_number,Oracle中to_number()函数的用法
  8. Orchard源码分析(5.3):EndRequest事件处理(DefaultOrchardHost.EndRequest方法)
  9. UVa 116 (多段图的最短路) Unidirectional TSP
  10. docker的核心原理-cgroup
  11. VS工程下的tlb, tlh, tli文件说明(COM)
  12. VB 2010 (32)泛型方法
  13. android 游戏摇杆ui,LayaBox实现2D游戏八方向虚拟摇杆
  14. 主数据管理(MDM)的成熟度
  15. win10系统如何telnet服务器,win10专业版官网系统如何开启telnet服务的办法
  16. Lipschitz continuity
  17. Unity UGUI 检测按钮的按下与抬起
  18. [SAE]免费服务器:新浪云服务器SAE的注册与使用
  19. 谷歌员工年薪中位数近190万元!科技公司年薪排行,哪家强?
  20. [版本发布]OpenNCC百度定制版VCAM发布

热门文章

  1. 如何利用Matlab对指定条件下的excel单元格填充颜色
  2. 关于微信各名词的英文翻译
  3. H3C IP地址拒绝及释放
  4. OpenGL制作简易地图(一)
  5. redis命令之哈希表类型hget命令用法详情(不支持多field)
  6. 介绍几种wifi电源管理模式
  7. 2016年高校保送生拟录取名单(清华大学)
  8. 鸿蒙大陆v2.8正式版,鸿蒙大陆正式版地图下载-鸿蒙大陆下载 V2.22--pc6下载站
  9. JNI/NDK入门指南之JNI数据类型,描述符详解
  10. 人工智能系列之一人工智能基本流程