前言

转载自听秋念,新定义有道词典笔的破解过程名为YDPEN_jalibreak

有道词典笔早期好像使用的是安卓系统?但后面出的笔都不是安卓系统,而是基于linux的词典笔os。故即使开启有道词典笔的adb,依然无法实现安装apk等功能,仅限折腾着玩玩罢了。

操作有风险,玩机需谨慎。 因任何操作造成的包括但不限于变砖、炸 mini app 等损失,作者均不承担任何责任,也没有义务帮你修复。如有侵权,联系删除。

有道词典笔一直都带有adb开启入口,只需多次点击“法律监管”中的文本即可打开。按照提示输入adb shell auth,则会出现一个输入密码的提示YoudaoDictionaryPen-xxx's password:。但adb打开并不意味着结束,当你尝试使用adb连接设备时,会弹出“login with ‘adb shell auth’ to continue”。在早期的系统版本中,这个密码被设置为CherryYoudao,但当词典笔os出现后,adb密码开始使用md5储存,导致你无法通过解包固件获得明文。

本文采用大佬SkySight-666的方案加以改进,靠中间人攻击劫持更新请求从而替换更新包。

参考链接:参考文章1 参考文章2

本文用到的全部工具:下载(提取码:0m8B)。

正文开始

一、通过抓包抓取系统全量包

使用词典笔连接电脑热点,启用wireshark对热点所在连接进行抓包,词典笔检查更新,在wireshark中找到如图post请求,抓到后可以停止抓包。(图片来自LittleSadSheep)

二、重新发送更新请求,获取全量包链接

找一个HTTP测试网站,这里我用的是SOJSON,将Header设置为,将你在获得的数据填入,发送如下请求:

(图片来自LittleSadSheep)

请求完毕后,我们会获得一个包含完整包链接的json。

特别注意: 这不是所有型号通用的,你要自己抓自己对应的更新包,然后取出其中deltaurl的值,下载更新包,然后使用RKDevTool-高级功能,选择固件后点击解包。

三、解包并修改adb密码

在Output文件夹中,我们可以看到解好的包。对于x7pro来说,需要进入Android文件夹并分解rootfs分区,最终在/usr/bin下找到adbd_auth.sh,打开它,找到其中的md5值,记录下来备用。

使用winhex替换md5值,打开winhex并打开你的完整包img,开启搜索,搜索前面记录的md5值。

千万注意: 这里有一个网易挖的坑!这边代码用的echo会在你输入密码之后加一个换行符,导致密码md5改变,最终校验失败。这也是大部分升级成功却依旧密码错误的原因之一!因此我们需要想办法在自己的密码转为md5前也加上换行符。

总之,我们把带换行符一起转换的md5用来替换原img中的md5,然后保存文件。注意:此时文件大小未发生改变,大小一个字节也没变!

四、计算修改后的文件校验码

编辑getnewmd5.py,使得segment_sizes数组中的值为前面抓包抓到的每一个endpos的值,有多少就加多少,每个机器值可能是不一样多的。然后在cmd中执行python getnewmd5.py {修改后的img路径},并紧跟着执行certutil -hashfile {修改后的img路径} md5,随后我们会获得如图所示的分片md5和整体md5。

还需要计算一个img的sha256值,我这边使用的是7zip,得到修改后的img的sha256值,留存备用。

五、搭建更新服务器

首先自行安装nodejs,然后编辑YDPen.js,将JsonData的内容全部替换为前面抓包抓到的内容,然后手动修改segmentMd5中每一个分块的md5值为前面计算得到的md5值,并修改bakUrl和deltaUrlhttp://{本机局域网ip}:14514/你修改的完整包.img,随后修改md5sum为前面计算的完整img的md5,sha修改为计算的sha256值。

下拉到js下方部分,修改/product/1717746496/*********/ota/checkVersion为你自己抓到的请求url,保存文件。

开启两个cmd,一个执行python httpserver.py {img路径},另一个执行node YDPen.js,同时修改一下host,把iotapi.abupdate.com劫持到本机ip,并执行ipconfig /flushdns来刷新dns。

六、更新自定义固件

在词典笔连接电脑热点的情况下检查更新,会检测到一个很大的更新包,直接更新即可。

七、获得adb权限,美美折腾

更新完毕后,待设备重启,再次去法律监管里面连击打开adb,此时连接电脑执行adb shell auth并输入前面转换为md5的密码明文,回车,见证奇迹。

可以看到adb连接成功,密码正确,并成功获得shell的root权限。

至此,教程结束。感谢各位大佬的支持,本文总结了多位大佬的经验,并加以修改,解决了一些很头疼的问题,比如那个恶心人的密码换行符以及sed修改不了img等。如有疑问,欢迎评论区讨论,谢谢大家!