PlayStation4 (CUH-1005A) pOOBs4-Luckfox 모드칩 개조
CUH-1005A 본체 득템 썰
야채마켓에서 작동확인이 되지 않는 플스4 나눔을하길래 냉큼 받아왔다. 나눔 받은 모델은 CUH-1005A 모델로 가장 초기모델인걸로 확인된다.
작동확인을 위해 전원을 넣어봤으나 오랫동안 아무화면이 나오지 않더라. 그래서 아 이래서 나눔한거였구나 싶을때쯤, PS4를 시작할 수 없다는 화면이 나오더라! 일단 화면이 나오고 켜진다는거니깐 왜 시작 할 수 없는지 분해를 진행하였다.
분해하려고 HDD 커버를 벗겼는데, 아니.. 왠걸? 그냥 하드디스크가 안꼽혀있더라... ㅋㅋ
어차피 집에 2.5인치 하드 남아도는데 히타치 500기가 짜리를 일단 꼈다.
그리고 안전모드에서 펌웨어 설치를 진행 중에 가장 마지막으로 설치된 펌웨어 버전이 뜨는데 `9.00` 버전이더라. 즉, HEN (또는 탈옥) 소위 말하는 커펌을 위한 다양한 취약점이 많은 펌웨어, 커펌 최적화 펌웨어가 설치된 개꿀을 나눔 받은것이다.
취약점 선정
현시점에서 플스4 9.00 버전 펌웨어에서 사용가능한 취약점은 USB 메모리의 exfat 파일시스템 취약점을 이용한 pOOBs4 (또는 exfathax), PPP 네트워크 프로토콜 취약점을 이용한 PPPwn 그리고 최근에 Lapse 커널 취약점을 이용한 PSFree-Lapse 총 3가지 선택지가 있다.
각 취약점별로 대응버전과 장단점은 아래와 같다.
1. pOOBs4
대응버전: 9.00 버전까지
장점: 9.00 까지 가장 안정적인 탈옥 방법
단점: 커널 취약점 진입시 USB 메모리를 수동으로 꼽아야하는 불편함이 있음
2. PPPwn
대응버전: 11.00 버전까지
장점: 비교적 최신버전인 11.00 버전까지 가능하므로 구하기 쉬운편
단점: 취약점 성공까지 최대 5분 정도 걸림, 취약점 호스팅을 위한 별도의 서버가 필요하고 이더넷 포트를 점유
3. PSFree-Lapse
대응버전: Lapse 커널 취약점 자체는 12.00 버전까지, 유저랜드 취약점 체인 구동을 위한 웹킷 취약점은 9.00 버전까지
장점: 압도적인 탈옥속도, 5~10초면 완료
단점: 아직 개발중인 방법으로 매우 불안정함
사실 PPPwn 취약점은 펌웨어가 9.00 버전이면 장점이 하나도 없는 취약점이기 때문이므로 선택지에서 배제하였다. 남은건 pOOBs4와 PSFree-Lapse 두가지 선택지이다.
개인적으로 압도적인 탈옥속도와 별도의 사용자 액션이 없이 웹 서버 호스팅만으로도 탈옥이 되는 PSFree-Lapse 취약점을 고려했다. 그리고 아래링크처럼 개인적으로 사용하려고 Luckfox Pico용 펌웨어를 개발하기도 했고...
PS4 HEN 9.00 신규 탈옥방법을 위한 Luckfox Pico/Pro 펌웨어
기존 플스4 9.00 버전 HEN 이용자들에게 반가운 소식이 나왔다. PSFree-Lapse 라는 신규 취약점을 활용한 방법이 나왔기 때문이다. PSFree-Lapse 취약점은 기존 웹킷 취약점을 통해 커널에 접근하도록 하
eletricat.tistory.com
다만, PSFree-Lapse로 탈옥해서 써보니깐 언리얼 기반 게임들은 세이브 파일이 오염되거나 구동자체가 안되는 문제가 좀 있어서 안정화 될때까지는 쓰지말아야할것으로 보인다. PSFree-Lapse 개발자들도 WIP라고 아직 메인으로 쓸것을 권장하지 않는다고.. ㅠㅠ
그럼 남은 선택지는 pOOBs4 취약점 뿐인것이다. 아 근데 탈옥하다가 USB 도중에 꼽는거 너무 귀찮은데... 그렇다고 PPPwn을 쓰자니 속터질것같고...
자작 모드칩 개발 과정
pOOBs4 취약점을 편하게 쓰기 위한 방법을 찾아보니 이미 ESP32 기반으로 와이파이를 통해 취약점 호스팅을 제공하면서 USB 저장소 에뮬레이션을 통해 USB를 꼽았다 빼는것을 구현한 방법이 있더라.
근데 이방법 딱 한가지 마음에 안드는게 와이파이를 쓴다는것.. 와이파이 기반보다 작업하기 귀찮지만 어차피 내 모드칩형태로 내장시켜서 별도의 설정이 필요없는 유선랜이 낫다고 판단했다.
그래서 모드칩 선정을 위해 아래와 같은 조건을 설정했다.
이더넷 인터페이스가 있어야하고, 취약점 호스팅을 제공 할 수 있을만큼의 컴퓨팅 파워가 있어야하며, 모드칩이 작아야한다. 그리고 USB 에뮬레이션이 되어야한다.
사실 라즈베리파이 같은 대부분의 SBC들은 위 기능들을 전부제공하지만 모드칩으로 내장할만큼 작진않다... 그래서 머리속에 떠오른 선택지는 Luckfox Pico Mini 보드다.
문제는 Luckfox Pico에서 UMS 에뮬레이션 즉, USB 저장소 기능을 제공하는 USB Mass Storage 에뮬레이션기능이 제공하냐는것이다. Luckfox 포럼에저 자료를 찾다보니 UMS 기능 자체는 제공하는것 같다.
How to use g_mass_storage/usb_f_mass_storage on luckfox pico? - Luckfox Forums
6 posts Page 1 of 1 Posts: 3 Joined: 2024-07-28 4:11 I want to make luckfox pico to emulate usb mass storage, I have added g_mass_storage and usb_f_mass_storage in the ubuntu kernel configuration but unable load them using modbrobe. Crocodile Engineer Post
forums.luckfox.com
그와중에 글 작성자가 PPPwn-Luckfox를 개발한 harsha-0110이다.. ㅋㅋㅋ 아마 저 개발자도 이걸 만드려고 했던거겠지..
Buildroot 이미지 빌드 후 테스트 해봤는데 UMS, NDIS, ADB 동시에 사용할 수 있는데 UMS 기능은 한번 활성화 하면 비활성화 할 수 없다. 정확히는 호스트에서 eject를 하지 않고 Luckfox 쪽에서 비활성화 하면 커널이 그대로 뻗어버린다. 진짜 말그대로 커널패닉이나 어떠한 메시지 없이 뻗어버린다... 심지어 tty 시리얼을 물려서 로그를봐도 어떠한 메시지가 없다... ㅠㅠ
그래서 다 포기하고 아.. 그냥 ESP32 기반으로 할까... 이걸로 할거였으면 알리에서 USB 형태로 된거 사는게 개조도 편하고 가격도 5천원이면 되는데... 싶을 찰나...
LUN의 파일 경로를 비어두면 soft eject처럼 작동하는것을 확인했다! 즉, USB 장치는 물려있다고 뜨지만 저장소는 잡히지 않는다. 혹시나 soft eject만 되도 pOOBs4 취약점 작동에 문제 없는지 확인해봤고, 아주 잘 작동했다!
pOOBs4 취약점을 자동으로 진행되도록 하기 위해 Luckfox Pico에서 다음과 같이 수행하면된다.
1. /etc/init.d/S50usbdevice 스크립트를 `UMS=on`, `UMS_BLOCK=` 변수값으로 수정 후 rootfs 생성
2. `/sys/kernel/config/usb_gadget/rockchip/functions/mass_storage.0/lun.0/file' 파일에 블록 디바이스 경로를 입력하면 insert
3. 반대로 2번에서 언급한 경로에 비어있는 경로를 입력하면 soft eject
어차피 리눅스 기반으로 만드는거라서 펌웨어 빌드시 DHCP 서버도 넣고, DNS 서버도 넣어서 설정의 유저 가이드 접근하면 자동으로 탈옥 웹페이지로 이동하도록 구성했다!
GitHub - prodeveloper0/pOOBs4-Luckfox: pOOBs4 Exploit for PS4 9.00 Luckfox Mini Porting with USB Mass Storage Emulation
pOOBs4 Exploit for PS4 9.00 Luckfox Mini Porting with USB Mass Storage Emulation - prodeveloper0/pOOBs4-Luckfox
github.com
모드칩 설치
이더넷 포트만 필요한 PSFree-Lapse나 PPPwn 취약점과 달리 pOOBs4 취약점은 USB 저장소도 필요하기 때문에 모드칩 설치를 위해서 이더넷 RX/TX 뿐아니라 USB의 Data 신호도 따와야한다.
이더넷 RX/TX, USB Data 신호 따는거야 워낙 문서가 많으니 쉬운데, USB Data 신호를 따오게 되면 전면 포트 하나는 쓸수가 없다. 정확히는 USB 2.0 기능을 쓸 수 없다. 필자는 이게 싫어서 방법이 없을까 찾아보니 플스4 전면 포트는 USB 3.0 허브에서 나온다는것을 확인했다.
CUH-1005A 콘솔에서는 GL3520 USB 3.0 허브 컨트롤러가 사용되었다. 위 구성도를 보다시피 총 4개의 다운스트림 포트를 제공한다. 근데 플스4는 전면 2개의 USB 3.0 포트와 후면 AUX 단자로 USB 3.0 포트를 제공하고 있기 때문에 나머지 1개의 다운스트림 포트는 사용되지 않을 수 있다는 말이다.
메인보드 컴포넌트 다이어그램을 보면 1개의 다운스트림 포트는 놀고있는게 맞다. 하지만 후면의 AUX 단자는 USB 2.0 신호를 제공하지 않는다. 따라서, USB 2.0 신호만 보면 2개의 다운스트림 포트는 놀고있다.
그래서 직접 메인보드를 현미경으로 보면서 패턴을 추적해봤고, 허브 컨트롤러의 3번과 4번 다운스트림포트만 전면 포트로 사용되고 있다는것을 찾았다. 참고로 GL3520 핀맵에서 DM/DP는 USB 2.0 신호의 D-/D+를 의미한다.
이제 1번이든 2번 다운스트림 포트에서 신호를 따오면되는데, 문제는 소니가 지들도 안쓰다보니 메인보드에서 DM1, DM2, DP1, DP2 신호를 따올만한 솔더 포인트가 없다.........
방법은 핀에서 애나멜선 땜질해서 따오면 되는데, 시도했다가 다리만 붙어서 포기했다... 결국 4번 다운스트림 포트의 USB 2.0 신호를 포기하고 결정했다...
USB 신호를 Luckfox 포트에 연결할때 USB Type-C 커넥터가 필요하다. 그래서 다이소에서 USB A -> C 변환 젠더를 분해해서 직접 만들었으나.... 플스4에서 USB 저장장치로 잡히지 않더라... 이유는 모르겠는데 데이터 신호의 방향이 있는것 같다...
그래서 그냥 얌전히 케이블에 쓰자 해서 다이소에서 산 가장 짧은 흰색 USB Type C 케이블의 피복을 벗겼다. 포트 부분이 깔끔하게 케이싱 되어있어서 맘에들었다. 다만, 포트부분 벗겨낼때 드릴로 깍아서 벗겨낸건 안자랑..
와이어링을 마치고, 실드를 덮는다. 모드칩은 펌웨어 업데이트와 디버깅에 용이하도록 HDD 커버쪽에 부착
최종 테스트를 했더니 40초내로 자동으로 GoldHEN 까지 로드 된다.
오늘 모딩은 끗