Android常见App加固厂商脱壳方法的整理
目录
- 简述(脱壳前学习的知识、壳的历史、脱壳方法)
- 第一代壳
- 第二代壳
- 第三代壳
- 第N代壳
简述
- Apk文件结构
- Dex文件结构
- 壳史
- 壳的识别
Apk文件结构

Dex文件结构

壳史
第一代壳 Dex加密
- Dex字符串加密
- 资源加密
- 对抗反编译
- 反调试
- 自定义DexClassLoader
第二代壳 Dex抽取与So加固
- 对抗第一代壳常见的脱壳法
- Dex Method代码抽取到外部(通常企业版)
- Dex动态加载
- So加密
第三代壳 Dex动态解密与So混淆
- Dex Method代码动态解密
- So代码膨胀混淆
- 对抗之前出现的所有脱壳法
第四代壳 arm vmp(未来)
- 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.基于特征的识别代码

第一代壳
- 内存Dump法
- 文件监视法
- Hook法
- 定制系统
- 动态调试法
内存Dump法
- 内存中寻找dex.035或者dex.036
- /proc/xxx/maps中查找后,手动Dump

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

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

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

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

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


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


定制系统
- 修改安卓源码并刷机

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

动态调试法
- IDA Pro



- gdb gcore法
.gdbserver :1234 –attach pid
.gdb
(gdb) target remote :1234
(gdb) gcore
coredump文件中搜索“dex.035”

第二代壳
- 内存重组法
- Hook法
- 动态调试
- 定制系统
- 静态脱壳机
内存重组法
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()

第三代壳
- dex2oat法
- 定制系统
dex2oat法
ART模式下,dex2oat生成oat时,内存中的DEX是完整的
http://bbs.pediy.com/showthread.php?t=210532

定制系统
Hook Dalvik_dalvik_system_DexFile_defineClassNative
枚举所有DexClassDef,对所有的class,调用dvmDefineClass进行强制加载

第N代壳
- so + vmp
- 动态调试 + 人肉还原
Android常见App加固厂商脱壳方法的整理的更多相关文章
- android 设置app root权限简单方法
vim frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java +709 private static void ...
- android学习——android 常见的错误 和 解决方法
1. Application does not specify an API level requirement! 解决方法:AndroidManifest.xml中 加入: <uses-sdk ...
- Android App加固原理与技术历程
App为什么会被破解入侵 随着黑客技术的普及化平民化,App,这个承载我们移动数字工作和生活的重要工具,不仅是黑客眼中的肥肉,也获得更多网友的关注.百度一下"App破解"就有529 ...
- Android应用APP脱壳笔记
[TOC] 天下游 模拟定位技术点简析 通过代码分析初步猜测模拟定位用到的几处技术点: 获取了Root权限 通过反射获取 android.os.ServiceManager 对应的函数 getServ ...
- Android自动化压力测试之Monkey Test Android常见的错误类型及黑白名单的使用方法(四)
Android常见的错误类型有两种 1.ANR类型 1)在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸) 2)BroadcastReceiver在10秒内没有执行完毕 2.Crash类型 1)异 ...
- Monkey压力测试Android常见的错误类型及黑白名单的使用方法
Android常见的错误类型有两种 1.ANR类型 1)在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸) 2)BroadcastReceiver在10秒内没有执行完毕 2.Crash类型 1)异 ...
- APP加固技术历程及未来级别方案:虚机源码保护
传统App加固技术,前后经历了四代技术变更,保护级别每一代都有所提升,但其固有的安全缺陷和兼容性问题始终未能得到解决.而下一代加固技术-虚机源码保护,适用代码类型更广泛,App保护级别更高,兼容性更强 ...
- #云栖大会# 移动安全专场——APP加固新方向(演讲速记)
主持人导语: 近些年来,移动APP数量呈现爆炸式的增长,黑产也从原来的PC端转移到了移动端,伴随而来的逆向攻击手段也越来越高明.在解决加固产品容易被脱壳的方案中,代码混淆技术是对抗逆向攻击最有效的方式 ...
- Android常见面试笔试题目
Android常见面试笔试题目 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 答:可以处理消息循环的线程,他是一个拥 ...
随机推荐
- 用于功率集成电路应用的600伏、10安、4H-SIC横向单沟道金属氧化物半导体场效应晶体管的演示和分析
用于功率集成电路应用的600伏.10安.4H-碳化硅横向单沟道金属氧化物半导体场效应晶体管的演示和分析 摘要: 本文报道了一个具有大电流处理能力(10 A)的600伏4H-碳化硅横向场效应晶体管的演示 ...
- JVM 中的异常
StackOverflowError 在 JVM 的栈中,如果线程要创建的栈帧大小大于栈容量的大小时,就会抛出 java.lang.StackOverflowError.比如下面的代码 public ...
- C#关于个Base64,MD5,16进制的转换
1,待签名数据以UTF-8的格式转字节流,对字节流进行MD5算法得到的签名字节流,再转换为16进制字符串,即生成了数字签名. byte[] targetData = md5.ComputeHash(S ...
- 使用函数式语言实践DDD
长期以来我都在实践OOP,进而通过OOP来实现DDD,特别是如何通过面向对象的技巧来建立一个领域模型.OO的一些特性在建立领域模型时显得恰如其分,能否掌握OO的技巧,对创建领域模型有着至关重要的作用. ...
- 为什么要从 Linux 迁移到 BSD1
为什么要从 Linux 迁移到 BSD1 作为一个操作系统,GNU/Linux 已经变得一团糟了,因为项目的分散性,内核的臃肿,以及商业利益的玩弄.从 GNU/Linux 迁移到 BSD 有几个技术上 ...
- 🚩数分工作了三年,我干了件很酷的事情
从17年毕业来,一直都在干数据分析的工作.和很多转行的小伙伴一样,没有对口的科班学习,摸不清数据分析具体情况,起初充满着很多迷茫. 在刚开始的1年半中,都是自己从淘宝买些课程,最多时,网盘放了4-5T ...
- MyBatis(八):MyBatis插件机制详解
MyBatis插件插件机制简介 MyBatis插件其实就是为使用者提供的自行拓展拦截器,主要是为了可以更好的满足业务需要. 在MyBatis中提供了四大核心组件对数据库进行处理,分别是Exec ...
- golang io操作之写篇
/** * @author livalon * @data 2018/9/4 15:11 */ package main import ( "os" "fmt" ...
- Nodejs学习笔记(3) 创建服务器:Web 模块(http)与 express 框架
目录 参考资料 1. 使用 http 模块创建服务器 1.1 实现思路及代码 1.2 HTTP 结构 1.2.1 Request中的重要字段 1.2.2 Response 头信息:文件类型.状态码.连 ...
- java例题_05 判断分数等级
1 /*5 [程序 5 判断分数等级] 2 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示,60-89 分之间的用 B 表示,60 分以下的用 C 表示. 3 程序 ...