要实现apktool反编译后仅生成单个smali目录(不生成smali_classes2、smali_classes3 等),可通过以下两种方案实现
方案一.使用--only-main-classes参数(推荐)
在反编译命令中直接添加 --only-main-classes 参数,强制忽略除主 DEX(classes.dex)之外的其他 DEX 文件
apktool d your_app.apk --only-main-classes -o output_dir
效果
仅反编译classes.dex,输出到smali目录,其他DEX(如classes2.dex)会被完全忽略。
方案二.手动合并多DEX文件
若需要保留所有代码但合并到单一目录,需先合并DEX再反编译:
解压APK
unzip your_app.apk -d apk_temp
合并DEX文件(需安装dexmerger)
#合并classes.dex, classes2.dex... 到merged_classes.dex
d2j-dexmerge.sh apk_temp/classes*.dex -o apk_temp/classes.dex
删除多余DEX文件
rm apk_temp/classes[2-9].dex #删除classes2.dex等
重新打包APK
cd apk_temp && zip -r ../merged_app.apk * && cd ..
反编译新APK
apktool d merged_app.apk -o output_dir
所有代码合并到smali目录,但需注意 DEX兼容性(如方法数限制可能导致合并失败)。
注意事项
代码完整性:若APK依赖多DEX架构(如方法数超65536),忽略其他DEX会导致反编译后的代码缺失关键逻辑。
加固应用场景:若APK被加固(如梆梆、360加固等加固),主DEX可能为壳代码,需先脱壳再反编译。
回编译风险:手动合并DEX后可能破坏原始结构,导致回编译的APK无法运行。
总结
推荐方案一:快速且安全,适合分析主 DEX 代码。
慎用方案二:需处理兼容性问题,仅限高级场景(如逆向小型应用)。
https://github.com/iBotPeaches/Apktool
https://github.com/iBotPeaches/Apktool/releases
原文始发于微信公众号(哆啦安全):apktool反编译后仅生成单个smali目录
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论