目录

  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. Linux速通06 系统的初始化服务和监控

    Linux系统引导的顺序 # 掌握 Linux系统引导的顺序 * BIOS的工作是检查计算机的硬件设备,如CPU.内存和风扇速度等 * MBR会在启动盘的第一个块中,大小为512B,其中前446B是引 ...

  2. EF Core中通过Fluent API完成对表的配置

    EF Core中通过Fluent API完成对表的配置 设置实体在数据库中的表名 通过ToTable可以为数据模型在数据库中自定义表名,如果不配置,则表名为模型名的复数形式 public class ...

  3. 白嫖微软Azure12个月服务器

    前言 Azure是微软提供的一个云服务平台.是全球除了AWS外最大的云服务提供商.Azure是微软除了windows之外另外一个王牌,微软错过了移动端,还好抓住了云服务.这里的Azure是Azure国 ...

  4. Distributed Cache(分布式缓存)-SqlServer

    分布式缓存是由多个应用服务器共享的缓存,通常作为外部服务存储在单个应用服务器上,常用的有SqlServer,Redis,NCache. 分布式缓存可以提高ASP.NET Core应用程序的性能和可伸缩 ...

  5. Linux目录,rpm及top,vi命令简记

    一次简单的Linux常用操作记录 一.一些Linux目录结构 /bin 存放二进制可执行文件(ls.cat.mkdir等),一些常用的命令一般都在这里. /etc 存放系统管理和配置文件 /home ...

  6. ASP.NET Core 在 .NET 6 Preview 2 中的更新

    原文:<ASP.NET Core updates in .NET 6 Preview 2>,作者 Daniel Roth .NET 6 预览版 2 现已推出,其中包括许多对 ASP.NET ...

  7. 关于python浮点数精度问题计算误差的原因分析

    在python中使用浮点数运算可能会出现如下问题 a = 0.1+0.2print(a) 输出的结果是 0.30000000000000004 原因如下: 出现上面的情况,主要还是因浮点数在计算机中实 ...

  8. 从键盘读入学生成绩,找出最高分, 并输出学生成绩等级(Java)

    从键盘读入学生成绩,找出最高分, 并输出学生成绩等级 一.题目 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10 等级为'A' 成绩>=最高分-20 等级为'B' ...

  9. A Color Game

    题目大意:  给定一个只包含七种字母的字符串,如果满足一段连续相同的字符长度大于等于K那么即可消除,问最后能不能变为空字符. 题解:很明显是用区间dp来解决,我们设dp[l][r][k]代表的是在[l ...

  10. 计算机图形学中使用Turbo C++画图步骤

    一.下载安装Turbo C++ 我安装的是Turbo C++ 3.2.2.0下载链接 二.画图 1.打开Turbo C++,点击右下角start turbo C++ 2.点击file ->new ...