本文章原作者 非蟲,文章來源網站Mottoin

目錄

簡述(脫殼前學習的知識、殼的歷史、脫殼方法)

  • 第一代殼
  • 第二代殼
  • 第三代殼
  • 第N代殼

簡述

  • Apk文件結構
  • Dex文件結構
  • 殼史
  • 殼的識別

== 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

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

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

文件監視法

  • 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”

第二代殼

  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. 動態調試 + 人肉還原

來源鏈接:http://www.mottoin.com/89035.html


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/44/