Everything is hacked.

There is no 100 % security.

Device/Rabbit r1

Rabbit r1 Recovery

Kai_HT 2025. 2. 6. 10:21

Rabbit r1 CI

r1 이라는 AI 비서가 등장했다해서 궁금하여 24년 4월에 구매를 진행, 6월부터 배송이 시작되어 7월에 전달받게 되었다.

- 해당 디바이스 정보 참고: 

전달받은 rabbit r1 구매 이후 전달된 r1 배송시작 메일

해당 디바이스의 AI 기능이 궁금하였지만, 해당 기기도 안드로이드가 설치되지 않을까 궁금하여 안드로이드 설치가 될까 궁금하여 직접 설치하여 진행해보았다.

- r1 내 Android 설치 참고: 

하지만 필자 본인이 진행을 잘못했는지 설치를 잘못하는 바람에 벽돌 (...)  상태로 만들어버렸다. fastboot 와 커스텀 부트로더가 설치가 되는데, 이때 제대로 된 설치가 되지 않았으나 본인이 기본모드로 재부팅되는 바람에 벽돌로 만든 것으로 판단하였다. 때문에 기기를 구매했겠다, 그래도 재대로 사용해보기 위해 다시 복구해보기로 하였다.

- 해당 디바이스 시스템 업데이트 프로그램: 

해당 글 내 존재하는 system.img 파일이 있어 해당 파일은 안드로이드 파일로 판단되어 본인은 Read me.md 파일을 보고 링크를 다시 찾았다. 본 프로그램의 사용 방법 및 진행 사항은 다음과 같다.

1. OEM Unlocking 활성화
2. Bootloader Unlock - 시스템 내 유저 데이터 모두 삭제됨.
3. AVB 비활성화
4. GMS 와 함께 AOSP-13 시스템으로 초기화됨. (아마 안드로이드 유저디버깅 모드로 설치되는 것으로 보임)
5. Rabbit Hole 탈출 (루팅..? 되는 것으로 보임)

윈도우 설치 법:
1. 해당 기기 접근을 위해 adb 및 fastboot 드라이버가 요구됨.
설치 링크: 
- **Google**: https://developer.android.com/studio/run/win-usb
- **XDA**: https://xdaforums.com/t/official-tool-windows-adb-fastboot-and-drivers-15-seconds-adb-installer-v1-4-3.2588979/
- **Koush**: https://adb.clockworkmod.com

2. 해당 기기의 통신 및 드라이버 로드를 위핸 'MediaTeck Preloader USB VCOM' 드라이버가 요구됨.
설치 링크:
- **Hovatek**: https://www.hovatek.com/forum/thread-16640.html
 - **Teracube**: https://downloads.myteracube.com/Drivers/MediaTek_Preloader_USB_VCOM_Drivers_Setup_Signed.zip 
 - **Some random Mediafire source that worked for me**: https://www.mediafire.com/file/uoko5a2gnn8vwtc/MT65XX-Preloader-drivers.rar

3. 현재 프로세스 진행은 r1의 복구 목적이므로 r1의 system.img,  vendor.img, boot.img 파일을 다운로드 진행함.
- 원본 URL: https://firmburrow.rabbitu.de/rabbitude/dumps/src/commit/a966826ff9d5236d05f1eeae456dae70e2a4ffbc
(2025년 1월 현재 해당 페이지가 죽어 접근이 불가함.)
- 웹 아카이브에 남아있는 데이터: https://web.archive.org/web/20240531231733/https://firmburrow.rabbitu.de/rabbitude/dumps/src/commit/a966826ff9d5236d05f1eeae456dae70e2a4ffbc
(본 페이지에서 system.img 파일 다운로드가 가능함.)

3번에 해당하는 파일에 대한 접근이 불가한 경우 다음 링크 참고.
- Rabbit r1 All Images

rabbit r1 .img files: https://nas.kaiht.kr/share/wtknIvP6

