破解官方Recovery签名机制轻松1改0
提醒:修改方法相对简单,但得到修改方法的过程略微复杂,还涉及到一点点ARM汇编语法知识。感兴趣能折腾的人士可以尝试~仅供参考~
修改方法:
1、把官方recovery备份出来:在fastboot下临时进入第三方recovery,把氢OS给root后,使用Rashr的备份recovery功能进行提取,备份出来的recovery镜像在/sdcard/Rashr/recovery-backups/下面。(或者熟练adb命令的加油可以使用adb shell或者terminal用dd语句直接备份出来,参考语句dd if=/dev/block/platform/msm_sdcc.1/by-name/recovery of=/sdcard/recovery.img)
2、使用ROM大师或者蘑菇ROM均可对recovery.img编辑;
2、使用ROM大师或者蘑菇ROM均可对recovery.img编辑;
3、找到ramdisk里面的sbin文件夹下的二进制recovery文件,这个就是我们要改的文件。
4、使用十六进制编辑器(UltraEdit,WinHex等)修改0005646位置的1为0,然后保存。
5、替换回原来的bin下的二进制recovery文件,使用对应工具重新打包。
6、此时打包好的recovery已经绕过的官方签名认证,即使认证不通过,对应的zip包一样可以刷写~
(官方recovery不支持dummy的updater-script,所以官方supersu不可使用,必须使用修改后的supersu进行root,这里一并提供下载~)
先不要下这个Recovery,8月14日后的氢OS底层有变动 dlhxr_OnePlus_SuperSU_Pro_v2.46_iKiraCN.zip H2OS_stock_re_crack.rar
刷入这个recovery后,每次重启还会被氢OS恢复成官方原装的recovery,想阻止这个过程就刷一下这个zip包~
注意:任何对系统的改动都会导致无法ota哦~
Disable_Recovery_Flash.zip
深层次原理:如何找到二进制文件recovery需要修改的位置
1.获得了二进制recovery文件后,使用进行IDAPro反编译,下载可以自行搜索或者用下面这个链接
链接: https://pan.baidu.com/s/1DtUkWAmxkaOSt8ClKihcAg 提取码: 8674
2.解压后打开idaq64.exe(32位电脑打开idaq.exe),并点击Go
3.打开之前的二进制recovery文件,一路点击ok
4.点击Search for text,输入signiture关键词
5.一般搜索到第一个就差不多定位到相关代码位置了~
6.然后我们再看看R0的值是在哪里赋过来的~跳到把R0赋值到R8的上一个函数那里
7.跳到sub_D384段
8.选中not enough字段点右键然后Graph view
9.发现好多代码块都汇总到了loc_D642,那么就看看这个loc_D642是啥
10.基本确定,这里把1赋值给了R0,导致后面R0赋值给R8,验证R8是否为0,如果不是0就刷机失败
11.那我们直接把这里的#1改成#0即可,位置在0005646,打开WinHex修改,大功告成!
12.刚才看了一下一加二的官方recovery,有几点不同。
(因手上没有二代机器,二代recovery是从xiping3501修改过的re中提取出来看的,希望不要介意哦~)
①关键变量不是R0,而是W0。
②把1赋值给W0的过程并不是一次完成的,而是在8种不同的错误中分别完成的,具体参考下图。