01 / 적용 대상
어떤 경우에 필요한가
이 절차는 GhostLock(CVE-2026-43499) 취약점으로 재부팅하면 사라지는 임시 root, 즉 탈옥 상태를 만든 뒤 잘못된 OCDT를 교체하는 방식이다. 아래 두 상황에 해당하지 않는다면 진행하지 않는 편이 안전하다.
펌웨어 변환 후 OCDT를 변환하지 않아 펜 인식이 되지 않는 경우
OCDT도 변환해 펜 인식은 되지만 부트로더 접근이 되지 않는 경우
B의 경우에는 이전에 본인이 백업해 둔 원래 OCDT가 필요하다. 백업이 없다면 부트로더 접근 불가 문제를 이 방식으로 되돌릴 수 없다. 인터넷에 올라온 다른 사람의 OCDT를 그대로 쓰는 것은 의미가 없다.
이 글의 GhostLock 실행은 OxygenOS 16.0.9.400에서 확인했다. 더 높은 버전에서 같은 취약점이 계속 동작한다고 보장할 수 없다.
02 / 준비
KernelSU 앱과 ADB 준비
기기에는 KernelSU APK를 먼저 설치한다. GhostLock 실행이 끝날 때 waiting for su...에서 멈춰 있으면
KernelSU 앱에서 Shell에 root 권한을 부여해야 한다.
Windows에 Platform Tools 설치
Windows 터미널 또는 명령 프롬프트를 관리자 권한으로 열고 실행한다.
winget install --id Google.PlatformTools
설치가 끝나면 터미널 창을 완전히 닫았다가 다시 연다. 그래야 새 PATH가 반영된다.
PS C:\> winget install --id Google.PlatformTools
찾음 Google Platform Tools [Google.PlatformTools]
패키지를 설치하는 중...
설치 완료
이제 새 터미널 창에서 adb와 fastboot 명령을 사용할 수 있다.
03 / GhostLock
GhostLock 바이너리 다운로드 후 실행
GhostLock 다운로드 버튼으로 ghostlock 바이너리를 받는다. 다운로드한 파일이 있는 폴더에서
터미널을 열고 아래 명령을 순서대로 실행한다.
adb push ghostlock /data/local/tmp/a/e
adb shell chmod 755 /data/local/tmp/a/e
adb shell /data/local/tmp/a/e
waiting for su...에서 멈춘 경우에는 KernelSU 앱을 열고 Shell 항목에 root 권한을 부여한다.
[*] kernel: 6.6.118-android15-8-g2e6b9c3812c5-ab15114928-4k
[+] offsets matched: 6.6.118-android15-8-g2e6b9c3812c5-ab15114928-4k
[+] SELinux DISABLED
[*] child uid = 0
[+] child is root!
[+] root shell pid=11604 uid=0
[*] waiting for su...
KernelSU 앱 실행 후 Shell에 ROOT 권한 부여
[+] su ready, fixing SELinux policy
[+] load_policy done
위의 핵심 줄이 보이면 GhostLock 실행이 끝난 상태다.
04 / 백업
필요한 경우 현재 OCDT를 추출
A의 사례이고 기존 OCDT 백업이 없다면 현재 기기에서 OCDT를 먼저 추출한다. B의 사례라면 이 단계로는 문제를 해결할 수 없으므로, 예전에 백업해 둔 OCDT 파일을 사용해야 한다.
adb shell su -c dd if=/dev/block/bootdevice/by-name/ocdt of=/sdcard/ocdt.img
adb pull /sdcard/ocdt.img
C:\> adb shell su -c dd if=/dev/block/bootdevice/by-name/ocdt of=/sdcard/ocdt.img
256+0 records in
256+0 records out
131072 bytes (128 K) copied, 0.006 s, 21 M/s
C:\> adb pull /sdcard/ocdt.img
/sdcard/ocdt.img: 1 file pulled, 0 skipped. 17.0 MB/s (131072 bytes in 0.007s)
C:\>
PC에 ocdt.img가 복사되었는지 확인한다. 파일 크기가 128KB가 아니거나 dd가 실패했다면
다음 단계로 넘어가지 않는다.
05 / 수정
OCDT를 수정하고 다시 쓰기
헥스 에디터는 hexed.it을 사용하면 된다. 백업해 둔 ocdt.img를 열고,
지정된 바이트를 수정한다. OnePlus Pad 2 Pro 기준으로는
93 62 B3를 7F 8E 5F로 바꾼다. OPPO Pad 4 Pro는 값이 다를 수 있지만 수정 위치는 동일할 가능성이 크다.
93 62 B3
7F 8E 5F
수정해서 저장한 파일은 ocdt_new.img로 이름을 바꾸고, 기존 ocdt.img와 같은 폴더에 둔다.
그 다음 아래 명령으로 기기에 복사하고 OCDT 파티션에 쓴다.
adb push ocdt_new.img /sdcard/
adb shell su -c dd if=/sdcard/ocdt_new.img of=/dev/block/bootdevice/by-name/ocdt
adb shell su -c reboot
C:\> adb push ocdt_new.img /sdcard/
ocdt_new.img: 1 file pushed
C:\> adb shell su -c dd if=/sdcard/ocdt_new.img of=/dev/block/bootdevice/by-name/ocdt
256+0 records in
256+0 records out
131072 bytes copied
C:\> adb shell su -c reboot
records out과 복사된 바이트 수가 보이면 쓰기 명령이 완료된 것이다.
06 / 확인
재부팅 후 펜 페어링 확인
재부팅이 끝나면 OnePlus Pad 3에서 펜 페어링이 정상적으로 되는지 확인한다. nRF Connect로 강제 연결해서 쓰고 있었다면 기존 Bluetooth 연결을 삭제한 뒤 다시 페어링해야 할 수 있다.
의도대로 복구가 완료됐다면, 재부팅을 수행하면서 이미 탈옥은 풀린 상태이므로 KernelSU 앱은 설치 제거해도 된다.