拿到一个 APK,按这个顺序走通常最快:
1. 先看它是不是加固的
unzip -l app.apk | grep -E "lib/|classes.*dex"
如果 classes.dex 小得离谱、而 lib/ 下有 libjiagu.so、libDexHelper.so 之类,那就是加固壳(梆梆、爱加密、腾讯乐固等),先脱壳再谈别的。
2. 反编译
jadx-gui— 直接看 Java,可读性最好,首选apktool d— 出 smali 和资源,要改回去重打包时用这个
3. 看清单
AndroidManifest.xml 里的 exported="true" 组件是攻击面的第一站。还有 android:debuggable、usesCleartextTraffic、自定义权限。
4. 找关键逻辑
搜字符串、搜 API:javax.crypto、okhttp、SharedPreferences、Build.TAGS(root 检测)。
5. Native 层
业务逻辑在 .so 里的越来越多。lib/arm64-v8a/ 下的文件拖进 Ghidra。注意 JNI 函数名的两种绑定方式——静态的看符号名 Java_com_xxx,动态的要找 RegisterNatives 调用。
第 5 步是现在的分水岭。纯 Java 层的东西 jadx 一开基本就透明了,有点价值的逻辑基本都下沉到 native 了。