为 Kindle 刷入 Android 系统

March 10, 2019 · 趣在折腾 · 14768次阅读

无意间在网上搜到了 Kindle 刷 Android 的教程,而且网站超级齐全地准备好了所有固件文件和教程

准确来说就是一个叫做 KDroid 的东西吧,还挺牛逼的。

虽然说之前也尝试过搜索这样的内容,但除了淘宝花钱代刷,也没有其他的路子。慢慢地也习惯和适应了原版 Kindle 的使用,配合越狱后的小插件,其实还是很好用的。

不过既然东西出来了,试试也无妨, Android 还是能有一些新特性的嘛!

于是备份了机器里面的文件,下来文件,照着教程操作。一路还算比较顺利。

正当我兴致勃勃刷好系统,开机连接网络,并准备使用的时候,竟然弹出来一个激活提示……

KDroid 激活.jpg

扫码出来的商品是这个:

KDroid 激活淘宝页.png

而看到价格后的我表情是这样的:

???

噢!这就难怪为什么网站的内容如此齐全了~

可是, Android 难道不是开源的吗?而且就算有适配的成本,也不至于买这么贵吧?160的价格再加一点都够买一台二手刷好的机器了……

望着半死不活的机器,和已经付出的时间精力,实在不甘心啊,就顺手 Google 了下激活码和破解。果不其然有和我一样的人,其中有一篇叫《绕过 KDroid 密码验证在 Kindle 设备运行 Android》的博文,看起来还算有点可行性,就是实践起来挺麻烦的。

先是用自己的 VPS 试了下,好像配置有点问题;于是去 Digital Ocean 开了台测试机,环境是没问题了,可解出来的包里面的参数和教程给的参数并不是太一致(可能是年代久远更新变化了),而我只试了其中一部分破解,没有成功。看了评论好像很多人也没成功,或者比我厉害的人都修改到了数据,但最后还是遇到了白屏的情况。

非常失败的一次经历。

不过呢,在基安上面发现了一个据说“能破解”的大佬,发了消息询问,暂时没有回复。

所以作罢,留个坑好了

暂时麻烦地刷回之前的系统,单用 Kindle 也挺好的。

这个坑,等以后确定能破解成功的时候再回来补吧!


↑动动手指支持我 (๑¯◡¯๑) 或者请我喝奶茶↓

AndroidKindle

最后编辑于1年前

