CiLocks smali代码阅读完整指南:如何在反汇编中快速定位Firestore集合名
【免费下载链接】CiLocksCrack Interface lockscreen, Metasploit and More Android/IOS Hacking项目地址: https://gitcode.com/GitHub_Trending/ci/CiLocks
CiLocks 是一款面向 Android/IOS 的锁屏破解与渗透工具,其第 15 号模块FireStore Vulnerability能通过反编译 APK 的 smali 反汇编文件,自动定位应用内所有 Firestore 集合名。本文带你从零读懂 smali 代码,并掌握 CiLocks 定位 Firestore 集合名的完整原理与手动操作技巧。
一、为什么要读 smali?
APK 里的 Java 源码编译后是二进制的 DEX 字节码,人类无法直接阅读。用 apktool 反编译后,每个类文件会变成一堆smali 文本——它像汇编语言,但保留了类名、方法名和字符串常量,这正是我们定位集合名的突破口:
核心思路:集合名在代码里必然以字符串常量(const-string)出现,只要在 smali 里搜"谁在调用 Firestore + 旁边的字符串常量",集合名就藏不住。
二、CiLocks 的 FireStore 扫描是如何工作的
在 cilocks 主脚本中,FireStore Vulnerability模块(第 950~1020 行)实现了完整的三步定位法,理解它的逻辑,你就学会了读 smali 的基本功:
第 1 步:用 AndroidManifest.xml 判断是否集成 Firebase
反编译前先确认目标"有戏":
grep -qi "firebase" 解包目录/AndroidManifest.xml如果清单文件里搜不到firebase,说明应用根本没集成 Firebase SDK,直接跳过。这一点很重要——先过滤,再深挖,能省下大量无效分析时间。
第 2 步:从 strings.xml 提取 project_id
Firebase 项目 ID 通常硬编码在资源文件里,cilocks 用一条 sed 命令从<string name="project_id">标签中抠出值。这个 ID 是后续在 Firebase 控制台验证集合是否存在的关键凭据。
第 3 步:在 smali 里用"锚点 + 上下文"定位集合名
这是全文最精髓的技巧。脚本以 Firestore 客户端类的描述符作为锚点(见 cilocks):
grep -hA 2 "lcom/google/firebase/firestore/FirebaseFirestore" -irw 解包目录/smali* \ | grep -iv "lcom/google/firebase/firestore/FirebaseFirestore" \ | grep const-string \ | sed 's/[^"]*"\([^"]*\)".*/\1/' | sort -u拆开看,每一步都在教我们 smali 阅读基本功:
| 技巧 | 说明 |
|---|---|
-A 2锚点上下文 | 集合名一般紧跟在获取 Firestore 实例(lcom/google/firebase/firestore/FirebaseFirestore)的 1~2 行之后 |
grep const-string | smali 中所有字符串常量都用const-string指令装载,集合名必然是其中之一 |
sed 's/[^"]*"\([^"]*\)".*/\1/' | 只保留引号内的字符串内容,过滤掉指令噪音 |
sort -u | 去重,得到干净的集合名清单 |
三、手动实战:三步复现定位过程
无需依赖工具,任何反编译后的 APK 都能用同样方法分析:
1️⃣ 反编译 APK
apktool d target.apk -o fsp-target2️⃣ 确认 Firebase 集成并记录 project_id
检查fsp-target/AndroidManifest.xml与fsp-target/res/values/strings.xml(与 cilocks 的校验逻辑完全一致)。
3️⃣ 锚点搜索 smali 目录
执行上文第二节的第 3 步命令,即可拿到去重后的集合名列表。
四、smali 阅读小贴士
- 类描述符规则:smali 中类名以
L开头、;结尾,包名用/分隔,例如Lcom/google/firebase/firestore/FirebaseFirestore;对应 Java 类com.google.firebase.firestore.FirebaseFirestore。 - 找字符串只看 const-string:
const-string v0, "users"里的users就是被装入寄存器的字符串字面量。 - 善用
-A上下文参数:集合操作(collection/where/document)通常紧跟锚点,取前后 2 行足够覆盖。 - 排除干扰字符串:如脚本报错信息
Provided data must not be null.这类提示文本也会混入结果,需要人工过滤。 - 小项目参考:仓库自带的 AntiGuard/src/io/kos/antiguard/unlock.java 与 AntiGuard/AndroidManifest.xml 是一个简单 Activity 的源码与清单示例,适合对照理解"源码 → 清单 → smali"的对应关系。
五、结果解读与重要提醒
CiLocks 在输出集合名列表后会明确提示(见 cilocks):
查询 Firestore 集合会产生费用——Firestore 按操作次数计费,每次列表读取都计入目标账户的每日开销。
因此请务必:✅ 仅在获得授权的安全测试环境中使用;✅ 拿到集合名后只做确认性查询,避免大规模遍历。
六、相关资源清单
- 主脚本(含 FireStore 模块完整实现):cilocks
- 4 位 PIN 字典:4digit.txt | 6 位 PIN 字典:6digit.txt
- 功能总览与安装要求:README.md
- AntiGuard 解锁组件源码:AntiGuard/src/io/kos/antiguard/unlock.java
总结
读 smali 不需要精通汇编,只需抓住三点:类描述符定位 API 调用、const-string 提取字符串常量、grep 锚点 + 上下文锁定邻近逻辑。掌握这套方法,你不仅能看懂 CiLocks 的 Firestore 扫描模块,还能独立分析任何 Android 应用的数据结构。
【免费下载链接】CiLocksCrack Interface lockscreen, Metasploit and More Android/IOS Hacking项目地址: https://gitcode.com/GitHub_Trending/ci/CiLocks
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考