前言
本篇文章需要你有一定的IDA基础,嗯,没有也行。只要你能装个IDA,能正常打开,安装了keypatch插件,跟着文章一步步走也是能成功的。
这篇文章对比Tomking CVE那个仓库的Releases中的脚本少了exec_addr这一步,也就是没有覆盖BootROM签名校验这一步,这得益于XF的学生机的BootROM对于Splloader没有校验,所以就算是省了点事。
大部分的品牌的机器解锁BootLoader会连带着解锁AVB(Android Verified Boot),但是我们的紫光不会,就挺恶心人的……所以说你看完整篇教程,你能不需要签名自由刷写的分区只有System、Vendor,如果你需要刷写其他分区,比如Boot,那你需要解锁AVB:XF学生机如何解锁AVB。
本篇文章的作者在这方面是一个十足的小白,如有错误请尽快指出,万分感谢!
提取平板的Splloader、U-Boot和Miscdata分区
没啥好说的,进FDL2,r splloader、r uboot、r miscdata就行,如果你不会这一步,我劝你最好还是退出这篇文章,别看了。
为什么要备份miscdata呢,因为存储状态储存在miscdata分区,uboot的set_lock_status函数就是看的这里来判断锁定状态。所以说,如果你以后想锁回去了,那就刷回解锁前备份的miscdata、uboot就可以了,splloader刷不刷都行。
修改Splloader
打开IDA Pro,它会先弹出这个窗口,版本号可能不一样,我用的是9.2:

随后便会来到这里:

我们点击New,然后选择你备份的splloader.bin,如图所示:

点击打开后它会弹出这个窗口:

我们往上翻,找到ARM Little-endian,点击它:

然后点击OK,弹出提示选择Yes,会弹出这个窗口:

这里我们把ROM start address和Loading address改成0x5500,如图所示:

然后点击OK,弹出提示选择Yes,它便开始加载,中途提示全选OK就行了,直到它下方的Output出现The initial autoanalysis has been finished.:

就证明已经加载完了,这时我们按下Shift+F12,会出现字符串列表:

然后再按下Ctrl+F,下方就出现了搜索框:

然后我们输入uboot,按下回车,会发现搜索出了uboot和uboot_back:

我们点击两下那个黄色高亮的uboot,跳转到文本模式的汇编代码窗口:

然后我们点击两下后面的这个函数(不同机子splloader的函数名是不一样的,点击指定位置就行,不要死磕),如图所示:

然后会跳转到图形模式的汇编代码窗口:

然后我们按下F5,转成伪代码:

然后我们看下面那个if块,点击两下我指的位置的函数(不同机子splloader的函数名是不一样的,点击指定位置就行,不要死磕),如图所示:

然后跳转到这个函数的伪代码:

然后点击两下我圈出的位置的函数(不同机子splloader的函数名是不一样的,点击指定位置就行,不要死磕),如图所示:

然后跳转到这里:

点击一下我圈的位置的那个函数(不同机子splloader的函数名是不一样的,点击指定位置就行,不要死磕),如图所示:

按下Tab,跳转到图形模式的汇编代码窗口:

点击我圈出来的这一行,如图所示:

然后按下Ctrl+Alt+K,弹出一个窗口:

然后在Assembly输入MOV W0, #0,让它强制返回0,即验证成功,如图所示:

然后点击Patch,它会再次弹出一个这样的窗口,我们点击Cancel,这时候你会发现那一行后面带了这些东西:
; Keypatch modified this from:
; STP X29, X30, [SP,#var_60]!
就像这样:

这是为了让你知道修改前的指令,代表已经修改完成,不必在意,属正常现象。
然后点击改过的那一行的下一行,按下Ctrl+Alt+K,还是会出现那个窗口,然后Assembly输入RET,如图所示:

点击Patch,还是会再次弹出一个这样的窗口,也是点击Cancel,如果这一行后面也出现刚刚那些东西,那就是修改完成了,如图所示:

最后我们保存修改到新文件,点击我框出来的按钮,如图所示:

然后点击Patch program,点击Apply patches to input file…,弹出一个窗口:

勾选上下面的Create backup,如图所示:

然后点击OK。这样,我们的splloader就改完了,修改输入到了splloader.bin,而splloader.bin.bak是原镜像的备份,也就是没有被修改过的。
最后我们关闭IDA Pro,会弹出来一个窗口,就像这样:

如果你想留着你的工程文件,方便下次看改了哪里,那就直接点OK,如果你不想留着,那就点击DONT SAVE the database。
修改U-Boot
还是一样的操作,打开IDA Pro,打开你备份的uboot.bin,选择ARM Little-endian,这里的ROM start address和Loading addres是0x9efffe00,如图所示:

还是点击OK,还是点击YES,还是等待它加载完成,还是按下Shift+F12,还是按下Ctrl+F,这里我们搜索VerifiedBoot-UNLOCK:

还是点击这个结果两下,跳转到文本模式的汇编代码窗口:

然后点击两下圈出来的位置(不同机子uboot的函数名是不一样的,点击指定位置就行,不要死磕),如图所示:

然后就会跳转到图形模式的汇编代码窗口,这时我们按下空格,往下翻,找到这里:

点击一下我圈出来的这一行,如图所示:

还是按下Ctrl+Alt+K,还是会出现那个窗口,然后Assembly中把CBZ W0,改为B,让它永远都走成功分支,如图所示:

点击Patch,还是会再次弹出一个这样的窗口,也是点击Cancel,如果这一行后面也出现刚刚那些东西,那就是修改完成了,就像这样:

还是保存修改到新文件,还是关闭IDA Pro。这样,uboot也就改完了,修改输入到了uboot.bin,而uboot.bin.bak是原镜像的备份,也就是没有被修改过的。
刷入Splloader、U-Boot(解锁BootLoader)
也没啥好说的,进入FDL2,w splloader 你修改的splloader.bin和w uboot 你修改的uboot.bin就行,重启应该就能看到解锁提示了。
机器死了怎么救
小白改起来当然会有一点点问题,但是这一点小问题足以导致机器死掉(砖了),这时候,我们长按音量键+电源键15秒,然后立即插入电源线,这个长按15秒强制重启是不经过系统的,一定能成功,加上音量-和电源线就能进入BootROM,但请注意,插慢了设备标识符请求失败,插快了U2S就是残废。但是也没什么大不了的,重新来一遍就好了嘛……
怎么回锁BootLoader
刷回解锁前备份的miscdata和uboot即可。
发表回复