- Rabbit r1 Part Images
rabbit r1 system.img: https://nas.kaiht.kr/share/CzAkzNQ9 
rabbit r1 vendor.img: https://nas.kaiht.kr/share/NCRj3QZD

rabbit r1 boot.img: https://nas.kaiht.kr/share/1UoQDUx5

- Rabbit r1 vbmeta image
rabbit vbmeta.img: https://nas.kaiht.kr/share/RPYwAIB4
(vbmeta.img 의 경우, 복구 시에 사용하지 않지만 혹시 모르니 준비할 것.)

3번에서 다운로드된 파일들은 rabbit r1 escape 폴더 내 풀어준다. (하단 이미지 참고)

위 작성된 내용을 따라갔다면 복구 준비는 모두 끝난 것이다. 

벽돌이되어 정상부팅이 불가하여 대기상태로 배터리를 모두 소모시켜 충전 중인 모습

우선 터미널 창을 열어 압축 해제한 rabbit r1 escape 디렉토리 내에서 터미널 (PowerShell) 을 실행시켜, 명령어 Set-ExecutionPolicy unrestricted 을 입력한다. (터미널은 관리자 권한으로 열어 실행해야한다.)

r1 escape 파일 압축해제
명령어 'Set-ExecutionPolicy unrestricted' 입력

명령 입력 이후 윈도우 설정 내 앱 - 고급 앱 설정 - 앱 실행 별칭 에서 앱 설치 관리자 라고 적혀있으며, 부제로 python.exe, python3.exe 라고 적힌 항목을 비활성화 해준다.

윈도우 설정 내 '앱 실행 별칭' 접근
'앱 설치 관리자' 의 python 실행 비활성화

안드로이드 설치는 본 상태에서 진행하면 되나, 해당 글은 r1 의 복구 목적으로 작성되었기에 복구기준에 맞춰작성하겠다.


#1 Rabbit r1 Recovery

fastboot lock 을 시도하였다면 #2 부터 진행할 것.
- vendor.img, boot.img, system.img 다운로드 이후 #2로 이동 (본 폴더 내 저장)

'r1 escape' 툴 내 작성된 코드를 보면 fastboot 를 이용해 'system.img' 파일만 밀어넣는 것에 대한 확인이 가능하다. 떄문에 해당 방법대로만 진행하게 되면 system.img 파일 이전에 밀어넣는 vbmeta.img 파일로 인하여 초기화 이후 rabbit r1 에서 진행하는 QR코드 인증 단계를 위한 카메라 사용이 불가하여 해당 디바이스의 정상 사용이 불가하다. 그렇기에 추가 파일 - vendor.img 파일과 boot.img 파일이 필요하므로 해당 파일 2개를 본 폴더 내 다운로드 받고 난 이후 코드를 다음과 같이 수정해주어야한다.

- fastboot flash system system.img 파일의 경우, 본인은 테스팅을 위해 주석처리를 하였다. 본래는 같이 설치해주는 것이 맞다.

r1_recover.ps1

python -m venv venv
.\venv\Scripts\Activate.ps1

$repoUrl = "https://github.com/AgentFabulous/mtkclient"
$repoName = [System.IO.Path]::GetFileNameWithoutExtension($repoUrl)
git clone $repoUrl
Set-Location -Path $repoName

Read-Host "[*] Power off the device, press ENTER, and then plug the device in"

python mtk r frp frp.bin --serialport
#python mtk r frp frp.bin --serialport COM5

$currentDir = Get-Location
$frpBinPath = Join-Path -Path $currentDir -ChildPath "frp.bin"
$frpBinBytes = [System.IO.File]::ReadAllBytes($frpBinPath)
if ($frpBinBytes[-1] -eq 0x00) {
    $frpBinBytes[-1] = 0x01
    [System.IO.File]::WriteAllBytes($frpBinPath, $frpBinBytes)
}

Read-Host "[*] Unplug the device, press ENTER, and then plug the device in"

