安卓锁屏忘记密码?用ADB从删除凭据到离线破解的恢复全攻略 这可能是每一个安卓用户都会碰到的尴尬场景某个周末的早晨家里小孩或者你自己随手在锁屏界面划了几下手机就再也不认识你了。数据没备份想截图留念的聊天记录、随手拍的验收照片、离线地图全在里面直接恢复出厂设置又舍不得。如果你手里还有一台电脑和一根数据线ADB往往是恢复访问的最后一张底牌。这篇文章我整理了三个可以实际落地的恢复方案从“直接清掉锁屏凭据文件”到“离线提取gesture.key解密绘制图案”把原理和命令都拆开讲透。先说清楚一件事文中所有操作只适用于自己的手机、平板或者经机主明确授权的设备。手机维修从业者面对客户设备时也请先确认机主身份。把这些方法用于他人设备属于越权操作既不合法也不道德。下面直接进入正题。1. 先搞懂锁屏密码存在哪才知道为什么要用ADB1.1 Android的锁屏凭据是怎么保存的很多朋友不理解为什么删掉某个文件就能解锁Android锁屏密码并不是存在某个“密码数据库”里然后用明文比对而是存在几个固定路径下的加密校验文件里。不同的锁屏类型对应不同的文件和数据存储位置我把这套机制完整展开。图案锁是早期Android最常用的方式对应文件是/data/system/gesture.key它本质上是一个20字节的二进制哈希文件。系统把你画出来的那串点序列经过SHA-1运算后得到一个摘要存储在这个文件里。每次解锁时系统把当前绘制的序列再做一次SHA-1然后和文件内容比对一致就放行。所以只要能让这个文件失效或者让系统重新生成一次空凭据锁屏就相当于被重置了。PIN码和字母密码在Android 4.4及更早版本中对应/data/system/password.key原理和gesture.key类似不过哈希算法更复杂加入了盐值。到了Android 7.0以上锁屏凭据体系发生了一次大改版系统改为使用/data/system/locksettings.db和/data/system/gatekeeper相关目录来保存凭据gesture.key逐渐退出历史舞台。Android 5.0到6.0之间则是一个过渡期部分ROM还在沿用旧文件。这里最关键的认知是系统判断“锁屏有没有被设置”靠的是这些文件是否存在、数据库里有没有对应记录。如果我们有权限删除或重置这些凭据文件从系统层面看就是“从未设置过锁屏”自然就恢复了访问。1.2 为什么ADB可以干预锁屏ADB全称Android Debug Bridge是Android官方调试工具链中的核心组件。它本质上是一条串行调试通道允许PC端通过USB线向安卓设备的shell环境发送命令。如果设备开启了“USB调试”并且在连接时弹窗中点了“允许”那么电脑就能以shell权限执行一部分系统命令。之所以ADB能干预锁屏是因为锁屏凭据文件虽然位于/data分区正常情况下shell无法直接读写但ADB在一些场景下可以提升执行权限。如果设备已经root或者手机进入了第三方Recovery环境比如常见的TWRPADB就能获得接近root权限的访问能力直接操作/data分区。这是后面所有删除、提取操作的前提。注意如果设备没有root也没有Recovery环境同时锁屏状态下无法点击USB授权弹窗那么普通ADB权限能做的事情非常有限只能执行adb reboot、adb devices这类基本命令。这也是为什么很多人第一步就在“unauthorized”上卡死。后面我会专门展开授权问题的解决办法。1.3 动手前的三大安全检查与适用条件在开始执行命令之前建议你先花两分钟确认三件事否则后面可能白忙一场。第一确认数据线到底是不是数据线不是充电流。很多朋友拿着只有电源线的杂牌线连电脑adb devices永远空列表。建议优先使用原装线或者至少是能传文件的线。第二确认电脑上安装了对应的USB驱动和合适的ADB工具包。Windows下Google官方驱动偶尔会犯脾气可以装手机厂商提供的驱动。第三确认自己的设备和电脑之前是否“配对”过。如果从没在该电脑上允许过USB调试锁屏状态下弹窗无法点击ADB连接会一直被拒。还要认清版本边界。如果你手里是一台Android 5.0以下的老设备gesture.key和password.key方案基本通用。如果是Android 7.0以上的设备请优先考虑Recovery删除locksettings.db的思路或者干脆接受双清方案。文章后面有一张版本差异速查表可以对照查看。2. 方法一ADB直接清掉锁屏凭据文件2.1 最简单的思路删除gesture.key和locksettings.db理论上最直接的恢复方式就是让锁屏凭据文件消失。具体路径有两套取决于系统版本图案锁/data/system/gesture.key老版本PIN/密码/data/system/password.keyAndroid 7.0以上锁屏设置/data/system/locksettings.db新版Gatekeeper相关目录/data/system/gatekeeper如果是Android 4.x时代的老设备可以通过ADB进入shell后尝试用rm命令删除gesture.key。很多教程里写的是这样adb shell su rm /data/system/gesture.key reboot问题在于这一步必须要有root权限也就是设备已经越狱、打开了root管理。如果你手上是一台没root的普通手机执行su会提示权限不足rm也会返回Permission denied。这可能是初学者最容易踩的坑教程看了一大堆命令逐字输入最后却卡在权限上。如果你确认设备有root权限比如已经在系统里授权了某款Root管理应用那么上面的命令是有效的。删除后重启桌面会出现“未设置锁屏”的提示直接滑动进入系统即可。这里额外提醒一点删除gesture.key并不会清除应用数据你的相册、微信记录、通讯录都还在。2.2 实际命令与权限坎为什么很多人卡在“permission denied”很多朋友问我为什么自己明明执行了rm却总是看到permission denied原因很简单/data目录被SEAndroid和文件权限双重保护普通shell用户根本碰不到。即使你用了adb root在非debug版本也就是普通零售版手机上依然无效因为adb root只对userdebug或eng版本固件生效。如果你在电视盒子上或者特殊工程机上跑过ADB可能会遇到adb root直接成功的情况那是固件本身允许调试。零售版安卓手机基本都锁死了这条路。所以正确的思路是先adb shell id看当前是什么身份如果是uid2000(shell)说明权限很低。尝试adb shell su看看有没有提示超级用户授权。如果设备有可用的Recovery环境不妨直接用Recovery里的ADB而不是在正常系统里硬碰硬。这里要特别强调一个概念Recovery模式下的ADB权限和正常系统里的ADB权限完全是两回事。Recovery本身运行在最基础的Linux环境没有Android应用层的各种限制很多Recovery会固定以root身份运行因此挂载/data后可以直接读写。换句话说即使你的手机没有root但只要刷过第三方Recovery依然可以用ADB删除锁屏文件。2.3 在Recovery模式下执行ADB删除需要TWRP/root第三方Recovery最常用的是TWRPTeam Win Recovery Project国内也有不少基于它改的适配版本。进入方式一般是关机状态下同时按住“音量加”和“电源键”或者用adb reboot recovery指令重启。各家按键组合略有差异但殊途同归。启动到TWRP主界面后通常不需要点击任何选项电脑端执行adb devices你会看到设备状态从recovery标记出现说明ADB已经连接。此时可以尝试挂载分区并删除凭据文件。TWRP界面的“挂载”页面里确保System和Data前面打了勾然后执行adb shell rm /data/system/gesture.key rm /data/system/locksettings.db rm /data/system/password.key rm -rf /data/system/gatekeeper exit adb reboot这里要注意不同TWRP版本默认把/data挂载成可读写也有部分版本需要先执行mount /data。如果rm提示文件不存在说明系统本来就没有对应文件可以跳过只要把实际存在的凭据文件清理掉即可。重启后系统会进入一个“未被加密保护”的状态。个别高通平台的设备重启后可能会要求你输入开机密码那是文件级加密FBE的密钥保护不属于锁屏密码范畴删除锁屏凭据无法解决。这点要分清别把两条完全不同的机制混在一起。3. 方法二不依赖ADB的原生恢复模式双清3.1 双清能不能解决锁屏遗忘如果你手上既没有root也没刷过第三方Recovery但手机本身有原厂Recovery那么传统意义上的“双清”也能解决锁屏遗忘。它的原理是直接擦除/data分区里所有用户数据自然也就把锁屏凭据文件一起抹掉了。很多朋友会担心双清后数据全没了那和恢复出厂有什么区别确实没有本质区别。双清是恢复出厂设置的一个底层操作系统会回到刚开机时的状态所有App、照片、聊天记录全部消失。因此这个方法我会放在“实在没办法”的优先级里但它的门槛最低、成功率最高适合ADB路径完全走不通的情况。3.2 常规操作步骤原厂Recovery的双清操作极其直观这里不区分具体品牌流程基本一致关机拔掉USB线。同时按住“音量减”和“电源键”约10秒直到进入Recovery界面。部分设备是音量加或音量上下组合可以在官网查一下。界面上用音量键移动光标电源键确认选择“清除数据”或“恢复出厂设置”。确认后等待进度条走完选择“重启系统”。部分国产品牌的原厂Recovery是触摸屏操作逻辑更接近系统设置里的重置。另外有些系统会把“清除数据”分成“清除所有数据”和“清除缓存分区”两项只需要执行前者。如果是“清除缓存分区”它不会清除锁屏凭据别白忙。重启后手机会进入第一次开机的引导流程锁屏消失内部存储被重置。由于/data分区被清空如果之前开启了手机找回、云同步可以尝试用云备份恢复部分联系人、相册但App本地数据如果没有提前备份就真的是找不回来了。3.3 双清救不回数据如何权衡到了这一步很多人会陷入纠结手机里的数据到底值多少钱我自己遇到一个比较典型的情况朋友把企业微信的聊天记录留在手机里没有云同步也没有本机备份。双清后内容全部丢失最终只能接受。所以在做双清前哪怕只有万分之一的机会也建议先尝试前面两种ADB方案或者至少把手机送到维修店看看对方是否有能力在不抹数据的前提下解锁。如果确定数据不重要只想要一台能正常使用的手机双清是最干净的办法。不需要驱动、不需要工具包、不需要任何版本知识完全是菜单操作。而且双清之后系统会重新初始化之前因为装过奇怪插件、垃圾应用导致的卡顿问题大概率也会一并消失。我有一个比较偏门的经验双清后手机第一次开机先别急着登录账号、恢复数据。可以把手机空置十几分钟让系统把各种后台任务跑顺然后再联网。这样能减少设置向导卡死、应用商店自动下载老版本App的概率。听起来很玄学但实际体验确实更顺。4. 方法三离线提取gesture.key并暴力匹配解锁图案4.1 适用场景与版本边界第三种方案最有“技术感”但适用面反而更窄。它只适合老版本Android设备尤其是Android 4.x时代采用图案锁的手机。核心思路是从手机上把gesture.key文件复制出来然后写一个枚举脚本穷举所有可能的图案序列计算SHA-1哈希不断比对直到找到能匹配文件内容的那个序列。有人可能要问gesture.key里面存的就是SHA-1哈希我离线枚举所有图案不就等于把锁屏密码“还原”出来了吗理论上是的但只因为图案锁的样本空间足够小才让穷举成为可能。手势图案是3乘3的九宫格共有9个点规则上至少连接4个点最多9个点。去掉无效跳跃总有效图案数量大约只有38万种。这样一个量级普通电脑用Python跑一遍也就几分钟到十几分钟。新版Android不再使用这么弱的方案Android 5.0之后逐步用scrypt等加固算法替代SHA-1而且锁屏凭据和Gatekeeper强绑定单纯提取gesture.key已经无法恢复。所以看到这里不要拿新手机去试你会失望的。4.2 提取gesture.key的两种途径要离线匹配第一步是把gesture.key拿到电脑上。最常见的方式是借助TWRP的ADB功能adb pull /data/system/gesture.key gesture.key执行完这一行文件夹里会多出一个20字节的文件。你可以用十六进制工具打开看看到一串不可读的二进制内容那就是图案序列的SHA-1摘要。如果设备已经root也可以直接在系统中执行adb shell su cat /data/system/gesture.key /sdcard/gesture.key exit adb pull /sdcard/gesture.key提取成功后直接把文件放在脚本目录里即可。要是文件提取不出来后面的脚本就无从谈起因此这一步必须是前面ADB方案能通行的设备才能做。4.3 用Python写一个“图案字典匹配”脚本下面是我整理过的一版脚本核心逻辑是枚举所有长度4到9的排列逐一计算SHA-1并比对。注释写得很详细直接运行即可。import hashlib import itertools import sys # 读取gesture.key文件内容 try: with open(gesture.key, rb) as f: target_hash f.read() except FileNotFoundError: print(未找到gesture.key请先提取文件) sys.exit(1) # 数字0-8分别代表九宫格中的9个点 points list(range(9)) counter 0 for length in range(4, 10): for guess in itertools.permutations(points, length): counter 1 # 图案序列转成字节数组后做SHA-1 digest hashlib.sha1(bytes(guess)).digest() if digest target_hash: print(匹配成功图案序列数字:, guess) sys.exit(0) if counter % 200000 0: print(f已尝试 {counter} 种组合仍未命中...) print(未找到匹配可能文件损坏或不是纯图案锁)这里要解释一个小细节bytes(guess)会把一个元组如(0,3,6,7,8)转成二进制字节串也就是b\x00\x03\x06\x07\x08。Android系统内部正是用这种字节数组作为SHA-1的输入所以比对方向是正确的。如果你的ROM特殊也可以尝试对str(guess)或其他格式做哈希不过我在常见ROM上测试时字节数组方案命中率最高。跑完脚本如果打印出“匹配成功”比如得到(2,5,8,7,6)对应的就是九宫格坐标。按“1 2 3 / 4 5 6 / 7 8 9”的排布方式(0,1,2)代表第一行三个点。把数字还原成图案直接画上去就能解锁。4.4 匹配不到常见图案怎么办脚本跑完没有命中原因一般有三个。第一个原因是gesture.key文件可能来自加密分区或不同系统的SHA-1加盐实现。部分国产ROM会加入自定义盐值此时单纯计算bytes(sequence)的SHA-1肯定对不上。解决思路是逆向系统源码查看具体哈希逻辑对于普通用户来说成本太高不如换用前两种方法。第二个原因是锁屏类型弄错了。手机设置的是PIN码而不是图案锁对应文件是password.key或locksettings.db但你看教程觉得“图案密码”听起来更接近结果拿password.key去做图案枚举自然不可能命中。这事真的发生过我在给同行远程指导时遇到过好几次。第三个原因是设备系统版本太新。前面反复强调过Android 5.0以上逐渐弃用gesture.key哪怕文件能提取出来校验逻辑也可能已经变了。遇到这种情况建议回到Recovery删除凭据文件这条路线。5. 实战中一定会遇到的各种坑5.1 授权的死循环我最常被问到的问题不是命令怎么写而是“adb devices一直显示unauthorized怎么办”。这确实是个死循环手机锁屏了无法在弹窗上点“允许”电脑端永远没有授权记录。怎么破优先方案是进入Recovery模式。TWRP环境下不需要授权弹窗adb devices通常直接显示recovery状态可以绕过这一层障碍。如果你的手机连TWRP都没有那就只剩双清或送修两条路。还有一种取巧方式是在锁屏状态下下拉通知栏看看USB调试授权提醒有没有“允许”按钮可以点。少数设备的通知栏在锁屏时也能展开值得一试。这里补充一个观念授权记录存储在电脑端的~/.android/adbkey.pub和手机端一份对应的配对数据中。如果你曾经在另一台电脑上连接过这台手机但当前电脑从没配对过等于从零开始上述死循环无解。5.2 锁定文件删了但触屏无响应删除凭据文件后重启偶尔会遇到一种情况系统不再要求输入密码了但触摸屏没反应屏幕上全是点击轨迹但什么都点不动。这通常不是锁屏的问题而是系统的InputManager服务在“从未设置锁屏”和“触摸校准数据异常”之间发生了冲突。不要慌先尝试硬重启。长按电源键10秒以上强制关机再开机很多时候第二次启动就正常了。如果依旧没反应则可能是之前设置过“锁屏状态下禁用USB触摸调试”或者屏幕本身存在硬件问题。还有一种可能某些系统在检测到gesture.key被删除后会自动重建一个空锁屏但框架进程卡死了。可以连接电脑执行adb shell reboot试试让系统干净重启。5.3 恢复模式里MTP/存储不可用使用TWRP时如果你试图在Recovery里把gesture.key复制到U盘或电脑可能会发现MTP模式不可用。TWRP的MTP驱动兼容性一直一般尤其在Windows和USB 3.0接口下更容易掉线。替代方案是老老实实用adb pull。只要驱动没问题在Recovery下执行adb pull /data/system/gesture.key非常稳定。不要在TWRP界面里点“Mount”然后指望电脑资源管理器直接看到文件那时候往往等半天都是“此设备已停止响应”。5.4 Android版本差异速查表为了方便对照我整理了一张简表大家按自己的系统版本选择方案Android版本锁屏凭据存储方式推荐恢复路径2.x - 4.xgesture.key、password.keyADB删除或gesture.key离线匹配5.0 - 6.0password.key、开始引入locksettings.dbRecovery删除凭据文件7.0 - 9.0locksettings.db、gatekeeperRecovery删除数据库ADB方案受限10.0及以上强化的Gatekeeper、FBE加密建议双清/官方找回ADB弱权限这套表不是绝对的国内各厂商定制ROM会有自己的变化但整体趋势没错。越新的系统本地恢复的难度越高因为安全和数据加密越来越严格。如果你遇到的是最新旗舰机型且未解锁Bootloader看到这里基本可以死心直接备份云数据后双清吧。5.5 ADB和Fastboot驱动、命令的基础备忘还是有不少读者第一次接触ADB这里把最基础的操作串一遍。在Windows上先解压ADB工具包到一个纯英文路径比如C:\adb然后在该目录打开命令行。连接手机后依次执行adb devices adb shell如果adb devices返回设备编号但状态是device说明已经就绪返回unauthorized见前面的授权死循环方案返回空列表检查驱动和数据线。在Linux或macOS下通常还需要给adb工具加执行权限并且留意/etc/udev规则否则USB设备无法被识别。Fastboot是另一个工具用于Bootloader阶段与ADB不是同一个模式。在fastboot devices状态下不能执行adb shell命令。如果你在Recovery里执行adb reboot bootloader后再执行ADB命令会出现error: device not found这很正常回到fastboot devices去处理。6. 最后想说的一些话我个人在实际操作中体会最深的是“权限决定一切”这句话。很多网上的教程不分前置条件上来就让你删文件结果一堆人在permission denied前碰壁。其实如果你只是普通用户手里设备没root、没刷过Recovery最稳妥的做法不是尝试各种奇技淫巧而是接受双清或者提前把云备份、本地备份做好。另外趁手机还能正常使用的时候强烈建议把开发者选项里的“USB调试”一直开着并在这台电脑上完成一次授权。真到忘记密码的那一天你会感谢这个小小的习惯。对于有一定动手能力的朋友可以提前刷入一个可用的第三方Recovery让后续恢复手段多一层保险。这不需要天天用但关键时刻能救你一次。最后再分享一个小技巧恢复访问后如果发现系统里很多App的登录状态还在但支付类、银行类App要求重新验证密码属于正常现象。因为锁屏凭据被重置系统会认为当前处于不安全的恢复状态敏感应用会强制二次验证。这不是设备出问题是安全策略放心使用就好。