步骤简述
1.解包recovery.img,
2.反编译/sbin/recovery,用ida64plus
3.在反编译出来的文本中查找:signature

破解官方recovery的签名验证-LMLPHP

4.简单的看一下指令流程,CBZ下面是failed提示,则说明不能跳转指令为签名验证失败,把CBZ指令改为相反的CBNZ指令,
当然这里不能直接改,要转到二进制窗口查看,CBZ包含在B1中(根据指令结构,B1不一定完全表示CBZ机器码,这个可以不深究),

破解官方recovery的签名验证-LMLPHP

查找一下CBNZ指令,大部分都对应16进制:B9,所以把 1改为9,
(另外还有遇到BEQ改为BNE)

破解官方recovery的签名验证-LMLPHP

应用,

破解官方recovery的签名验证-LMLPHP

再看签名验证处的指令解析,已经CBZ已经变成CBNZ,

破解官方recovery的签名验证-LMLPHP

这样的话签名验证失败,反而会执行后面的刷机操作
5.ida似乎不支持修改后保存,所以用UltraEdit搜索周围的16进制关键字,

破解官方recovery的签名验证-LMLPHP

破解官方recovery的签名验证-LMLPHP

修改B1->B9(其他机器我不知道是不是也是B1,B9)

5.替换原来的recovery,打包回去recovery.img。

04-27 01:07