同一段视频 9 种压法:设得越「清楚」,文件反而越大
同一段 63 秒视频 9 种压法实测:设得越清楚,文件越大画质没变好。

一个 170MB 的包,全量反编译要十几分钟、吃 4G 内存。先做便宜的检查,有疑惑再往深挖。
aapt2 dump badging app.apk | head -30
看三样:
targetSdk=23(2015 年的水平),真实案例里拆过一个外卖骑手端的包,53 项权限。分类之后问题一目了然:
正常但要留意:CAMERA(人脸核验)、ACCESS_FINE_LOCATION(派单要定位)、
FOREGROUND_SERVICE(后台保活)
可疑:READ_CONTACTS、READ_PHONE_STATE、GET_ACCOUNTS —— 派单需要通讯录吗?
明显有问题:权限名拼写错误(比如 android.permission.READ_FINE_LOCATION,中间混了全角字符)。
这不只是难看 —— 声明是错的就意味着实际没生效,说明这块代码没人测过。
# WebView 的开关
grep -rn "setJavaScriptEnabled\|setAllowFileAccess\|addJavascriptInterface" --include=*.smali .
看到这套组合要警惕:
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webView.addJavascriptInterface(bridge, "app");
本地文件能读 + 任意来源能访问 + JS 能调原生接口 = 如果加载了外部网页,等于把原生桥开放了。
再看:
grep -rn "usesCleartextTraffic" AndroidManifest.xml # 允许明文 HTTP?
grep -rn "android:exported=\"true\"" AndroidManifest.xml # 哪些组件对外暴露?
unzip -l app.apk | grep "\.so$"
.so 里的东西是最难改的,也是最能说明这个应用有多重的:
libsgmain.so / libsgmiddletier.so / libsgsecuritybody.so → 阿里系安全 SDK,做请求签名和完整性校验libFaceLivenessSDK.so / libALBiometricsJni.so → 人脸活体libflutter.so → 界面是 Flutter 写的,反编译 Java 层看不到 UI 逻辑这一步能帮你省掉最大的坑:如果包里有完整安全 SDK,还带服务端校验,
那"改包再装"这条路基本就堵死了 —— 详见下一篇逆向笔记里的对照实验。
unzip -l app.apk | grep -E "assets/flutter|classes.*dex|assets/index.html"
assets/flutter_assets/ → Flutter,界面逻辑在 Dart 里,Java 层只有壳assets/*.html → H5 页面,改起来容易但也说明核心逻辑在服务端classes.dex → 原生 Java/Kotlin判断依据很重要:Flutter 或 H5 写的应用,「界面上的报错」往往不是本地崩了,而是请求被服务端拒了。
这时候去翻 smali 找报错字符串是白费劲。
10 分钟能得到的结论:
先花 10 分钟做这五步,比埋头反编译两小时有用。
同一段 63 秒视频 9 种压法实测:设得越清楚,文件越大画质没变好。
同一张壁纸 674.9 KB 能压到 122.9 KB,站上 15 张配图省到四分之一
三个老推送接口都死了,我用 IndexNow 把新文章推给搜索引擎