目录导航
Android-PIN-Bruteforce
通过强制使用锁屏PIN解锁Android手机(或设备)。
将您的Kali Nethunter手机变成适用于Android设备的暴力PIN破解器!
(无需root,无需adb)
工具是如何运行的
它使用USB OTG电缆将锁定的电话连接到Nethunter设备。它模拟键盘,自动尝试PIN,并在尝试过多错误猜测后等待。

[Nethunter手机] <-> [USB电缆] <-> [USB OTG适配器] <-> [锁定的Android手机]
USB HID小工具驱动程序提供USB人机接口设备(HID)的仿真。这使Android Nethunter设备可以模拟键盘输入到锁定的电话。就像将键盘插入锁定的电话并按下键一样。
⏱ 使用三星S5尝试所有可能的4位数PIN只需花费超过16.6个小时,但是使用经过优化的PIN列表,您应该花费更少的时间。
需要用到的工具
- 锁定的Android手机(目标)
- Nethunter手机(或任何具有HID内核支持的root 过的Android)
- USB OTG(随身携带)电缆/适配器(USB公头Micro-B到母头USB A)和标准充电线(USB公头Micro-B到公头A)。
Android-PIN-Bruteforce的优点
- 将您的NetHunter手机变成Android PIN破解机
- 与其他方法不同,您不需要在锁定的电话上启用ADB或USB调试
- 锁定的Android手机无需root
- 您不需要购买特殊的硬件,例如Rubber Ducky,Teensy,Cellebrite,XPIN Clip等。
- 您可以轻松修改退避时间以破解其他类型的设备
⭐ 特征
- 1至10位数字的任意的长度破解PIN
- 使用配置文件来支持不同的手机
- 针对3位,4位,5位和6位PIN的优化PIN列表
- 绕过电话弹出窗口,包括“低电量”警告
- 检测电话何时拔出或关闭电源,并每5秒重试一次
- 每次X PIN尝试后可配置的N秒延迟
- 日志文件
安装方法
待定
执行脚本
如果将脚本安装到/sdcard/,则可以使用以下命令执行该脚本。
bash ./android-pin-bruteforce
请注意,Android会使用noexec标志挂载/sdcard。您可以使用进行验证mount
。
用法
Android-PIN- bruteforce(0.1)用于通过暴力强制锁屏PIN解锁Android手机(或设备)。
更多信息请访问:https://github.com/urbanadventurer/Android-PIN-Bruteforce
命令:
crack 开始破解PINs
resume 从选择的pin重新开始
rewind 从选择的pin反向重新开始破解
diag 显示诊断信息
version 显示版本信息并退出
参数:
-f, --from PIN 从这个PIN重新开始
-a, --attempts 从数字错误开始尝试
-m, --mask REGEX 为PIN中的已知数字使用掩码
-t, --type TYPE 选择pin或者图案开始破解
-l, --length NUM 破解的pin数字长度
-c, --config FILE 指定要加载的配置文件
-p, --pinlist FILE 指定一个自定义PIN列表
-d, --dry-run Dry run for testing. Doesn't send any keys.
-v, --verbose 输出详细的日志
用法:
android-pin-bruteforce <命令> [参数]
支持的Android手机/设备
这已通过包括三星S5,S7,摩托罗拉G4 Plus和G5 Plus在内的各种手机的成功测试。
它可以将Android版本6.0.1至10.0解锁。
进行暴力攻击的能力并不取决于所使用的Android版本。
这取决于设备供应商如何开发自己的锁屏。
检查电话数据库以获取更多详细信息 https://github.com/urbanadventurer/Android-PIN-Bruteforce/wiki/Phone-Database
? PIN码列表
除非用户选择自定义PIN列表,否则默认情况下使用优化的PIN列表。
不同长度的破解PIN
使用--length
命令行选项。
使用此命令可以破解3位数的PIN码,
./android-pin-bruteforce crack --length 3
使用此命令来破解6位数PIN码
./android-pin-bruteforce crack --length 6
优化的PIN列表来自哪里?
通过从数据库泄漏中提取数字密码,然后按频率排序来生成优化的PIN列表。所有未出现在密码泄漏中的PIN都将添加到列表中。
优化的PIN列表是从Ga $$ Pacc DB Leak(21GB解压缩,688M帐户,243个数据库,138920个数字密码)生成的。
4位PIN码列表
从不同来源使用4位PIN列表的原因是,与从Ga $$ Pacc DB Leak生成的列表相比,它提供了更好的结果。
optimised-pin-length-4.txt
是所有可能的4位数PIN的优化列表,按可能性顺序排序。可以pinlist.txt
在https://github.com/mandatoryprogrammer/droidbrute中找到文件名
该列表经iSEC合作伙伴高级安全工程师Justin Engler和Paul Vines的许可使用,并用于他们的Defcon演讲中,“使用机械手可重配置按钮打桩机(和C3BO)进行机电PIN破解”
戴着面具破解
掩码使用标准grep扩展格式的正则表达式。
./android-pin-bruteforce crack --mask "...[45]" --dry-run
- 要尝试从1900年到1999年的所有年份,请使用
19..
- 要尝试使用第一个数字为1且最后一个数字为1的PIN,请使用掩码为
1..1
- 要尝试以4或5结尾的PIN,请使用
...[45]
? 不同手机的配置
设备制造商会创建自己的锁屏,这些锁屏不同于默认的或现有的Android。要找出您的手机需要哪些按键,请将键盘插入手机并尝试不同的组合。
使用--config FILE
命令行参数加载其他配置文件。
例子:
./android-pin-bruteforce --config ./config.samsung.s5 crack
您还可以config
通过自定义发送的时间和键来编辑文件。
以下配置变量可用于支持其他手机的锁屏。
# Timing
## DELAY_BETWEEN_KEYS is the period of time in seconds to wait after each key is sent
DELAY_BETWEEN_KEYS=0.25
## The PROGRESSIVE_COOLDOWN_ARRAY variables act as multi-dimensional array to customise the progressive cooldown
## PROGRESSIVE_ARRAY_ATTEMPT_COUNT__________ is the attempt number
## PROGRESSIVE_ARRAY_ATTEMPTS_UNTIL_COOLDOWN is how many attempts to try before cooling down
## PROGRESSIVE_ARRAY_COOLDOWN_IN_SECONDS____ is the cooldown in seconds
PROGRESSIVE_ARRAY_ATTEMPT_COUNT__________=(1 11 41)
PROGRESSIVE_ARRAY_ATTEMPTS_UNTIL_COOLDOWN=(5 1 1)
PROGRESSIVE_ARRAY_COOLDOWN_IN_SECONDS____=(30 30 60)
## SEND_KEYS_DISMISS_POPUPS_N_SECONDS_BEFORE_COOLDOWN_END defines how many seconds before the end of the cooldown period, keys will be sent
# set to 0 to disable
SEND_KEYS_DISMISS_POPUPS_N_SECONDS_BEFORE_COOLDOWN_END=5
## SEND_KEYS_DISMISS_POPUPS_AT_COOLDOWN_END configures the keys that are sent to dismiss messages and popups before the end of the cooldown period
SEND_KEYS_DISMISS_POPUPS_AT_COOLDOWN_END="enter enter enter"
## KEYS_BEFORE_EACH_PIN configures the keys that are sent to prompt the lock screen to appear. This is sent before each PIN.
## By default it sends "escape enter", but some phones will respond to other keys.
# Examples:
# KEYS_BEFORE_EACH_PIN="ctrl_escape enter"
# KEYS_BEFORE_EACH_PIN="escape space"
KEYS_BEFORE_EACH_PIN="escape enter"
## KEYS_STAY_AWAKE_DURING_COOLDOWN the keys that are sent during the cooldown period to keep the phone awake
KEYS_STAY_AWAKE_DURING_COOLDOWN="enter"
## SEND_KEYS_STAY_AWAKE_DURING_COOLDOWN_EVERY_N_SECONDS how often the keys are sent, in seconds
SEND_KEYS_STAY_AWAKE_DURING_COOLDOWN_EVERY_N_SECONDS=5
## DELAY_BEFORE_STARTING is the period of time in seconds to wait before the bruteforce begins
DELAY_BEFORE_STARTING=2
## KEYS_BEFORE_STARTING configures the keys that are sent before the bruteforce begins
KEYS_BEFORE_STARTING="enter"
弹出窗口
我们在冷却期结束之前或有选择地在冷却期之前发送密钥。这是为了使锁屏应用程序保持活动状态,并消除有关不正确的PIN尝试次数或电池电量不足警告次数的所有弹出窗口。
测试从NetHunter手机发送的密钥
测试来自终端的发送密钥
从笔记本电脑到NetHunter电话使用ssh,然后使用以下命令测试发送密钥:
在此示例中,发送了回车键。
echo "enter" | /system/xbin/hid-keyboard /dev/hidg0 keyboard
在此示例中,发送了ctrl-escape。
echo "left-ctrl escape" | /system/xbin/hid-keyboard /dev/hidg0 keyboard
注意:发送config
文件变量中的键组合是不同的。目前仅ctrl_escape
支持。
在此示例中,键a,b,c被发送。
echo a b c | /system/xbin/hid-keyboard /dev/hidg0 keyboard
测试从应用发送密钥
此Android应用程序是一个虚拟USB键盘,可用于测试发送键。
https://store.nethunter.com/zh_CN/packages/remote.hid.keyboard.client/
如何发送特殊密钥
将此列表用于以下变量:
- KEYS_BEFORE_EACH_PIN
- KEYS_STAY_AWAKE_DURING_COOLDOWN
- KEYS_BEFORE_STARTING
要发送特殊键,请使用以下标签。可以在hid_gadget_test源代码中找到此列表。
钥匙标签 | 钥匙标签 |
---|---|
左Ctrl | f6 |
右Ctrl | f7 |
左shift | f8 |
右shift | f9 |
左-alt | f10 |
右alt | f11 |
左meta | f12 |
右meta | 插入 |
返回 | home |
退出 | 分页 |
bckspc | 删除 |
tab | end |
空格键 | 向下翻页 |
大写锁定 | right |
f1 | 向左 |
f2 | 向下 |
f3 | 输入 |
f4 | 向上 |
f5 | 锁定 |
要同时发送多个密钥,请使用以下列表:
- ctrl_escape(发送左ctrl和转义)
如果您需要更多组合键,请在GitHub的问题列表中打开一个新的问题。
自定义渐进式冷却
config
文件的以下部分控制渐进式冷却。
## The PROGRESSIVE_COOLDOWN_ARRAY variables act as multi-dimensional array to customise the progressive cooldown
## PROGRESSIVE_ARRAY_ATTEMPT_COUNT__________ is the attempt number
## PROGRESSIVE_ARRAY_ATTEMPTS_UNTIL_COOLDOWN is how many attempts to try before cooling down
## PROGRESSIVE_ARRAY_COOLDOWN_IN_SECONDS____ is the cooldown in seconds
PROGRESSIVE_ARRAY_ATTEMPT_COUNT__________=(1 11 41)
PROGRESSIVE_ARRAY_ATTEMPTS_UNTIL_COOLDOWN=(5 1 1)
PROGRESSIVE_ARRAY_COOLDOWN_IN_SECONDS____=(30 30 60)
数组与此表相同。
尝试次数 | 尝试直到冷却 | 冷却 |
---|---|---|
1 | 5 | 30 |
11 | 1 | 30 |
41 | 1 | 60 |
为什么不能使用笔记本电脑?
这可在Android手机上使用,因为与笔记本电脑上的端口不同,USB端口不是双向的。
Android如何模拟键盘
密钥是使用发送的/system/xbin/hid-keyboard
。要对此进行测试并发送密钥1,您可以使用
echo 1 | /system/xbin/hid-keyboard dev/hidg0 keyboard
在Kali Nethunter中,/system/xbin/hid-keyboard
是的编译副本hid_gadget_test.c
。这是一个用于测试Linux内核中包含的HID小工具驱动程序的小程序。可以在https://www.kernel.org/doc/html/latest/usb/gadget_hid.html和https://github.com/aagallag/hid_gadget_test找到该文件的源代码。
? 故障排除
如果不是强行PIN
检查电缆的方向
Nethunter手机应连接常规USB电缆,而锁定手机应连接OTG适配器。
OTG电缆应连接到锁定的Android手机。常规USB电缆应连接到Nethunter电话。
请参阅有关如何连接电话的图形。
检查它是否在模拟键盘
您可以使用常规的充电/数据USB电缆将NetHunter手机连接到计算机,从而验证NetHunter手机是否成功模拟了键盘。打开像记事本这样的文本编辑器时,它会破解,您应该会看到它在文本编辑器中输入了PIN码。
请注意,您不需要使用OTG电缆。
尝试重启手机
尝试关闭手机电源,甚至可以取出电池。
尝试新的电缆
尝试使用新的电缆/适配器,因为电缆/适配器可能有故障。
如果未使用正确的PIN解锁手机
您发送按键的速度可能太快,手机无法处理。在配置文件中增加DELAY_BETWEEN_KEYS变量。 ? 如果您看不到手机屏幕上出现4个点,则可能是它没有收到4个按键。
? 管理功耗
如果您的电话电量耗尽太早,请按照下列步骤操作:
- 开始之前,请确保两部手机都已充满电至100%
- 如果可能,降低受害电话和NetHunter电话上的屏幕亮度
- 将两部手机都设置为飞行模式,但是您可能需要启用WiFi才能通过SSH访问NetHunter手机。
- 锁定的电话将为NetHunter电话供电,因为它显示为键盘配件
- 使用带有Y型分配器的USB OTG电缆作为外部电源,以便在破解时为NetHunter手机充电
- 稍事休息即可为您的设备充电。使用CTRL-Z暂停脚本,然后使用
fg
shell命令恢复。 - 避免使用SEND_KEYS_STAY_AWAKE_DURING_COOLDOWN_EVERY_N_SECONDS配置选项。这将导致锁定的手机使用更多的电池以保持屏幕通电。而是使用SEND_KEYS_DISMISS_POPUPS_N_SECONDS_BEFORE_COOLDOWN_END选项(默认)。
检查诊断报告
使用命令diag
display诊断信息。
bash ./android-pin-bruteforce diag
如果在插入USB电缆后收到此消息,请尝试从锁定的Android手机中取出电池,然后重新打开电源。
[FAIL] HID USB device not ready. Return code from /system/xbin/hid-keyboard was 5.
usb-devices命令如何工作
diagnostics命令使用usb-devices
脚本,但是仅在确定USB电缆是否连接错误时才需要使用该脚本。可以从https://github.com/gregkh/usbutils/blob/master/usb-devices下载
使用详细输出
使用该--verbose
选项检查配置是否符合预期。在修改配置时,此功能特别有用。
使用空运行
使用该--dry-run
选项可检查其运行方式,而无需将任何密钥发送到设备。在您修改配置或在开发过程中,此功能特别有用。
空运行将:
- 不发送任何密钥
- 如果
KEYBOARD_DEVICE
或HID_KEYBOARD
丢失,将继续而不是中止。
HID USB模式
在NetHunter手机的外壳程序中尝试以下命令:
/system/bin/setprop sys.usb.config hid
? 已知的问题
- 这无法检测到何时猜出了正确的PIN并解锁了手机。
- 您的手机可能用完了 ? 电池找到正确的PIN码之前。
- 不要信任来自未知来源的电话配置文件,而无需先对其进行检查。配置文件是Shell脚本,并且可能包含恶意命令。
? 路线图
- [完成]作品
- [DONE]检测USB HID故障
- [完成]改善使用率和命令行选项/配置文件
- [DONE]为n位PIN添加暴力破解
- [DONE]已知数字的掩码
- [DONE]反向破解PIN列表(以查找哪个最近的PIN解锁了设备)
- [DONE]实施可配置的锁屏提示
- [DONE]尝试10次后进行冷却时间更改
- [工作中]查找/测试更多要进行暴力破解的设备
- 添加进度栏
- 添加预计到达时间
- ASCII艺术
- NetHunter的更好GUI
- 适用于iPhone的工具
- 检测手机何时解锁(使用Nethunter相机作为传感器?)
- 破解Android模式(首先尝试常见模式)
下载地址
①GitHub:Android-PIN-Bruteforce/master.zip
②雨苁网盘:https://w.ddosi.workers.dev