1/3
2/3
3/3
[全网首发]有道词典笔x7pro获取adb权限
-听秋念
编辑于 2025年03月15日 15:51

前言

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

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

有道词典笔一直都带有adb开启入口 只需多次点击“法律监管”中的文本即可打开

但adb打开并不意味着结束 当你尝试使用adb连接设备时 会弹出login with "adb shell auth" to continue.

按照提示输入“adb shell auth”则会出现一个输入密码的提示YoudaoDictionaryPen-xxx's password:

在早期的系统版本中,这个密码被设置为“CherryYoudao” 但当词典笔os出现后 adb密码开始使用md5储存 导致你无法通过解包固件获得明文

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

参考链接:“https://github.com/orgs/PenUniverse/discussions/250"

“https://github.com/orgs/PenUniverse/discussions/277”

本文用到的全部工具:https://www.123684.com/s/sE1hjv-mklwd?提取码:0m8B

正文开始

首先,通过抓包抓取系统全量包

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

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

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

    

代码块
JavaScript
自动换行
复制代码
 ```json
 {
    "timestamp": "这里填你WireShark获得的timestamp",
    "sign": "这里填你WireShark获得的sign",
    "mid": "这里填你WireShark获得的mid",
    "productId": "这里填你WireShark获得的productID",
    "version": "99.99.90",
    "networkType": "WIFI"
 }
 ```
复制成功

图片来自LittleSadSheep

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

    

代码块
JavaScript
自动换行
复制代码
 ```json
 {
    "status": 1000,
    "msg": "success",
    "data": {
       "releaseNotes": {
             "publishDate": "2023-06-26",
             "version": "99.99.91",
             "content": "[{\"country\":\"zh_CN\",\"content\":\"1.优化系统.修复错误\"}]"
       },
       //"sha256": "xxxxxxxxxx",
       "safe": {
             "encKey": null,
             "isEncrypt": 0
       },
       "version": {
             "segmentMd5": "[{\"num\":0,\"startpos\":0,\"md5\":\"6afb51af609d5ab205620f2020ed964e\",\"endpos\":104857600},{\"num\":1,\"startpos\":104857600,\"md5\":\"42c6e6b88c0603783765c403b0ed7914\",\"endpos\":209715200},{\"num\":2,\"startpos\":209715200,\"md5\":\"a2d297d5cc33eca65777d2bdcbe98293\",\"endpos\":314572800},{\"num\":3,\"startpos\":314572800,\"md5\":\"5bb85fc4e9539131ff471cf7e1488718\",\"endpos\":419430400},{\"num\":4,\"startpos\":419430400,\"md5\":\"4c5f5f95d49719a23aef3d127f884c1f\",\"endpos\":524288000},{\"num\":5,\"startpos\":524288000,\"md5\":\"b6028cbf53490ff8a72d6b03da64bfdb\",\"endpos\":629145600},{\"num\":6,\"startpos\":629145600,\"md5\":\"4f6d7a683825afdb57291c651fcf0a4c\",\"endpos\":734003200},{\"num\":7,\"startpos\":734003200,\"md5\":\"51441a5ab6fc37076104de26d8d74092\",\"endpos\":838860800},{\"num\":8,\"startpos\":838860800,\"md5\":\"2f282b84e7e608d5852449ed940bfc51\",\"endpos\":943718400},{\"num\":9,\"startpos\":943718400,\"md5\":\"4c48a4078df31327fda7845123a4cb2b\",\"endpos\":1048576000},{\"num\":10,\"startpos\":1048576000,\"md5\":\"2f282b84e7e608d5852449ed940bfc51\",\"endpos\":1153433600},{\"num\":11,\"startpos\":1153433600,\"md5\":\"2f282b84e7e608d5852449ed940bfc51\",\"endpos\":1258291200},{\"num\":12,\"startpos\":1258291200,\"md5\":\"c81029b9c4e0ecf7cbcf1d1afb881f20\",\"endpos\":1363148800},{\"num\":13,\"startpos\":1363148800,\"md5\":\"586c523c54bc9f1042bb92022ac87183\",\"endpos\":1397088268}]",
             "bakUrl": "http://iotdownbak.mayitek.com/xxxxxxxxxx/xxxxxxx/5383b000-49c2-4d29-812e-42c52b075599.img",
             "versionAlias": "",
             "deltaUrl": "http://iotdown.mayitek.com/xxxxxxxxxx/xxxxxxx/5383b000-49c2-4d29-812e-42c52b075599.img",
             "deltaID": "xxxxxxx",
             "fileSize": 1397088268,
             "md5sum": "5c668394fa2779eada86601292ff877b",
             "versionName": "99.99.91",
             "sha": "6fdd26798679e5cb1e877051c7970a89307e303"
       },
       "policy": {
             "download": [
                {
                   "key_name": "wifi",
                   "key_message": "仅wifi下载",
                   "key_value": "optional"
                },
                {
                   "key_name": "storageSize",
                   "key_message": "存储空间不足",
                   "key_value": "1397088268"
                },
                {
                   "key_name": "forceDownload",
                   "key_message": "",
                   "key_value": "false"
                }
             ],
             "install": [
                {
                   "key_name": "battery",
                   "key_message": "电量不足,请充电后重试!",
                   "key_value": "30"
                },
                {
                   "key_name": "rebootUpgrade",
                   "key_message": "",
                   "key_value": "false"
                },
                {
                   "key_name": "force",
                   "key_message": "",
                   "key_value": "{\"from\": \"00:00\", \"to\": \"00:00\",\"gap\": \"00:00\"}"
                }
             ],
             "check": [
                {
                   "key_name": "cycle",
                   "key_message": "",
                   "key_value": "1500"
                }
             ]
       }
    }
 }
 ```
复制成功

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

pipicat613反馈:RKDevTool最好用v2.86的,旧版本的解包会失败!

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

代码块
JavaScript
自动换行
复制代码
#!/bin/sh
VERIFIED=/tmp/.adb_auth_verified

if [ -f "$VERIFIED" ]; then
    echo "success."
    exit
fi

for i in $(seq 1 3); do
    read -p "$(hostname -s)'s password: " PASSWD
    if [ "$(echo $PASSWD | md5sum)" = "302af1d80be1106586775350cc0a2c92  -" ]; then
        echo "success."
        touch $VERIFIED
        exit
    fi

    echo "password incorrect!"
done

false
复制成功

    找到其中的md5值 记录下来备用

使用winhex替换md5值

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

md5值

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

    总之我们把带换行符一起转换的md5用来替换原img中的md5 然后保存文件

    注意:此时文件大小未发生改变 大小一个字节也没变!

计算修改后的文件校验码

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

填写更新请求返回的endpos

计算md5

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

sha256计算

搭建更新服务器

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

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

前5处修改

    

第6处修改

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

搭建服务器

更新自定义固件

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

获得adb权限,美美折腾

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

adb密码校验成功

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

至此,教程结束

感谢各位大佬的支持,本文总结了多位大佬的经验,并加以修改,解决了一些很头疼的问题,比如那个恶心人的密码换行符以及sed修改不了img等

如有疑问欢迎评论区讨论,谢谢大家!