手里那堆 APK 里到底藏着什么?LibChecker 给我扒得干干净净

系统工具 ·约 5 分钟 ·記筆記的貓:團子

LibChecker 是什么

LibChecker 是一款跑在 Android 上的 APK 结构分析器。它做的事很朴素——打开你手机里任何一个应用(或者你手头的 APK 文件),把里面用了哪些三方库、有多少 Activity、声明了哪些特殊权限,一条一条列给你看。对普通用户来说,它是"我装的这个 App 到底干了什么"的知情权放大镜;对开发者来说,它是升级前后 diff 快照、排查热更新注入、核对合规声明的随手工具。

安装

LibChecker 只跑 Android,安装包 4.24M,没什么前置条件——找到 APK 直接装就行。LibChecker官网 上有更详细的安装和配置指引可以对照看。首次打开会弹存储权限请求,给了就能扫手机里全部应用;不想给的话也可以只分析本地选一个 APK 文件,功能不打折。国内网络用户记得进设置把云端规则仓库切到 Gitee 镜像,否则知名库标记可能拉不到最新规则、点徽标弹不出详情弹窗。

那个差点装上的"精简版微信"

事情得从上上周一个朋友说起。他在某个论坛里给我甩了个链接,说"这个是别人改的微信精简版,比原版小一半、没广告、开启动画贼快"。我当时正嫌手机里微信越来越臃肿,点开 APK 体积看了一眼——真的只有 30 多兆,原版现在都快 800M 了。

差点直接点安装。

脑子一转弯,想起之前装过的 LibChecker 还在手机角落里躺灰。打开它,点右上角导入 APK,选那个刚下好的文件。一分钟没到,界面刷出来的东西让我后背发凉。

原生库列表里,除了正常的 libwechat.so、libmmkv.so,还混着一个名字奇怪的 .so 文件,LibChecker 在旁边给它贴了个黄色徽标——Tinker,腾讯开源的热更新框架。紧接着跳出来详情弹窗,说 Tinker 的作用是"无需重新发布即可向已安装应用推送代码补丁"。

我点进 Activity 列表,一排长得几乎一模一样、名字只差几位数哈希的空壳 Activity 排在最前面。按 LibChecker 的说明,这就是热更新 SDK 常见的"占位符 Activity"——真正的逻辑不在 APK 里,而是运行时从云端动态注册进去的。换句话说,那个"精简版"每次启动,都可能在跑一份我完全没见过的代码。

再翻到权限清单,LibChecker 用红色标签高亮了 SYSTEM_ALERT_WINDOW——这是 Overlay 悬浮窗权限,说明它可以在任何应用之上盖一层界面。Overlay 本身不等于恶意,但放在一个"第三方改写版微信"里,等于给了它伪造登录界面、截取输入框内容的技术可能。

那个 APK 被我秒删。

之后我干了什么

删掉那个 APK 之后,我顺手把手机里装的所有应用都跑了一遍 LibChecker 的扫描。本来只是想确认一下"精简版微信"是不是个例,结果在一个我用了小半年、声称"纯本地、不上传"的笔记 App 里,又揪出了 Tinker 的痕迹——它的 Activity 列表同样挤着一串哈希后缀的空壳。我检查了这个笔记 App 的官方包名,确认没装错版本,那说明是官方自己在用热更新。功能上没问题,但"纯本地"的说法多少有点微妙。

真正让我觉得这个工具值回空间的,是对比功能。上个月某个常用的效率工具从 v2.1 升到 v2.2,我用 LibChecker 先在 v2.1 上拍了快照,升级之后再跑一遍,点"对比快照"——新增了两个原生库条目,其中一个正好是我之前没留意过的 SDK,版本号跳了大版本。原来这就是它最近加了一堆莫名其妙的网络权限和崩溃采集弹窗的原因。

快照对比:升级前后新增的原生库一目了然

现在 LibChecker 已经成了我换新 APK 之前的必经一步。安装包小到 4 兆出头,扫完一个应用只需要几秒,能把热更新、Overlay、知名库、快照变化这些平时看不见的东西全部摆到明面上。对一个没什么专业背景、只想搞清楚自己手机里到底在跑什么的人来说,这大概就是最有用的那一类工具了。

知名库彩色徽标:Tinker 热更新框架被自动识别出来

本文為個人基於網路公開資料整理編寫,非官方內容,僅供學習交流參考;軟體版權歸原作者所有,請支持正版;使用過程中遇到問題請查閱官方管道,本文不承擔任何責任。

團子還試過這些