有关如何检查加固壳,有什么类型的加固壳;如果有能力的话,还可能进一步研究具体怎么脱壳。
Android逆向-加固壳
查壳
ApkScan-PKiD
Windows平台上,一般用到的就是ApkScan-PKiD。
这是Windows版本的下载链接:apk查壳工具下载 apk查壳神器PKiD v0.12 中文绿色免费版 下载-脚本之家 (jb51.net)
MT文件浏览器(推荐)
Android平台上直接用MT。
检查Dex
直接用Jadx等工具检查Dex,如果没有完整代码,那么就是被加壳了。
检查AndroidManifest.xml
企业壳加固后,会在此文件里面添加一些特征,可以根据特征判断。
反编译 AndroidManifest.xml 文件,然后遍历里面的 activity、service、broadcast、provider 等,看这几个 class 是否都存在于 classes.dex 文件里面。
检查lib
直接引用这位爷的列表:安卓逆向-脱壳学习记录 - Is Yang’s Blog (isisy.com)
厂商 | 常见特征so文件或其它文件 | 常见java代码(反编译classes.dex) |
娜迦 | libchaosvmp.so、libddog.so、libfdog.so | |
娜迦企业版 | libedog.so | |
爱加密 | libexec.so、libexecmain.so、ijiami.dat | s.h.e.l.l.S |
爱加密企业版 | ijiami.ajm | |
梆梆免费版 | libsecexe.so、libsecmain.so、libSecShell.so | com.secneo.apkwrapper.ApplicationWrapper、com.SecShell.SecShell.ApplicationWrapper、com.secneo.apkwrapper.AW |
梆梆企业版 | libDexHelper.so、libDexHelper-x86.so | |
360 | libprotectClass.so、libjiagu.so、libjiagu_art.so、libjiagu_x86.so、libjiagu_x64.so、libjiagu_a64.so | com.stub.StubApp |
通付盾 | libegis.so、libNSaferOnly.so | |
网秦 | libnqshield.so | |
百度 | libbaiduprotect.so | com.baidu.protect.StubApplication |
阿里聚安全 | aliprotect.dat、libsgmain.so、libsgsecuritybody.so、libmobisec.so | |
腾讯 | libtup.so、libexec.so、libshell.so、mix.dex、lib/armeabi/mix.dex、lib/armeabi/mixz.dex | com.tencent.StubShell.TxAppEntry |
腾讯御安全 | libtosprotection.armeabi.so、libtosprotection.armeabi-v7a.so、libtosprotection.x86.so | |
网易易盾 | libnesec.so | |
APKProtect | libAPKProtect.so | |
几维安全 | libkwscmm.so、libkwscr.so、libkwslinker.so | |
顶像科技 | libx3g.so | |
盛大 | libapssec.so | |
瑞星 | librsprotect.so |
简述企业壳原理
还是引用:安卓逆向-脱壳学习记录 - Is Yang’s Blog (isisy.com)
360:将原有的 dex 文件加密后存储在 libjiagu.so、libjiagu_art.so,在运行时动态释放并解密。
阿里:将原有的 dex 文件拆分为两部分,一部分主体保存为 libmobisecy.so,另一部分包含了一部分 class_data_item 和 code_item。在运行的时候将两部分释放在内存中,并修复相关的指针,恢复数据之间的连接关系。同时一些 annotation_off 被设置为无效的值。
百度:将一些 class_data_item 存储在 dex 文件的外部,在运行时恢复与主体的 dex 的连接关系。在 dex 文件加载后,其头部的魔数,校验和以及签名值会被擦除。同时某些方法被改写,使得其在执行前相关的指令才会被恢复,在执行之后便立即擦除。
梆梆:提前准备了一个 odex 或 oat 文件,并加密保存为外部的 jar 文件,运行时解密;同时 hook 了 libc.so 中的一些函数,如 read,write,mmap 等,监视其操作区域是否包含了 dex 的头部,保证无法使用这些函数对 dex 文件进行操作。
爱加密:同样是加密原有的 dex 文件,在运行时整体释放并解密,只不过其释放的处于固定路径下的临时文件的名字是随机的。
腾讯:提供选项可以指定需要保护的方法。如果某个方法被保护,则在 dex 文件中的相关 class_data_item 中无法看到其数据,即为一个假的 class_data_item;在运行时释放真正的 class_data_item 并连接到 dex 文件上,但是其 code_item 却一直存在于原有的 dex 文件中。同样,一些 annotation_off 和 debug_info_off 被填充为无效值来阻止静态反编译。只支持在 DVM 环境下运行。
加固壳历史
安卓逆向-脱壳学习记录 - Is Yang’s Blog (isisy.com)
了解一下。作者将壳分为了四个阶段,其中从第二阶段开始,加固壳进入了基于Native SO的时代;第三阶段则在第二阶段的基础上,进一步增强反调试与混淆能力;第四阶段则使用起了高雅的VMP。
脱壳工具
DexHunter(deprecated)
https://github.com/zyq8709/DexHunter
这是一个8年前的通用脱壳工具,主要作用于第二阶段的加固壳。
android-unpacker(deprecated)
该工具的核心是通过
find_magic_memory()
方法读取/proc/xxx(pid)/maps
内存映射表,找到 DEX 所在的内存起始位置,然后通过dump_memory()
方法将内存 dump 下来。
drizzleDumper(deprecated)
https://github.com/DrizzleRisk/drizzleDumper
基于android-unpacker
的改进版,本质还是内存dump。
FRIDA-DEXDump
2022年的时候archived了。
可以暴力提取出不少加固的dex,但是提取出来的似乎不太适合重新打包,只能用于静态分析。
1 | frida-dexdump -FU // 提取前台APP |
inotifywait-for-Android
https://github.com/dstmath/inotifywait-for-Android
基于文件监视法:即使用 dex 优化生成 odex 方法,监视 DexOpt 的输出。
其实下载下来的repo里面有编译后的release。主要是重新搭建编译环境太麻烦了
Frida-Apk-Unpack(deprecated)(Android版本太低)
利用frida hook libart.so中的OpenMemory或OpenCommon(Android N以后)方法,拿到内存中dex的地址,计算出dex文件的大小,从内存中将dex导出。
也是对安卓版本支持的太低了。后面可以考虑在模拟器里面用。
Android 逆向之脱壳实战篇 - 掘金 (juejin.cn)
ZjDroid
针对Dex脱壳的工具
https://github.com/halfkiss/ZjDroid
dumpDex
针对Dex脱壳的工具
https://github.com/WrBug/dumpDex
elfrebuild
针对 So 脱壳工具
原理:构造映射 soinfo ,然后对其进行重建
https://github.com/ylcangel/ElfRebuild
Dex2oatHunter
ART 模式下,dex2oat 生成 oat 时,内存中的 dex 是完整的,此时可以用修改后的 dex2oat 文件替换原系统的 dex2oat 文件。
工具链接:https://github.com/spriteviki/Dex2oatHunter
其他工具
youpk:https://github.com/youlor/unpacker
fart:https://github.com/hanbinglengyue/FART
(荐)BlackDex:https://github.com/CodingGay/BlackDex
动态脱壳
获取dex之dump内存、IDA动态调试脱壳步骤、ida动态调试
脱壳方法
安卓逆向-脱壳学习记录 - Is Yang’s Blog (isisy.com)
这边列个列表即可。具体还是得靠实战。
- 内存Dump法
- 文件监视法
- 缓存脱壳法
- 动态调试法
- 内存重组法
- dex2oat法
- 定制系统法
参考网址
ApkScan-PKID 查壳工具下载与使用-阿里云开发者社区 (aliyun.com)
Android逆向笔记之APK查壳工具PKID_51CTO博客_手机端apk逆向工具
apk查壳工具下载 apk查壳神器PKiD v0.12 中文绿色免费版 下载-脚本之家 (jb51.net)
安卓逆向-脱壳学习记录 - Is Yang’s Blog (isisy.com)
- 本文作者: Taardis
- 本文链接: https://taardisaa.github.io/2023/06/05/Android逆向-加固壳/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!