python mtk w frp frp.bin --serialport

Set-Location -Path $PSScriptRoot

Read-Host "[*] Unplug the device, press ENTER, and then plug the device in"

Start-Process -Wait -FilePath python -ArgumentList "mtkbootcmd.py FASTBOOT"

Write-Output "[*] Waiting for fastboot..."

do {
    Start-Sleep -Seconds 1
    $fastbootDevices = fastboot devices
} while (-not $fastbootDevices)

fastboot flashing unlock
fastboot -w
fastboot flash vbmeta vbmeta.img --disable-verity --disable-verification
fastboot reboot-fastboot
fastboot flash vendor vendor.img
fastboot flash boot boot.img
fastboot flash system system.img
fastboot reboot

최하단 2줄 추가 이후, 수정된 파일을 다른 이름 (본인은 r1_recover) 으로 설정하여 저장한 후, 터미널에 접근하여 실행시켜준다.

.\r1_recover.ps1
디바이스 연결 및 엔터요구

해당 코드를 실행시키면 choco 패키지 설치 이후 디바이스의 연결 및 엔터를 요구한다. 전원이 종료된 상태의 r1 을 연결하고 엔터를 입력하면 코드가 진행된다. - 중간에 약 3번 정도 더 요구하니 보고 진행해주자.

r1 연결 시 콘솔 창 메시지

진행하고 나서 디바이스를 확인하면 복구가 완료된다. 

- 본인은 테스트 진행 중 카메라 드라이버 오류 및 벽돌 현상이 발생하여 해결방법을 찾고있다.


#2 Rabbit r1 Recovery

본인의 경우 복구하는 와중 코드 내 'fastboot flashing lock' 을 입력해버려 디바이스 자체가 완전 락이 걸리는 현상이 발생했다. 해당 현상은 Fastboot 를 재잠금을 진행하는 경우 발생하는 문제이며, 해당 사항은 'r1 escape' 의 Readme.md 파일에도 서술되어있었으나 제대로 보지 않고 진행하여 문제가 발생하였다. 이 문제가 발생하는 경우 디바이스 내 이미지를 기존 파일로 완전히 덮어씌워야한다.

- rabbit r1 원본 파일링크:

 

Proton Drive

Securely store, share, and access your important files and photos. Anytime, anywhere.

drive.proton.me

 

File Browser

 

nas.kaiht.kr

 

해당 파일을 다운로드 받고 난 이후 편의를 위해 'r1 escape' 툴이 설치된 폴더 내 압축을 풀어준다.

r1 escape 폴더 내 'r1 backup' 압축해제
'r1 backup' 내 파일 확인

압축해제 이후 파일을 덮어쓸 코드의 수정이 필요하다.

# Function to wait for fastboot device
function Wait-FastbootDevice {
    Write-Output "[*] Waiting for fastboot..."
    do {
        Start-Sleep -Seconds 1
        $fastbootDevices = fastboot devices
    } while (-not $fastbootDevices)
}

