本文轉(zhuǎn)載自:http://www.mottoin.com/89035.html
目錄
- 簡述(脫殼前學(xué)習(xí)的知識、殼的歷史俗或、脫殼方法)
- 第一代殼
- 第二代殼
- 第三代殼
- 第N代殼
簡述
- Apk文件結(jié)構(gòu)
- Dex文件結(jié)構(gòu)
- 殼史
- 殼的識別
Apk文件結(jié)構(gòu)
Dex文件結(jié)構(gòu)
殼史
第一代殼 Dex加密
- Dex字符串加密
- 資源加密
- 對抗反編譯
- 反調(diào)試
- 自定義DexClassLoader
第二代殼 Dex抽取與So加固
- 對抗第一代殼常見的脫殼法
- Dex Method代碼抽取到外部(通常企業(yè)版)
- Dex動態(tài)加載
- So加密
第三代殼 Dex動態(tài)解密與So混淆
- Dex Method代碼動態(tài)解密
- So代碼膨脹混淆
- 對抗之前出現(xiàn)的所有脫殼法
第四代殼 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
- 網(wǎng)秦:libnqshield.so
- 百度:libbaiduprotect.so
2.基于特征的識別代碼
第一代殼
- 內(nèi)存Dump法
- 文件監(jiān)視法
- Hook法
- 定制系統(tǒng)
- 動態(tài)調(diào)試法
內(nèi)存Dump法
- 內(nèi)存中尋找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
文件監(jiān)視法
- Dex優(yōu)化生成odex
- inotifywait-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)
- 修改安卓源碼并刷機
- DumpApk https://github.com/CvvT/DumpApk
- 只針對部分殼
動態(tài)調(diào)試法
- IDA Pro
- gdb gcore法
<pre class="" style="box-sizing: border-box; overflow: auto; font-family: monospace, monospace; font-size: 16px; color: rgb(68, 68, 68); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">.gdbserver :1234 –attach pid
.gdb
(gdb) target remote :1234
(gdb) gcore</pre>
coredump文件中搜索“dex.035”
第二代殼
- 內(nèi)存重組法
- Hook法
- 動態(tài)調(diào)試
- 定制系統(tǒng)
- 靜態(tài)脫殼機
內(nèi)存重組法
Dex篇
ZjDroid http://bbs.pediy.com/showthread.php?t=190494
對付一切內(nèi)存中完整的dex荠呐,包括殼與動態(tài)加載的jar
so篇
elfrebuild
構(gòu)造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
定制系統(tǒng)
修改安卓源碼并刷機-針對無抽取代碼
https://github.com/bunnyblue/DexExtractor
Hook dexfileParse
DexHunter-最強大的二代殼脫殼工具
https://github.com/zyq8709/DexHunter
DexHunter的工作流程:
DexHunter的工作原理:
繞過三進程反調(diào)試
http://bbs.pediy.com/showthread.php?p=1439627
修改系統(tǒng)源碼后:
http://www.cnblogs.com/lvcha/p/3903669.html
<pre class="" style="box-sizing: border-box; overflow: auto; font-family: monospace, monospace; font-size: 16px; color: rgb(68, 68, 68); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">ls /proc/345/task</pre>
<pre class="" style="box-sizing: border-box; overflow: auto; font-family: monospace, monospace; font-size: 16px; color: rgb(68, 68, 68); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">./gdbserver :1234 --attach346
...
(gdb) gcore</pre>
gcore防Dump解決方案:
http://bbs.pediy.com/showthread.php?t=198995
斷點mmap調(diào)試裤唠,針對Hook dexFileParse無效
原理: dexopt優(yōu)化時挤牛, dvmContinueOptimization()->mmap()
靜態(tài)脫殼機
分析殼so邏輯并還原加密算法
http://www.cnblogs.com/2014asm/p/4924342.html
自定義linker脫so殼
https://github.com/devilogic/udog
<pre class="" style="box-sizing: border-box; overflow: auto; font-family: monospace, monospace; font-size: 16px; color: rgb(68, 68, 68); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">main() -> dump_file()</pre>
第三代殼
- dex2oat法
- 定制系統(tǒng)
dex2oat法
ART模式下,dex2oat生成oat時巧骚,內(nèi)存中的DEX是完整的
http://bbs.pediy.com/showthread.php?t=210532
定制系統(tǒng)
Hook Dalvik_dalvik_system_DexFile_defineClassNative
枚舉所有DexClassDef赊颠,對所有的class,調(diào)用dvmDefineClass進行強制加載