TheMythologist/android-cracker
GitHub: TheMythologist/android-cracker
用于离线破解 Android 8.0 及以下版本图案、PIN 与密码锁的命令行小工具。
Stars: 61 | Forks: 12
# Android Cracker
这是一个破解 Android 设备图案锁的小工具。
该工具适用于 **Android 8.0(含)以下** 的版本。Android 6.0 引入了 Gatekeeper,并改变了存储密码/图案/PIN 的方式。
## 通用信息
文件可以通过 `adb`(从已 root 的手机上)拉取。
```
adb pull /data/system/
```
相关文件已在下文各自的模块中列出。
密钥长度以及其他信息(例如数字和字母的数量)可以在 `/data/system/device_policies.xml` 中找到(仅适用于 Android 8.0 以下的版本)。
## 安装/运行 android-cracker
### 通过 pip 安装 **(推荐)**
```
pip install android-cracker
android-cracker -h
```
### 从源码安装
```
# 克隆仓库
git clone https://github.com/TheMythologist/android-cracker.git
# 确保已安装 poetry
pip install poetry
# 通过 poetry 运行
poetry install
poetry run android-cracker -h
# 通过 pip 安装运行
cd android-cracker
pip install .
android-cracker -h
```
## 示例
```
android-cracker --version 5.1 --type pattern --length 5 sample/keys/old_pattern_01258.key
android-cracker --version 6.0 --type pattern --length 4 sample/keys/new_pattern_1236.key
android-cracker --version 5.1 --type pin --policy sample/device_policies/device_policies.xml --database sample/locksettings/unsigned_locksettings.db sample/keys/old_pin_1337.key
android-cracker --version 6 --type pin --policy sample/device_policies/device_policies.xml sample/keys/new_pin_2345.key
android-cracker --version 5 --type password --wordlist rockyou.txt --salt 6343755648882345554 sample/keys/old_password_1ianian.key
android-cracker --version 6 --type password --wordlist rockyou.txt --policy sample/device_policies/device_policies.xml sample/keys/new_password_1234.key
```
## 这个工具是如何工作的?
### Android 5.1 及以下版本
#### 图案锁
对于图案锁,相关的哈希值存储在 `/data/system/gesture.key` 中。
图案锁只是数字序列 (0-8) 的 SHA1 哈希值,长度为 3(Android 2.3.3 起为 4)到 9。
手势面板是一个 3x3 的矩阵,可以表示如下(每个数字代表一个“圆点”):
```
-------------------
| 0 | | 1 | | 2 |
-------------------
| 3 | | 4 | | 5 |
-------------------
| 6 | | 7 | | 8 |
-------------------
```
因此,如果你将图案锁设置为 0 -> 1 -> 2 -> 5 -> 4,SHA1 哈希值将是 SHA1("\x00\x01\x02\x05\x04") 的输出。
#### PIN/密码锁
对于 PIN 和密码锁,相关的哈希值存储在 `/data/system/password.key` 中。你还需要导出哈希过程中使用的盐值,可以在以下文件中找到:
- locksettings.db
- locksettings.db-shm
- locksettings.db-wal
`/data/system/locksettings.db` 是一个 sqlite 文件,你可以使用 sqlite3 命令行工具或 [DB browser](https://sqlitebrowser.org/) 打开它。
PIN 锁包含 4 位数字 (0-9),密码是由 4 位或更多数字 (0-9) 和/或字母 (a-z, A-Z) 组成的序列。Android 会在 PIN/密码的末尾添加一个盐值,并计算加盐后密码的 SHA1 和 MD5 哈希值。
### Android 6.0 到 8.0
对于手势,手势被表示为按顺序排列的“圆点”整数(例如 1258)。(注意数字的变化,现在的数字是 1-9,而不是之前的 0-8。哈希序列现在也是原始整数格式,而不是之前的十六进制字符串。)相关文件位于 `/data/system/gatekeeper.password.key`(用于 PIN 和密码)或 `/data/system/gatekeeper.gesture.key`(用于手势)。
所有的 gatekeeper 密钥文件都以以下格式存储:
- 元信息 - 前 17 字节
- 盐值 - 接下来的 8 字节
- 签名 - 最后 32 字节
除非 Android 设备供应商另有实现,否则默认的 Android 哈希算法是 `scrypt`,参数为 16384 轮,块大小 为 1,并行因子 为 8。
计算出加盐哈希值后,可以通过将哈希值的前 32 字节与 gatekeeper 文件中的签名进行匹配来完成验证。
标签:ADB, Android Cracker, Android安全, CTF工具, DOS头擦除, Gatekeeper绕过, Lockscreen Bypass, PIN码破解, PoC, Python, Root权限, VEH, 图案锁, 字典攻击, 安卓破解, 安卓锁屏, 密码学, 密码破解, 手动系统调用, 手势密码, 数字取证, 数据解密, 无后门, 暴力破解, 漏洞搜索, 目录枚举, 离线攻击, 移动安全, 自动化脚本, 逆向工具