h4ckm310n 发表于 2022-9-28 17:39

Mac环境下利用Python解锁Vivo的BL锁

月初我就在别的平台发过了,在这里也分享一下。

前言
由于Vivo的骚操作,我们无法直接使用命令来解锁。Vivo的解锁命令为,但是安卓官方的fastboot并不会识别这个命令,而是直接当作unknown command:


因此需要在fastboot的代码中添加一条else if条件并调用do_oem_command函数:


XDA上也有大神编译了修改版(例如https://forum.xda-developers.com/t/how-to-unlock-bootloader-of-vivo-phones.3686690/)。然而网上似乎并没有找到适用于MacOS的修改版fastboot的可执行文件,由于硬盘容量有限,本人也未能自行编译fastboot。受限于此,本人通过对fastboot进行usb抓包分析,并使用pyusb模拟fastboot对手机发包,来实现同等效果。我的型号是Vivo Y31S高通版,其他型号也可以作为参考。该方案并非官方方案,解锁有风险,操作前记得先备份好数据。

USB抓包
在抓包之前,首先需要重启进入恢复模式,在终端输入关闭SIP。重启之后,在终端输入查看接口列表:


这里我连接手机使用的usb接口对应的是XHC1,所以接着在终端输入来开启接口。手机关机后长按电源键+音量+键进入fastboot模式。

接着打开Wireshark,选择XHC1开始抓包。如果是通过hub来连接手机的,需要在系统报告中找到对应的接口的位置ID,然后在filter中用来过滤出手机的包,例如。


例如,打开fastboot对手机发一个,可以得到如下几个包:


可以观察到,当发送一个命令的时候,首先会给in和out两个端点分别发送一个clear halt的请求,再通过out端点向手机发一个bulk包,最后从in端点从手机接收一个bulk包。





这里仅以发送命令为例,别的操作就不一一展示了。总之,抓取了这些usb包之后,就可以根据它们来写代码复现。

Python复现
首先安装libusb和pyusb:
brew install libusb
brew install libusb-compat
pip3 install pyusb

完整代码放在了https://github.com/h4ckm310n/Unlock-Vivo,这里主要说说几个步骤。

首先是初始化,根据厂商和产品ID找到对应的设备,并且对接口进行claim操作。网上看到的代码好像都没写claim这一步,但是我如果不写这一步的话,在发包的时候就会找不到端点,不知道这是不是Mac的问题,我在这里纠结了很久,最后慢慢摸索出来的。同样,在结束运行之后,也需要对接口调用release操作。


在发包之前,还要先对两个端点进行clear halt操作:


后面的刷vendor和解锁操作都是通过这个函数发送bulk包:


我之前也没搞懂vendor.img是哪来的,后来我发现这个文件的内容就只是一堆0而已,所以可以自己生成。3个getvar命令似乎没啥必要,不过我还是一并复现了,没试过去掉有没有影响。在发送vendor数据本身之前,需要先发一个download命令,后面接的是vendor的数据大小。


至于刷vendor有什么用,我也没搞懂,虽然刷不进去,但在这之后再解锁就不会出现签名错误的问题了。解锁和锁定差不多,都是发送一个命令,只不过在解锁之前要先刷一遍vendor。


运行的输出结果如下:


重启手机,可以看到解锁后的提示,以及清除数据的要求。

sdieedu 发表于 2023-2-24 11:04

花红沁人心 发表于 2023-2-21 11:40
sudo python3 Downloads/unlock_vivo.py

Power off your phone, then press and hold Power + Volume Up ...
windows 如何找到产品id 和序列号连个数值?

最新的解锁指令还是作者提供的吗?????
是不是又变了。。。。fastboot vivo_bsp unlock_vivo

花红沁人心 发表于 2023-2-21 11:40

sudo python3 Downloads/unlock_vivo.py

Power off your phone, then press and hold Power + Volume Up to enter Fastboot mode
If your phone is already in Fastboot, press Enter to continue:
Available Operations:
1: Unlock
2: Lock
Init phone: finished
Select an operation:1
Clear halt: finished
Received from device: FAILGetVar Variable Not found
Received from device: OKAY805306368
Received from device: FAILGetVar Variable Not found
Received from device: DATA400
Received from device: OKAY
Received from device: FAILunknown command
Flash vendor: finished
Received from device: FAIL check Signature Fail
Unlock: finished


请教报这个是什么问题?

lgllin 发表于 2022-9-29 12:43

感谢分享有可能会入VIVO手机先收藏

xixicoco 发表于 2022-9-29 12:57

牛逼的操作

hipojie 发表于 2022-9-29 13:22

厉害了,牛逼{:1_921:}{:1_921:}

Zkite 发表于 2022-9-29 20:27

谢谢分享

maddock 发表于 2022-9-29 23:08

华为手机也能同样么

Sh1ZAnG 发表于 2022-9-29 23:48

vivo也能解bl?

ijack2001 发表于 2022-9-29 23:58

BL 都破解到 厉害

tek2y 发表于 2022-9-30 01:54

牛逼,摩拜一下

sdieedu 发表于 2022-9-30 07:09

vivo解锁。。。。。厉害👍🏻
页: [1] 2 3
查看完整版本: Mac环境下利用Python解锁Vivo的BL锁