Skip to content

破解有道词典笔ADB密码的两种方法

RedbeanW edited this page Sep 22, 2024 · 1 revision

前言

上一篇文说了将加强版强刷满分版系统的方法,并在文末放出了新系统的ADB密码,这篇文主要是说破解过程的,如果对破解过程不感兴趣的朋友可以直接看结论。

结论

有道词典笔ADB密码:(如果有)

  • After 2.0.0: CherryYoudao
  • After 2.7.0: x3sbrY1d2@dictpen

截至 23/01/17,有道已为所有有密码的系统更换验证脚本为 SHA256 比对,本文所述全部方法均失效!
—— 但方法失效不意味着以前的密码不能用了。

方法一:抓包

工具准备

  • imgRePackerRK

该工具可在群内 刷机资源 话题中下载

  • WireShark
  • 7zip
  • 有道词典笔

抓包

安装 wireshark 的过程不赘述,由于笔没有提供代理服务器的设置功能,所以我在路由器(openwrt)上用 tcpdump 抓包:

tcpdump tcp -i ra0 -s 0 -c 100 -w ./pen-dump.cap
  • 快速在笔上检查一次更新,然后 Ctrl+C 停止抓包

2

  • 将 pen-dump.cap 下载到电脑上,用 wireshark 打开,按图操作

3

  • 于是就看到POST请求体了,不得不批评一下某团队,什么年代了 https 呢...
POST /product/1594888953/xxxxxx/ota/checkVersion HTTP/1.1
Host: iotapi.abupdate.com
Accept: */*
Content-Type: application/json
Content-Length: 168

{
    "timestamp": 1651632116,
    "sign": "xxxxxxxxxxxxxxxxxxxxxx", // 这是设备临时生成的sign
    "mid": "xxxxxxxxxxxxxx", // 这是SN
    "productId": "1594888953", // 产品ID
    "version": "2.3.1",
    "networkType": "WIFI"
}
  • 随便找个POST测试网站写上链接和请求体(下面的 Json)并把 version 改成 1.0.0,你怎么知道改成 1.0.0 的?我猜的啊

4

  • 点击模拟请求,就得到了某 OTA 服务器的响应
{
    "status": 1000,
    "msg": "success",
    "data": {
        "releaseNotes": {
            "publishDate": "2020-12-01",
            "version": "1.1.0",
            "content": "[{\"country\":\"zh_CN\",\"content\":\"1.新增超快点查功能,点击单词起始位置即可完整识别\\r\\n2.新增互动点读情景动画,互动答题等功能,下载点读包即可离线使用\\r\\n3.新增古诗文赏析和古代汉语词典内容\\r\\n4.优化系统稳定性\"}]"
        },
        "safe": {
            "encKey": null,
            "isEncrypt": 0
        },
        "version": {
            "segmentMd5": "......",
            "bakUrl": "",
            "versionAlias": "",
            "deltaUrl": "http://iotdown-qn.abupdate.com/1594888953/4351684/83ba08c3-1fef-4d4f-bf9e-0c2b3a2e88bd.img",
            "deltaID": "4351684",
            "fileSize": 281567704,
            "md5sum": "be3fa77e6d84ddfb552287c69b5db384",
            "versionName": "1.1.0"
        },
        "policy": {
            "download": [
                {
                    "key_name": "wifi",
                    "key_message": "仅wifi下载",
                    "key_value": "optional"
                },
                {
                    "key_name": "storageSize",
                    "key_message": "存储空间不足",
                    "key_value": "281567704"
                },
                {
                    "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 把镜像下载下来就行

解包

  • 把下载下来的 img 文件放到 imgRePackerRK 同级目录下,直接用以下命令解包
.\imgRePackerRK.exe /cid 83ba08c3-1fef-4d4f-bf9e-0c2b3a2e88bd.img
  • 解包完成后进入目录,解压 rootfs

5

  • 然后就能在 /usr/bin 下发现一个神秘文件

6

  • 简单注释了一下,其实二师兄过来应该都知道密码是啥了......
#!/bin/sh
VERIFIED=/tmp/.adb_auth_verified

# 若存在上面的文件直接通过验证
if [ -f "$VERIFIED" ]; then
    echo "success."
    return
fi

# 三次尝试机会
for i in $(seq 1 3); do
    read -p "$(hostname -s)'s password: " PASSWD
    if [ "$PASSWD" = "CherryYoudao" ]; then #...
        echo "success."
        touch $VERIFIED
        return
    fi

    echo "password incorrect!"
done

false

一点感想

有没有感觉,破解这个密码是不是很简单甚至有些愚蠢?我在学校设想该团队可能会整出点什么活的时候,各种根据设备算号、联网取号、随机密码都想到了,可是回家操作实践时一路下来人还是很懵币的——为什么?因为这个系统一点都不瞒着我(OTA 还在用不安全的 HTTP,千篇一律的弱口令,令人目瞪口呆的明文验证脚本等等)某些事做起来比我想象的容易太多,唉!

另外....

可以确定的是,有道在 1.1.0 为三代加入了 ADB 密码。我试了好几个型号的 OTA,我能猜到的老版本包都已经有 adb_auth.sh 了(文件列表在 all_file_md5.txt 里看),所以不得不承认这个办法破解密码还是有些运气成分和某团队的鼎力支持在里面的。

方法二:Dump分区

由于当初对 rockchip soc 不是很了解,所以一开始用的是抓包法破出来密码的。这个方法是在我给加强版强刷满分版系统时摸索出来的方法。

工具准备

  • RKDevTool 2.86 & 2.38 (AndroidTool)
  • DriverAssitant
  • DiskGenius

要用到的全部资源都已上传到群内 刷机资源 话题

进入LOADER模式

按照一开始提到的文章中的方法进入,不再赘述

导出 system 分区镜像

  • 打开 2.86 版本的 RKDevTool,如图操作,记下 system_a 的 LBA 和 Size(图上忘标了)

7

  • 然后打开 2.38 版本的 AndroidTool,如图操作

8

  • 大概需要3分钟,提示导出成功后打开 DiskGenius
  • 选择 磁盘>>打开虚拟磁盘文件

9

  • 定位并打开你导出的 system_a.img
  • 接下来....,不多说了,在方法1的第三节讲过了

10

  • 如果你用Linux的话,可以用以下命令挂载img,既然都用 Linux 了应该不用我再指导了
mkdir /mnt/system_a
mount -t ext4 -o loop /path/to/system_a.img /mnt/system_a