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这三个类,那么他们之间的关系你是否弄清楚了呢? 答:可以处理消息循环的线程,他是一个拥 ...
随机推荐
- CTF-杂项笔记
01 赛题解答 (1)目标:了解modbus协议 (2)解题: 密文:666C61677B4533334237464438413342383431434139363939454 ...
- 苹果M1处理器Mac“翻车”:用户吐槽SSD
SSD如今被不少PC用户所推崇,其优势在于读写速度快.工作无噪音,不过,缺点是寿命较机械硬盘差点.厂商对SSD通常都会标注一个最大可写入量(TBW),提醒用户关注健康数据,以免掉盘等严重问题. 越来越 ...
- RPC基础以及造一个RPC的轮子需要注意些什么
RPC基础以及造一个RPC的轮子需要注意些什么 前言 rpc即远程过程调用,是分布式系统常用的通信方法.远程可以是在一台机器上的不同进程或在不同一个机器上的不同进程.rpc更看重速度,像调用本地方法一 ...
- 如何选择 WebClient,HttpClient,HttpWebRequest
当我们在用 .NET 调用 RestAPI 时通常有三种选择,分别为:WebClient, HttpWebRequest,HttpClient,这篇文章我们将会讨论如何使用这三种方式去调用 RestA ...
- Qt添加注释模板
背景 软件:Qt Creator 在写代码的时候我们为了规范化,一般会加文件注释.类注释和函数注释 用注释来说明我们的代码,也方便模块化开发 那么我们在写注释的时候经常会写一些重复的内容,我们会复制粘 ...
- .NET团队送给.NET开发人员的云原生学习资源
企业正在迅速采用云的功能来满足用户需求,提高应用程序的可伸缩性和可用性.要完全拥抱云并优化节约成本,就需要在设计应用程序时考虑到云的环境,也就是要用云原生的应用开发方法.这意味着不仅要更改应用程序的构 ...
- 微服务面试必问的Dubbo,这么详细还怕自己找不到工作?
大家好,我是小羽. Dubbo 起源于阿里巴巴,对于我们做电商开发的人来说,基本是首选的技术,那么为何一个区区 soa 服务治理框架,会受到这么多人的青睐呢? 今天就跟着小羽一起看看这个微服务框架之一 ...
- springboot+druid报错log4j:WARN No appenders could be found for logger (druid.sql.Connection). log4j:WARN Please initialize the log4j system properly.
解决方案:新建文件log4j.properties log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.Con ...
- Python面向对象练习题
1.模拟栈操作原理 先进后出 1.初始化(创建一个存储数据的列表) 2.进栈使用列表保存数据 3.出栈 使用列表删除数据 4.查看栈顶元素 切片获取列表最后一位数据 5.判断是否为空栈 6 ...
- 用python连接数据库模拟用户登录
使用pycharm下载pymysql库,在终端输入命令: pip install mysql 使用pycharm写登入操作前需要在数据库内添加一些数据,比如用户名和密码 create database ...