目录

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

简述

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

Apk文件结构

Dex文件结构

壳史

第一代壳 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.基于特征的识别代码

第一代壳

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

内存Dump法

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

文件监视法

Hook法

定制系统

  • 修改安卓源码并刷机

动态调试法

  • IDA Pro

  • gdb gcore法
.gdbserver :1234 –attach pid
.gdb
(gdb) target remote :1234
(gdb) gcore

coredump文件中搜索“dex.035”

第二代壳

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

内存重组法

Dex篇

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

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

so篇

elfrebuild

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

Hook法

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

Hook dexFileParse

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

https://github.com/WooyunDota/DumpDex

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

Hook memcmp

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

定制系统

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

https://github.com/bunnyblue/DexExtractor

Hook dexfileParse

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

https://github.com/zyq8709/DexHunter

DexHunter的工作流程:

DexHunter的工作原理:

绕过三进程反调试

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

修改系统源码后:

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

ls /proc/345/task

./gdbserver :1234 --attach346
...
(gdb) gcore

gcore防Dump解决方案:

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

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

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

静态脱壳机

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

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

自定义linker脱so壳

https://github.com/devilogic/udog

main() -> dump_file()

第三代壳

  1. dex2oat法
  2. 定制系统

dex2oat法

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

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

定制系统

Hook Dalvik_dalvik_system_DexFile_defineClassNative

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

第N代壳

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


Android常见App加固厂商脱壳方法的整理的更多相关文章

  1. android 设置app root权限简单方法

    vim frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java +709 private static void ...

  2. android学习——android 常见的错误 和 解决方法

    1. Application does not specify an API level requirement! 解决方法:AndroidManifest.xml中 加入: <uses-sdk ...

  3. Android App加固原理与技术历程

    App为什么会被破解入侵 随着黑客技术的普及化平民化,App,这个承载我们移动数字工作和生活的重要工具,不仅是黑客眼中的肥肉,也获得更多网友的关注.百度一下"App破解"就有529 ...

  4. Android应用APP脱壳笔记

    [TOC] 天下游 模拟定位技术点简析 通过代码分析初步猜测模拟定位用到的几处技术点: 获取了Root权限 通过反射获取 android.os.ServiceManager 对应的函数 getServ ...

  5. Android自动化压力测试之Monkey Test Android常见的错误类型及黑白名单的使用方法(四)

    Android常见的错误类型有两种 1.ANR类型 1)在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸) 2)BroadcastReceiver在10秒内没有执行完毕 2.Crash类型 1)异 ...

  6. Monkey压力测试Android常见的错误类型及黑白名单的使用方法

    Android常见的错误类型有两种 1.ANR类型 1)在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸) 2)BroadcastReceiver在10秒内没有执行完毕 2.Crash类型 1)异 ...

  7. APP加固技术历程及未来级别方案:虚机源码保护

    传统App加固技术,前后经历了四代技术变更,保护级别每一代都有所提升,但其固有的安全缺陷和兼容性问题始终未能得到解决.而下一代加固技术-虚机源码保护,适用代码类型更广泛,App保护级别更高,兼容性更强 ...

  8. #云栖大会# 移动安全专场——APP加固新方向(演讲速记)

    主持人导语: 近些年来,移动APP数量呈现爆炸式的增长,黑产也从原来的PC端转移到了移动端,伴随而来的逆向攻击手段也越来越高明.在解决加固产品容易被脱壳的方案中,代码混淆技术是对抗逆向攻击最有效的方式 ...

  9. Android常见面试笔试题目

    Android常见面试笔试题目 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 答:可以处理消息循环的线程,他是一个拥 ...

随机推荐

  1. 数组的常用方法之split

    今天我们来聊一下数组的常用方法:split 返回值:一个新数组. 1.该方法可以直接调用不传任何值,则会直接将字符串转化成数组. var str = 'I love Javascript'; cons ...

  2. 数据库事务 ACID属性、数据库并发问题和四种隔离级别

    数据库事务 ACID属性.数据库并发问题和四种隔离级别 数据库事务 数据库事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态 一组逻辑操作单元:一个或多个DML操作 事务处理原则 保证所有事务都 ...

  3. 锐捷RG-UAC统一上网行为管理审计系统账号密码泄露漏洞 CNVD-2021-14536

    一:产品介绍: 锐捷 RG-UAC 统一上网行为管理审计系统 锐捷统一上网行为管理与审计RG-UAC系列是星网锐捷网络有限公司自主研发的上网行为管理与审计产品,以路由.透明.旁路或混合模式部署在网络的 ...

  4. hibernate 中持久化标识 OID

    OID 全称是 Object Identifier,又叫做对象标识符 是 hibernate 用于区分两个对象是否是同一个对象的标识的方法 标识符的作用:可以让 hibernate 来区分多个对象是否 ...

  5. 局部莫兰指数的计算(运用ArcMap)

    做任务时需要运用到局部莫兰指数,卡在用Python计算的思路上好久,最后发现可以用ArcGIS进行处理,步骤简单易懂. 主要步骤为: 1.读入数据(一定要为shp文件),对于用ecognition直接 ...

  6. Codeforces Round #537 C. Creative Snap

    题面: 传送门 题目描述: 灭霸想要摧毁复仇者联盟的基地.基地的长度为2的n次方,基地可以看成是一个长度为2的n次方的数组.基地的每一个位置可以由很多个超级英雄,但是一个超级英雄只能站一个位置.灭霸想 ...

  7. Nodejs学习笔记(5) 文件上传系统实例

    目录 2018.8.4更新:  MySQL可以存放几乎任何类型的数据(图片.文档.压缩包等),但这不是最好的解决方案,正常情况下都是在数据库中存放文件路径,图片.音乐.视频.压缩包.文档等文件存放在硬 ...

  8. teprunner测试平台用例前置模块开发

    本文开发内容 现在正式进入测试相关功能开发.teprunner测试平台底层是pytest,中间层是tep,还没了解的朋友可以先看看tep的文章,整个平台的设计思路和后面用例的执行都会基于这个工具.te ...

  9. 快速创建你的第一个Spring Boot项目

    1. 创建工程 打开idea,利用Spring Boot搭建一个web工程,切身体会一下Spring Boot所带来的魅力!看看SpringBoot是如何快速搭建一个web项目. New-->P ...

  10. TypeError: 'list' object cannot be interpreted as an integer Python常见错误

    想要通过索引来迭代一个list或者string的元素, 这需要调用 range() 函数.要记得返回len 值而不是返回这个列表.