android 发表于 2015-4-5 18:52:08

关于官方recover的签名验证的破解


下面讲如何破解官方recovery签名验证(这个方法应该是通用的,其他手机可以参考,recovery签名验证破解了,也不用费力编译第三方recovery)

1、从官方ROM里提取recovery.img

2、把recovery.img解出来。。。具体方法可以看沙发。。。我单独拎出来。。。。

3、sbin/recovery这个二进制执行文件,拷贝到windowsxp里

4、windowsxp安装ida64plus这个软件,这是个反编译软件,我网盘里有一个试用版,功能有限制,这个版本能反编译,但不能保存数据,所以我找到具体改的地方后,再用UltraEdit软件去改的。如果谁有ida64plus这个软件功能不受限制的,请共享下。。。。好东西不要自己留着哦。。。。。

5、用ida64plus这个软件,打开recovery二进制文件,选择ARM cpu,他自动反汇编出所有函数。

6、反汇编成功后,系统问你是否看图形模式,回答no,进文本模式,然后搜索文本sign,系统会直接找到签名验证出错的那段代码那里



7、仔细阅读那段代码,极其他的前后代码,可以发现,系统验证签名共两次,函数是sub_CCE0,这个函数每次返回值在寄存器R0里面。

看第一个框的代码最后:
BL sub_CCE0               调用签名验证函数
MOV R6, R0                  把返回寄存器R0的值,传输到R6寄存器备用
CBZR0, loc_A7B6      系统判断R0的值,如果是0,就直接跳到loc_A7B6,绿色线
这个可以看出,loc_A7B6其实是跳过了再次验证的地方,图中第二个方框。
如果R0是1的话,就不跳转,顺序继续执行,相当于再次验证签名,也就是第二个框

第二个框中代码的最后:
BL    sub_CCE0      调用签名验证函数
MOVR6, R0   把返回寄存器R0的值,传输到R6寄存器备用
这里没有判断,直接顺序继续执行到第三个框,也就是loc_A7B6

第三个框,也就是loc_A7B6这里:
这个框的代码最后:
CBZ    R6, loc_A7DE   
进入这段代码,是判断R6的值(前面两次验证,都把验证返回值保留在R6里),
如果是0,就跳到loc_A7DE,也就是第四个框方向,这个方向的代码是安装卡刷包,具体请自己往后看。
如果是1,就是最后的红线方向的代码,去那里是显示签名非法,退出程序,那里具体代码请自己往后看。


8、鼠标双点签名验证函数sub_CCE0,软件自动跳到显示这个函数的具体内容,拉到这个函数的最后,
可以看到从多个方向来的代码,在结束这个函数前,分别执行了
MOVSR0, #0   这个在左边的框内
MOVSR0, #1   这个在右边的小框内
由此,我们知道,验证函数的返回值,是通过R0寄存器,也印证了前面的代码。

9、到这里,只要把MOVS R0, #1这个1改成0就可以了,表示即使签名验证失败也返回0(0表示成功)
但我这个试用版ida64plus的软件保存不了,所以,我们先用鼠标点中我们要改的地方,也就是那个1,
然后切换标签点“Hex view”,就可以看到要修改地方的具体地址5160


10、用UltraEdit软件打开recovery,找到5160地址,把1改成0保存就可以了,(如果ida64plus能保存就不用这个软件了)
把改过的recovery拷回recovery.img解包目录,然后打包,就可以用odin软件刷了。。。。。呵呵。

lupinhaung 发表于 2015-4-6 08:29:27

太強大了!感謝高手教學!{:4_86:}

kimel 发表于 2015-4-7 10:23:08

楼主把转载出处贴上啊!!!

不知道了 发表于 2015-6-12 11:43:43

楼住工具在哪里呀

萤火之森 发表于 2015-8-3 13:23:18

页: [1]
查看完整版本: 关于官方recover的签名验证的破解