常见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.so360: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 + dumpDEXdumpDex https://github.com/CvvT/dumpDex

文件监视法Dex优化生成odexinotifywait-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动态调试 + 人肉还原