常見android app加固廠商脫殼方法研究
目錄簡(jiǎn)述(脫殼前學(xué)習(xí)的知識(shí)、殼的歷史、脫殼方法)
第一代殼
第二代殼
第三代殼
第N代殼
簡(jiǎn)述Apk文件結(jié)構(gòu)Dex文件結(jié)構(gòu)殼史殼的識(shí)別Apk文件結(jié)構(gòu)

Dex文件結(jié)構(gòu)

殼史
第一代殼 Dex加密
Dex字符串加密資源加密對(duì)抗反編譯反調(diào)試自定義DexClassLoader
第二代殼 Dex抽取與So加固
對(duì)抗第一代殼常見的脫殼法Dex Method代碼抽取到外部(通常企業(yè)版)Dex動(dòng)態(tài)加載So加密
第三代殼 Dex動(dòng)態(tài)解密與So混淆
Dex Method代碼動(dòng)態(tài)解密So代碼膨脹混淆對(duì)抗之前出現(xiàn)的所有脫殼法
第四代殼 arm vmp(未來)
vmp殼的識(shí)別
1.用加固廠商特征:
娜迦: libchaosvmp.so , libddog.solibfdog.so愛加密:libexec.so, libexecmain.so梆梆: libsecexe.so, libsecmain.so , libDexHelper.so360:libprotectClass.so, libjiagu.so通付盾:libegis.so網(wǎng)秦:libnqshield.so百度:libbaiduprotect.so
2.基于特征的識(shí)別代碼

第一代殼內(nèi)存Dump法文件監(jiān)視法Hook法定制系統(tǒng)動(dòng)態(tài)調(diào)試法內(nèi)存Dump法內(nèi)存中尋找dex.035或者dex.036/proc/xxx/maps中查找后,手動(dòng)Dump

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

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

IDA Pro + dumpDEXdumpDex https://github.com/CvvT/dumpDex

文件監(jiān)視法Dex優(yōu)化生成odexinotifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android監(jiān)視文件變化

notifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android監(jiān)視DexOpt輸出


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


定制系統(tǒng)修改安卓源碼并刷機(jī)

DumpApk https://github.com/CvvT/DumpApk只針對(duì)部分殼

動(dòng)態(tài)調(diào)試法IDA Pro



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

第二代殼內(nèi)存重組法Hook法動(dòng)態(tài)調(diào)試定制系統(tǒng)靜態(tài)脫殼機(jī)內(nèi)存重組法
Dex篇
ZjDroid http://bbs.pediy.com/showthread.php?t=190494
對(duì)付一切內(nèi)存中完整的dex,包括殼與動(dòng)態(tài)加載的jar


so篇
elfrebuild


構(gòu)造soinfo,然后對(duì)其進(jìn)行重建


Hook法
針對(duì)無代碼抽取且Hook dvmDexFileOpenPartial失敗
Hook dexFileParse
http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

https://github.com/WooyunDota/DumpDex

針對(duì)無代碼抽取且Hook dexFileParse失敗
Hook memcmp
http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp


定制系統(tǒng)
修改安卓源碼并刷機(jī)-針對(duì)無抽取代碼
https://github.com/bunnyblue/DexExtractor

Hook dexfileParse


DexHunter-最強(qiáng)大的二代殼脫殼工具
https://github.com/zyq8709/DexHunter
DexHunter的工作流程:

DexHunter的工作原理:

繞過三進(jìn)程反調(diào)試
http://bbs.pediy.com/showthread.php?p=1439627


修改系統(tǒng)源碼后:

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
斷點(diǎn)mmap調(diào)試,針對(duì)Hook dexFileParse無效
原理: dexopt優(yōu)化時(shí), dvmContinueOptimization()->mmap()

靜態(tài)脫殼機(jī)
分析殼so邏輯并還原加密算法
http://www.cnblogs.com/2014asm/p/4924342.html

自定義linker脫so殼
https://github.com/devilogic/udog
main() -> dump_file()

第三代殼dex2oat法定制系統(tǒng)dex2oat法
ART模式下,dex2oat生成oat時(shí),內(nèi)存中的DEX是完整的
http://bbs.pediy.com/showthread.php?t=210532

定制系統(tǒng)
Hook Dalvik_dalvik_system_DexFile_defineClassNative
枚舉所有DexClassDef,對(duì)所有的class,調(diào)用dvmDefineClass進(jìn)行強(qiáng)制加載

第N代殼so + vmp動(dòng)態(tài)調(diào)試 + 人肉還原
相關(guān)文章
Android app啟動(dòng)時(shí)黑屏或者白屏的原因及解決辦法
這篇文章主要介紹了Android app啟動(dòng)時(shí)黑屏或者白屏的原因及解決辦法的相關(guān)資料,需要的朋友可以參考下2016-09-09
Android WebView 詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了Android WebView 詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android?Jetpack庫剖析之ViewModel組件篇
這篇文章主要介紹了Android?Jetpack架構(gòu)組件?ViewModel詳解,ViewModel類讓數(shù)據(jù)可在發(fā)生屏幕旋轉(zhuǎn)等配置更改后繼續(xù)存在,ViewModel類旨在以注重生命周期的方式存儲(chǔ)和管理界面相關(guān)的數(shù)據(jù)。感興趣可以來學(xué)習(xí)一下2022-07-07
Android利用Sensor(傳感器)實(shí)現(xiàn)指南針小功能
這篇文章主要為大家詳細(xì)介紹了Android利用Sensor(傳感器)實(shí)現(xiàn)指南針小功能的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Flutter 利用CustomScrollView實(shí)現(xiàn)滑動(dòng)效果
我們可以使用ListView將幾個(gè)GridView組合在一起實(shí)現(xiàn)了不同可滑動(dòng)組件的粘合,但是這里必須要設(shè)置禁止 GridView 的滑動(dòng),防止多個(gè)滑動(dòng)組件的沖突。這種方式寫起來不太方便,事實(shí)上 Flutter 提供了 CustomScrollView 來粘合多個(gè)滑動(dòng)組件,并且可以實(shí)現(xiàn)更有趣的滑動(dòng)效果。2021-06-06
Android 定時(shí)器實(shí)現(xiàn)圖片的變換
這篇文章主要介紹了Android 定時(shí)器實(shí)現(xiàn)圖片的變換的相關(guān)資料,利用到定時(shí)器和handler,message的結(jié)合實(shí)現(xiàn)改功能,需要的朋友可以參考下2017-08-08
Android 通過cmake的方式接入opencv的方法步驟
這篇文章主要介紹了Android 通過cmake的方式接入opencv的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