# Main script
try {

    # Set up virtual environment
    python -m venv venv
    .\venv\Scripts\Activate.ps1

    # Clone and set up mtkclient
    $repoUrl = "https://github.com/AgentFabulous/mtkclient"
    $repoName = [System.IO.Path]::GetFileNameWithoutExtension($repoUrl)
    git clone $repoUrl
    Set-Location -Path $repoName
    pip install -r requirements.txt

    # FRP operations
    Read-Host "[*] Power off the device, press ENTER, and then plug the device in"
    python mtk r frp frp.bin --serialport
    $frpBinPath = Join-Path -Path $PWD -ChildPath "frp.bin"
    $frpBinBytes = [System.IO.File]::ReadAllBytes($frpBinPath)
    if ($frpBinBytes[-1] -eq 0x00) {
        $frpBinBytes[-1] = 0x01
        [System.IO.File]::WriteAllBytes($frpBinPath, $frpBinBytes)
    }
	python mtk da seccfg unlock
    
    # 'D:\r1\r1 backup' 경로 대신 본인의 rabbit r1 순정 이미지 파일 위치로 수정 필요
	python mtk wl "D:\r1\r1 backup" --serialport

	
    Read-Host "[*] Unplug the device, press ENTER, and then plug the device in"
    python mtk w frp frp.bin --serialport
    Set-Location -Path $PSScriptRoot

    Read-Host "[*] Unplug the device, press ENTER, and then plug the device in"
    Start-Process -Wait -FilePath python -ArgumentList "mtkbootcmd.py FASTBOOT"

    Wait-FastbootDevice

    # Fastboot operations
	fastboot set_active b  # 슬롯 B로 전환
	fastboot flash vbmeta vbmeta.img --disable-verity

	fastboot reboot fastboot  # 부트로더 재시작
    fastboot flashing unlock
    fastboot -w
	fastboot flash system system.img --force
	fastboot flash boot boot.img --force
	fastboot flash vendor vendor.img --force
	fastboot reboot fastboot  # FastbootD 모드 진입

    Wait-FastbootDevice

    fastboot reboot

    Write-Output "[*] Process completed successfully."
}
catch {
    Write-Error "An error occurred: $_"
}
finally {
    deactivate
    Set-Location -Path $PSScriptRoot
}

해당 코드는 필자 본인이 필요 없는 함수 및 해당 함수 실행 구간을 주석처리하였으며, 해당되는 구간의 코드를 삭제하여 업로드 한 것이다. 해당 코드를 완전히 복사 및 붙여넣기하여 실행하면 당연히 복구과정이 실행되지 않으며, 다음 구간에 대한 수정이 요구된다.

주석에도 필자가 작성해두었지만, ' python mtk wl "D:\r1\r1 backup" --serialport ' 코드에서 'D:\r1\r1 backup' 의 경우 필자가 압축해제한 rabbit r1 순정 이미지 파일의 디렉토리 주소 명이므로 압축해제가 완료된 디렉토리 주소 명으로 수정이 필요하다.

본 코드 수정 이후, 관리자 권한으로 터미널 실행 후, 해당 코드를 실행하면 복구 절차가 진행된다.

※ 해당 과정이 순정 이미지 파일로 디바이스 내 덮어씌우는 작업이라 완료되기까지 몇날 며칠이 걸릴 수 있다. 필자는 약 3일정도의 시간이 소요되었다.

수정된 코드 파일 실행
복구 절차 중 1차 재연결 요구 구간
1차 재연결 이후 frp 파티션 Rewrite 구간

순정 이미지를 덮어씌우는 와중 'DeviceClass - Warning !' 문구가 뜬다면 복구 와중 오류가 생긴 것이므로 코드가 실행중인 PC와 연결된 상태로 r1 의 전원버튼을 10초이상 누르면 장치가 자동 재부팅 되면서 mtk 드라이버가 자동으로 연결이 수행된다. 10초 이상 눌렀는대도 불구하고 제대로 연결되지 않는다면 USIM 트레이를 열어 입구 모서리에 존재하는 버튼을 10초이상 꾹 눌러주자 (해당 버튼은 강제 재부팅 버튼으로 보인다.)

필자 본인은 약 4번 정도의 재연결 과정을 거쳐 복구를 끝냈다. 마지막 복구과정 진행 이후 화면은 다음과 같다.

순정 이미지 복구 실행 이후 마지막 콘솔창 화면

해당 상태에서 디바이스 확인 시, 본 기기의 상태가 초기화되어 초기 세팅 로직구간이 수행이 가능한 것을 확인할 수 있고, 카메라도 정상작동이 가능하다.

rabbit r1 정상 수행 완료 모습

P.s) rabbit r1 순정롬 롤백 직후 업데이트가 수행되는데, 이때는 PC에 연결하지 않고 충전기를 연결하여 오류 없이 업데이트가 될 수 있도록 하자.