常见App加固厂商脱壳方法研究

目录

  1. 简述(脱壳前学习的知识、壳的历史、脱壳方法)
  2. 第一代壳
  3. 第二代壳
  4. 第三代壳
  5. 第N代壳

简述

  1. Apk文件结构
  2. Dex文件结构
  3. 壳史
  4. 壳的识别

Apk文件结构

常见app加固厂商脱壳方法研究

Dex文件结构

常见app加固厂商脱壳方法研究

壳史

第一代壳 Dex加密

  1. Dex字符串加密
  2. 资源加密
  3. 对抗反编译
  4. 反调试
  5. 自定义DexClassLoader

第二代壳 Dex抽取与So加固

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

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

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

第四代壳 arm vmp(未来)

  1. vmp

壳的识别

1.用加固厂商特征:

  • 娜迦: 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

2.基于特征的识别代码

常见app加固厂商脱壳方法研究

第一代壳

  1. 内存Dump法
  2. 文件监视法
  3. Hook法
  4. 定制系统
  5. 动态调试法

内存Dump法

  • 内存中寻找dex.035或者dex.036
  • /proc/xxx/maps中查找后,手动Dump

常见app加固厂商脱壳方法研究

  • android-unpacker https://github.com/strazzere/android-unpacker

常见app加固厂商脱壳方法研究

  • drizzleDumper https://github.com/DrizzleRisk/drizzleDumper
  • 升级版的android-unpacker,read和lseek64代替pread,匹配dex代替匹配odex

常见app加固厂商脱壳方法研究

  • IDA Pro + dumpDEX
  • dumpDex https://github.com/CvvT/dumpDex

常见app加固厂商脱壳方法研究

文件监视法

  • Dex优化生成odex
  • inotifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android
  • 监视文件变化

常见app加固厂商脱壳方法研究

  • notifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android
  • 监视DexOpt输出

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

Hook法

  • Hook dvmDexFileOpenPartial
  • http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

定制系统

  • 修改安卓源码并刷机

常见app加固厂商脱壳方法研究

  • DumpApk https://github.com/CvvT/DumpApk
  • 只针对部分壳

常见app加固厂商脱壳方法研究

动态调试法

  • IDA Pro

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

  • gdb gcore法

coredump文件中搜索“dex.035”

常见app加固厂商脱壳方法研究

第二代壳

  1. 内存重组法
  2. Hook法
  3. 动态调试
  4. 定制系统
  5. 静态脱壳机

内存重组法

Dex篇

ZjDroid http://bbs.pediy.com/showthread.php?t=190494

对付一切内存中完整的dex,包括壳与动态加载的jar

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

so篇

elfrebuild

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

构造soinfo,然后对其进行重建

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

Hook法

针对无代码抽取且Hook dvmDexFileOpenPartial失败

Hook dexFileParse

http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

常见app加固厂商脱壳方法研究

https://github.com/WooyunDota/DumpDex

常见app加固厂商脱壳方法研究

针对无代码抽取且Hook dexFileParse失败

Hook memcmp

http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

定制系统

修改安卓源码并刷机-针对无抽取代码

https://github.com/bunnyblue/DexExtractor

常见app加固厂商脱壳方法研究

Hook dexfileParse

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

DexHunter-最强大的二代壳脱壳工具

https://github.com/zyq8709/DexHunter

DexHunter的工作流程:

常见app加固厂商脱壳方法研究

DexHunter的工作原理:

常见app加固厂商脱壳方法研究

绕过三进程反调试

http://bbs.pediy.com/showthread.php?p=1439627

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

修改系统源码后:

常见app加固厂商脱壳方法研究

http://www.cnblogs.com/lvcha/p/3903669.html

常见app加固厂商脱壳方法研究

常见app加固厂商脱壳方法研究

gcore防Dump解决方案:

http://bbs.pediy.com/showthread.php?t=198995

断点mmap调试,针对Hook dexFileParse无效

原理: dexopt优化时, dvmContinueOptimization()->mmap()

常见app加固厂商脱壳方法研究

静态脱壳机

分析壳so逻辑并还原加密算法

http://www.cnblogs.com/2014asm/p/4924342.html

常见app加固厂商脱壳方法研究

自定义linker脱so壳

https://github.com/devilogic/udog

常见app加固厂商脱壳方法研究

第三代壳

  1. dex2oat法
  2. 定制系统

Dex2oat法

ART模式下,dex2oat生成oat时,内存中的DEX是完整的

http://bbs.pediy.com/showthread.php?t=210532

常见app加固厂商脱壳方法研究

定制系统

Hook Dalvik_dalvik_system_DexFile_defineClassNative

枚举所有DexClassDef,对所有的class,调用dvmDefineClass进行强制加载

常见app加固厂商脱壳方法研究