说点什么吧

  1. Ygjsz Ygjsz
    2021-06-20 21:25

    汇报一下这两个月以来的研究成果,做个详尽的报告:
    首先,我购买了3台Kindle 7 (Kindle 499)来做测试(因为价格便宜)
    然后得出了以下结论

    0、(背景知识)
    (1)KDroid的作者叫徐勤光(xu@debian),2015年开始研究KDroid这个Project,2016年开始出售刷机服务。一开始在guang6321.blog.163.com发布更新包,然后是kdroid.net,最后到现在的kdroid.org。
    (2)一开始KDroid仅支持寄刷,2018年左右开始加入了用户自行刷机+激活码激活的方式。(也就是这时加入了万恶的JSONClient)
    (3)现在淘宝上售卖KDroid正版的一共有三家店,分别是“令狐数码安卓电纸书”、“广州市庆阵业电子(总代理)”以及“晓璐阿姨kindle电纸书”。而那个激活界面二维码扫描出来的链接只是一个引流链接而已,会把你引流到上述三家点进行购买。
    (4)2018年前,徐勤光是亲自卖KDroid服务的,直到2018年,有人以“KDroid锁机“为由,举报了徐勤光的店,从而使徐找了三个代理。
    (5)淘宝上除了那三家之外售卖KDroid刷机服务的,均为盗版。(至于盗版是什么,后文讲解)

    1、 KDroid刷机包结构
    (1) 概述 ——这些内容都基于Z05版Uboot撰写,下同
    AdbWinApi.dll
    AdbWinUsbApi.dl
    为fastdownload的依赖库,不多解释。
    config.bin
    指定刷机包对应机型,可为Kindle7 Kindle8 kpw2 kpw3 oasis voyage
    esystem.bin
    安卓的system分区内容
    Kdroid.bin
    安卓内核
    s-bios.bin
    bios,bin
    oasis专属文件,不知道是什么鬼(没机器无法研究)
    system.bin
    双系统下Kindle系统分区
    Kernel.bin
    双系统下Kindle系统内核
    Data.bin
    双系统下Kindle系统Fat32分区(用户分区)内容
    以及他们对应的sign文件
    Sign文件是crc32,可以自行计算。
    (2) fastdownload刷机主程序
    这个fastdownload就是由原版的fastboot魔改而来,启动后会先校验刷机包型号和连接的机器的型号是否相符,是的话继续,不是的话直接结束刷机流程。
    刷机流程:当用户按下对应的数字之后,fastdownload会先检测uboot版本是否和fastdownload内置的版本相符,如果不符的话会进行升级(Verflag:xxx)
    升级完成之后开始下载对应分区的内容(esystem Downloading)
    最后进行重启。
    (3)U-Boot
    KDroid的U-Boot是分版本的,一个U-Boot版本对应一个内核,U-Boot版本可以在Fastboot模式下输入“fastboot getvar verflag” 来获取到。例如2018年-2019年最新的系统,U-Boot版本都是Z05,楼下那位发的Oasis 1 无验证包的U-Boot所对应的U-Boot版本为B.4。如果混用U-Boot和内核,系统也是无法启动的。KDroid的Uboot全都是屏蔽TTL的,但是又屏蔽的不完全,开机TTL口只会输出
    In: serial
    Out: serial
    Err: serial
    然后就没有信息了,但是在此时敲任意键也是可以打断启动流程的,输入任何指令也是有效的,只是没有回显而已,因此你可以打断启动后输入bist进入bist操作。
    KDroid的U-Boot在主板上电时会进2-3s的fastboot mode,在这几秒内如果有fastboot动作,uboot就会进入fastboot 模式,如果没有动作则继续启动。
    (4)分区
    KDroid的Uboot指定了很多分区,分区名称和作用如下(自行推测,不能保证100%正确)
    Xekdroid(安卓系统内核)
    Xzvar (Kindle系统Var分区)
    Xzvfat(未知)
    Xembr (未知)
    Xesystem(安卓系统分区)
    Xekrecv(未知)
    Xerecv(未知)
    Xedata(安卓系统Data分区)
    Xzsystem(Kindle系统分区)
    Xzdiags (diags分区)
    Xzdata(未知)
    Xzbootloader(U-Boot)
    Xzprod(未知)
    Xzbist(未知)
    Xztest(未知)
    Xzconfig(记录当前系统,是原生/安卓/双系统)
    Xzuserpartition(未知)
    Xzmbr(未知)
    Xzorig(未知)
    Xzkernel(Kindle系统内核)
    xzdiags_kernel (Diag内核)
    xehead(未知)
    请注意,这些分区只是U-Boot划分出来的,Nand物理上还是4个分区,第一个是450M(系统),第二个64M(diags),第三个64M(LocalVar,Kindle系统的系统数据分区),第四个就是剩余的空间
    Kindle物理分区表如下
    mmcblk0boot0(u-boot)
    mmcblk0boot1(未知,一般是空的)
    mmcblkp1(系统)
    mmcblkp2(diags)
    mmcblkp3(LocalVars)
    mmcblkp4(剩余空间)
    (Kindle 499的分区情况,KPW2 KPW3 Voyage都这样,oasis和558比较特殊,没有机器不好研究)
    双系统的原理有待研究,目前可以知道是U-Boot进行引导不同偏移量上的内核进行启动从而实现双系统。
    (5)JSONClient验证
    2018年以及以后的KDroid都是带验证(即JSONClient)的,经过研究,我发现激活信息并不是存储在CPU的Fuse里,而是位于Nand的某个位置。我尝试过把激活过的主板的Nand全部清零,清零之后再刷KDroid,激活界面的确会重新出现,但是只要在激活界面连一下网,JSONClient就会自动把系统激活了,无需输入激活码。JSONClient本身做了高强度的代码混淆,其加密库JNIDemo.so也是做了高强度代码混淆,逆向是几乎不可能的事情。调用JSONClient的代码应该是在显示驱动内,个人猜测未激活的情况下调用的是这两个
    /System/lib/gralloc.EVK.so
    /System/lib/hwcomposer.EVK.so
    带有跳出JSONClient逻辑的显示驱动,而激活之后就使用正常的显示驱动(把正常的显示驱动改名成带验证的当然会卡住无法启动)
    没激活的状况下,就算刷了双系统,启动时那个【Start】Kindle system也是没有用的,根本点击不下去。
    我也尝试过将激活过的主板的Nand的Dump直接恢复到未激活的主板的Nand里,可以正常启动,但是启动到一半,系统会突然重启并且清除data分区(Kindle主板上绿灯闪烁=在清楚数据),因此表明Nand某位置的激活数据和机器的序列号也是绑定的,如果不匹配也是会掉激活的。
    (6)TTL
    U-Boot的TTL上文讲过了,系统内也是完全屏蔽TTL的,通过TTL进行调试无望。
    (7)破解前景
    2018年之前的KDroid是没有验证的,所以,我从咸鱼淘来了一个装了2017年KDroid的机器进行研究。
    (7.1)老KDroid概述
    我拿到的这台装有老KDroid 的Kindle 7 (499)的U-Boot版本为K.4,这个版本因没有验证,在之前一段时间内曾大范围被各种奸商用来盗版KDroid。(我很想上图,可惜这个评论区没法发图),界面和预装程序与2018-2019年的KDroid都有些许不同。K.4 U-Boot内定义的分区也和最新的Z05有区别,而且K.4不支持开机选单,要切换原生和安卓系统只能通过安卓系统内的Eink设置中的入口切换。
    (7.2)TTL
    K.4版的KDroid是不屏蔽TTL的,有系统内核启动的日志输出,进了安卓系统之后也是可以用TTL的,只有U-Boot界面还是和上述的情况一样,拥有一个没有回显的TTL。
    (7.3)进行移植破解遇到问题
    我用DD法把整个mmcblk0给Dump出来,然后给另外一个主板恢复进去了,并且刷好了K.4的U-Boot。上电之后,机器可以启动,但是卡在了某个地方
    下面上TTL日志
    In: serial
    Out: serial
    Err: serial

    .118574] No Legacy reboot reason code to print
    E [Samsung]

    0.538779]

    [ 0.538782] just text: vaddr c015fa90, va 0xc015f200 pa 0x801000c3 attr 0x6
    [ 0.547071]
    [ 0.547074] nmx6sl_wfi_iram: vaddr d0892000, va 0xd0892200 pa 0x904043 attr 0x2
    [ 0.556012]
    [ 0.556015] mx6sl_ddr: vaddr d0894000, va 0xd0894200 pa 0x905043 attr 0x2
    [ 0.566367]
    [ 0.566370] mx6sl_iomux: vaddr f40e0000, va 0xf40e0200 pa 0x20110c3 attr 0x149
    [ 0.580225]
    [ 0.580228] ANATOP: vaddr f40c8000, va 0xf40c8200 pa 0x20110c3 attr 0x149
    [ 00?00, va 0xf41b0200 pa 0x21110c3 attr 0x149
    [ 0.614030]
    [ 0.614033] L2: vaddr f2a02000, va 0xf2a02200 pa 0xa02043 attr 0x149
    [ 0.623915]
    [ 0.623918] arm perif: vaddr f2a00000, va 0xf2a00200 pa 0xa00043 attr 0x149
    就这里卡住了,不往下启动了。
    再来看一下能启动的K.4的日志
    In: serial
    Out: serial
    Err: serial

    r²¢ꀢoot: C def:bcut:batterycut=1
    [ 0.528750] LPDDR2 MfgId: 0x3 [Elpida]
    [ 0.532527]
    jmx6sl_ddr: vaddr d0894000, va 0xd0894200 pa 0x905043 attr 0x2x2000c3 attr 0x6
    l_iomux: vaddr f40e0000, va 0xf40e0200 pa 0x20110c3 attr 0x149
    [ 0.579105]
    0.589055] CCM: vaddr f40c4000, va 0xf40c4200 pa 0x20110c3 attr 0x149tr 0x149
    [ rªˊꀍMDC_P0: vaddr f41b0000, va 0xf41b0200 pa 0x21110c3 attr 0x149
    X. pepif: vaddr f2a00000, va 0xf2a00200 pa 0xa00043 attr 0x149}݅¬±½-}¥¹¥ҩ No OTG transceiver found
    ————————可见这里直接执行下去了
    ½½ҩ2
    ɽUʑ俧ro.serialno' doesn't exist while expanding '$ro.serialno'
    397296] init: cannot expand '$ro.serialno' while writing to '/sys/class/android_usb/android0/iSerial'
    'ªͥ¹deprecated syntax for specifying property 'ro.product.manufacturer', use ${name} instead
    她property 'ro.product.model', use ${name} instead
    +矰roperty 'sys.powerctl' doesn't exist while expanding '${sys.powerctl}'
    [ 9.636162] init: powerctl: cannot expand '${sys.powerctl}'
    9.734355] init: property 'sys.sysctl.extra_free_kbytes' doesn't exist while expanding '${sys.sysctl.extra_free_kbytes}'
    ̫expand '${sys.sysctl.extra_free_kbytes}' while writing to '/proc/sysm/extra_free_kbytes'

    127|root@kindlemod:/ #

    我的TTL夹子接触不是很好,因此输出的日志有点花,但是基本意思还是能感觉出来。理论上过了那个卡住的位置之后安卓系统马上就开始启动了。但是把镜像恢复到其他板子上时候就是会在那里卡住。
    因此我就卡在这个点上了,不知道为什么Dump出来的镜像恢复到其他的板子上就会卡住,希望懂嵌入式开发的老哥能一起来研究一下。

    建了一个KDroid破解的QQ群:902722433
    希望有能力的来一起研究,希望进来白嫖研究成果的就算了,这玩意一时半会儿应该是研究不出来的。
    目前就想到这么多,再想到啥继续补充。

    回复
    1. Ygjsz Ygjsz
      2021-06-20 21:28

      我去这个评论区没有字数限制欸,,刚才还在想会不会被字数限制挡住的说
      欢迎各路大神一起加入研究

      回复
    2. Ygjsz Ygjsz
      2021-06-20 21:28

      我去这个评论区没有字数限制欸,,刚才还在想会不会被字数限制挡住的说
      欢迎各路大神一起加入研究

      回复
      1. Ygjsz Ygjsz
        2021-06-20 22:01

        另外,原文里提到的kdroid破解教程仅适用于第一版带有jsonclient的系统,然而这版系统早就失传了,后来的系统都改了jsonclient的代码,因此那个文章一点鬼用都没有

        回复
  2. Ygjsz Ygjsz
    2021-04-03 16:13

    最新测试成果
    把激活过的主板的nand内容原封不动写到没激活的主板中,开机仍然弹出激活
    因此可以得出结论 激活信息不存在nand里面,除了nand那么估计就是CPU了
    因此我个人觉得KDroid这玩意目前是无解的
    另:刷老包和移植老包这条路也是行不通的,不同版本的包对应不同版本的uboot,如果新uboot配老包一样不开机

    回复
    1. Ygjsz Ygjsz
      2021-06-20 21:29

      真的不在CPU是在Nand,见最新的评论

      回复
    2. 苏么人 苏么人
      2021-04-10 11:46

      没你想的那么复杂,硬件信息并不在nand上,因此虽然移植了激活设备的系统,但硬件序列号对不上,激活程序检测到的话一样无法使用。欺骗激活检测程序或者屏蔽激活检测代码才可以,还有和cpu有什么关系,基本常识是它只负责运算,并没有存储任何信息

      回复
      1. Ygjsz Ygjsz
        2021-04-12 20:33

        激活信息估计存在imx6sl的OTP fuses区域里面,现在在想办法读取这块里面的信息

        回复
      2. Ygjsz Ygjsz
        2021-04-12 07:03

        那是你不知道kindle的nvram信息是存储在nand上的吗,并且iMX6.SL这个CPU是有一块可读写的区域的,可以在uboot里使用fuse命令来读写

        回复
    3. Ygjsz Ygjsz
      2021-04-03 16:16

      所以,如果真的想破解的话,得有真正的大佬来研究一下kdroid的内核,判断激活状态的代码应该是在内核中,或者得有大佬能查查imx6sl的数据手册看看有没有专门的area存放了激活信息。
      另一条路就是直接基于飞思卡尔和亚马逊放出的源码自己再造轮子重新编译一个安卓出来,不过难度极高

      回复
  3. Ygjsz Ygjsz
    2021-02-28 09:06

    又过了几个月,再来说下研究成果
    很抱歉之前的研究是全部错误的,给那些文件加.bak后缀一点鬼用都没有,在没激活的机器上还是会卡激活或者白屏
    所以我又买了个kindle 499刷了安卓做了下研究
    结果惊奇的发现,激活数据既没有存在/data里,也没有存在/system/recovery里的几个加密的tar.gz里,删除那几个加密包只会丢失系统预装的几个软件和让系统默认语言变成英语而已。
    然后我就懵逼了,这个激活数据到底存在哪里??
    目前已知在2019年的包上激活的,再刷2018年的包不会掉激活
    PS:2019年的包加了系统文件校验,魔改过刷机包的话刷进去100%卡第一屏(factory reset那里)
    pss:我试着魔改2018年的包让其开启网络adb调试,结果失败了,也有可能是我方法不对,开网络adb这个思路我觉得可以一试
    psss:我QQ 2953185601 有兴趣的可以联系我

    回复
    1. Ygjsz Ygjsz
      2021-02-28 22:34

      adb我不太清楚怎么回事,感觉挺奇怪的一点就是,如果系统没激活的话每次开机都会出优化应用

      回复
    2. 2021-02-28 16:47

      你还在研究啊
      有没有试过恢复出厂设置?理论上是存在 /data 的,清除后估计就掉激活了。
      adb是在系统设置里被屏蔽了么?root权限能不能作为一个入口?

      回复
      1. Ygjsz Ygjsz
        2021-02-28 22:33

        我跟你说,激活了之后我ttl里erase mmc之后再刷,激活tmd仍然没掉

        回复
        1. 2021-03-07 14:34

          那激活信息肯定是放在哪个文件了,erase操作对激活文件作了跳过处理。
          我记得odex优化是系统升级(包括重刷重置)才会出现的,没激活时每次开机都双清?
          还有激活码你是怎么弄到的?应该没有用了吧

          回复
          1. Ygjsz Ygjsz
            2021-03-12 13:43

            失效的激活码是我购买的时候商家的服务器卡Bug了,给我发了两次都是无效码
            后来他重启了他的服务器之后发的码才能正常激活

            Odex优化我就真不知道怎么回事了,貌似没激活的时候的确开机就双清,因为记住的Wifi密码重启就丢

    3. Ygjsz Ygjsz
      2021-02-28 11:31

      这个安卓包还有一个妙用
      如果你不小心通过ttl清空了kindle的emmc(ttl里 erase mmc)而导致开机卡大树,则可以打开这个安卓包的刷机工具,选择转换为原生系统即可救活机器

      回复
      1. Ygjsz Ygjsz
        2021-02-28 11:36

        这里再放几个已经失效的激活码
        JEEA EPEV KGMH
        GREG KVLW DLSR

        回复
  4. Misaka Misaka
    2020-12-09 13:57

    大佬您好,我手上有一台KPW3,可以测试,请问方便联系一下吗?

    回复
    1. 2021-01-27 18:57

      楼下大佬有包,你可以问问他

      回复
  5. Ygjsz Ygjsz
    2020-10-06 16:54

    所以博主刷进去了吗

    回复
    1. 2020-10-06 23:55

      设备不在,尝试不来

      回复
      1. Ygjsz Ygjsz
        2020-10-07 01:02

        啊这

        回复