第N代壳

  1. so + vmp
  2. 动态调试 + 人肉还原

    目录

    1. 简述(脱壳前学习的知识、壳的历史、脱壳方法)
    2. 第一代壳
    3. 第二代壳
    4. 第三代壳
    5. 第N代壳

    简述

    1. Apk文件结构
    2. Dex文件结构
    3. 壳史
    4. 壳的识别

    Apk文件结构

    常见app加固厂商脱壳方法研究

    Dex文件结构

    常见app加固厂商脱壳方法研究

    壳史

    第一代壳 Dex加密

    1. Dex字符串加密
    2. 资源加密
    3. 对抗反编译
    4. 反调试
    5. 自定义DexClassLoader

    第二代壳 Dex抽取与So加固

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

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

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

    第四代壳 arm vmp(未来)

    1. vmp

    壳的识别

    1.用加固厂商特征:

    • 娜迦: 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

    2.基于特征的识别代码

    常见app加固厂商脱壳方法研究

    第一代壳

    1. 内存Dump法
    2. 文件监视法
    3. Hook法
    4. 定制系统
    5. 动态调试法

    内存Dump法

    • 内存中寻找dex.035或者dex.036
    • /proc/xxx/maps中查找后,手动Dump

    常见app加固厂商脱壳方法研究

    • android-unpacker https://github.com/strazzere/android-unpacker

    常见app加固厂商脱壳方法研究

    • drizzleDumper https://github.com/DrizzleRisk/drizzleDumper
    • 升级版的android-unpacker,read和lseek64代替pread,匹配dex代替匹配odex

    常见app加固厂商脱壳方法研究

    • IDA Pro + dumpDEX
    • dumpDex https://github.com/CvvT/dumpDex

    常见app加固厂商脱壳方法研究

    文件监视法

    • Dex优化生成odex
    • inotifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android
    • 监视文件变化

    常见app加固厂商脱壳方法研究

    • notifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android
    • 监视DexOpt输出

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    Hook法

    • Hook dvmDexFileOpenPartial
    • http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    定制系统

    • 修改安卓源码并刷机

    常见app加固厂商脱壳方法研究

    • DumpApk https://github.com/CvvT/DumpApk
    • 只针对部分壳

    常见app加固厂商脱壳方法研究

    动态调试法

    • IDA Pro

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    • gdb gcore法

    coredump文件中搜索“dex.035”

    常见app加固厂商脱壳方法研究

    第二代壳

    1. 内存重组法
    2. Hook法
    3. 动态调试
    4. 定制系统
    5. 静态脱壳机

    内存重组法

    Dex篇

    ZjDroid http://bbs.pediy.com/showthread.php?t=190494

    对付一切内存中完整的dex,包括壳与动态加载的jar

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    so篇

    elfrebuild

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    构造soinfo,然后对其进行重建

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    Hook法

    针对无代码抽取且Hook dvmDexFileOpenPartial失败

    Hook dexFileParse

    http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

    常见app加固厂商脱壳方法研究

    https://github.com/WooyunDota/DumpDex

    常见app加固厂商脱壳方法研究

    针对无代码抽取且Hook dexFileParse失败

    Hook memcmp

    http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    定制系统

    修改安卓源码并刷机-针对无抽取代码

    https://github.com/bunnyblue/DexExtractor

    常见app加固厂商脱壳方法研究

    Hook dexfileParse

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    DexHunter-最强大的二代壳脱壳工具

    https://github.com/zyq8709/DexHunter

    DexHunter的工作流程:

    常见app加固厂商脱壳方法研究

    DexHunter的工作原理:

    常见app加固厂商脱壳方法研究

    绕过三进程反调试

    http://bbs.pediy.com/showthread.php?p=1439627

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    修改系统源码后:

    常见app加固厂商脱壳方法研究

    http://www.cnblogs.com/lvcha/p/3903669.html

    常见app加固厂商脱壳方法研究

    常见app加固厂商脱壳方法研究

    gcore防Dump解决方案:

    http://bbs.pediy.com/showthread.php?t=198995

    断点mmap调试,针对Hook dexFileParse无效

    原理: dexopt优化时, dvmContinueOptimization()->mmap()

    常见app加固厂商脱壳方法研究

    静态脱壳机

    分析壳so逻辑并还原加密算法

    http://www.cnblogs.com/2014asm/p/4924342.html

    常见app加固厂商脱壳方法研究

    自定义linker脱so壳

    https://github.com/devilogic/udog

    常见app加固厂商脱壳方法研究

    第三代壳

    1. dex2oat法
    2. 定制系统

    Dex2oat法

    ART模式下,dex2oat生成oat时,内存中的DEX是完整的

    http://bbs.pediy.com/showthread.php?t=210532

    常见app加固厂商脱壳方法研究

    定制系统

    Hook Dalvik_dalvik_system_DexFile_defineClassNative

    枚举所有DexClassDef,对所有的class,调用dvmDefineClass进行强制加载

    常见app加固厂商脱壳方法研究

    第N代壳

    1. so + vmp
    2. 动态调试 + 人肉还原
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值