스위치 커펌 부팅을 위한 TegraRcmGUI와 Payload 주입 방법

스위치 구형을 기준으로 커스텀 펌웨어는 RCM 모드(리커버리 모드)를 통해 매번 부팅시마다 payload(페이로드) 주입 과정을 거쳐 부팅해야만 사용이 가능한 일종의 휘발성 커펌입니다.

대표적으로 이와 유사한 시리즈라면 과거 황혼기 PSP 1세대 계통이나 요즘의 PS4 헨카쿠 등을 떠올리면 쉽게 이해가 되실겁니다.

사실 지금도 유효하지만 과거에는 페이로드 파일을 TegraRcmSmash.exe 실행 파일 위에 직접 드래그 앤 드랍하는 형태로 불편하게 사용을 했던 시절이 있었습니다.

이후 라는 개발자가 유저 인터페이스를 더해 더욱 사용하기 쉽게 개선해 준 편리한 버전이 TegraRcmGUI 입니다.

꾸준히 유지보수하고 있는 구형 커펌 스위치의 대표 프로그램인 TegraRcmGUI 의 사용법에 대해 알아보겠습니다.

💡
CFW가 설치된 스위치는 사용 중에 기기가 방전되거나 전원 종료 후 RCM 모드 없이 기기를 켜게 되면 별다른 설정이나 모드칩이 설치된게 아닌 이상 순정인 정식 펌웨어로 부팅되는 구조를 가지고 있습니다.

페이로드 주입이란?

1. 테그라 X1은 스냅드래곤과 같은 일종의 ARM 기반의 SOC 칩이며 이 칩에는 부트롬(bootROM)이란 것이 있습니다.

일반적으로 직접 사용자가 손댈 수 없는 영역이지만, 이를 보호하는 운영 체계를 RCM 모드와 같은 USB 복구 모드로 회피할 수 있습니다.

2. 스위치에 페이로드를 최대 65,535 바이트를 요청하도록 강제하게 되면, 이를 통해 데이터가 부트롬 내 치명적인 직접 메모리 접근(DMA) 버퍼로 오버플로우오류가 발생합니다.

3. 위처럼 일부러 오류를 발생시키면 데이터가 보호가 된 애플리케이션 스택으로 메모리 내용이 복제되며, 이후 사용자는 임의의 코드를 실행시킬 수 있는 상태가 됩니다.

위와 같은 과정을 통해 CFW 와 같은 사용자 기능들을 추가로 수행할 수 있게 되는 환경이 만들어집니다.

1. TegraRcmGUI 다운로드

Releases · eliboa/TegraRcmGUI
C++ GUI for TegraRcmSmash (Fusée Gelée exploit for Nintendo Switch) - eliboa/TegraRcmGUI

앞서 CFW 부팅을 위해 반드시 페이로드 주입이라는 과정이 필요한 것을 이해하셨으리라 믿습니다.

이제 PC 에서 USB 케이블을 통해 페이로드를 주입하기 위해서 우리는 TegraRcmGUI 프로그램이 필요하게 되었습니다.

위 링크의 Github(깃허브)에서 직접 다운로드 받아 보도록 하겠습니다.

TegraRcmGUI 깃허브에서 아래쪽에 Assets 항목을 보면 설치형과 포터블 버전중에 선택해서 다운로드가 가능합니다.

.msi 타입의 설치 버전이 편리한 점도 있지만 애초에 설치 조차 필요 없는 간단한 Portable(포터블) 버전을 다운로드 받도록 하겠습니다.

바탕화면이나 사용하기 좋은 위치에 다운로드 받은 파일의 압축을 풀어주세요.

다음은 폴더 내에 TegraRcmGUI.exe 파일을 실행해줍니다.

위처럼 세개의 탭 메뉴를 제공하고 있는 TegraRcmGUI 가 실행되었습니다.

물론 바로 사용할 수는 없고 PC와 스위치를 연결해줄 USB 드라이버 설치가 필요합니다.

2. APX 드라이버 설치

TegraRcmGUI 프로그램을 통해 PC에서 스위치로 페이로드 파일을 보내야만 합니다.

스위치와의 PC 간에 데이터 전송을 위해 USB 연결이 가능한 상황을 만들어 주셔야 합니다.

이를 위해서 기본적으로 윈도우에는 포함되지 않은 APX 드라이버라는 것의 설치가 필요한데, 다행히도 TegraRcmGUI를 통해 쉽게 설치가 가능합니다.

(1) 상단의 탭 메뉴 중 세번째 Settings를 눌러줍니다.
(2) 하단의 Install Driver 버튼을 눌러줍니다.
팝업 창이 나타나면, 예(Y)를 눌러서 드라이버를 설치합니다.

위 사진처럼 새로운 장치 드라이버 설치 마법사 창이 나타납니다.

연달아서 다음 버튼을 누르다 보면 위처럼 libusbK 드라이버가 설치 완료되고 추가로 사용할 수 있음 이란 메세지가 나타납니다.

스위치의 PC 연결을 위한 APX 드라이버의 설치가 모두 완료 되었습니다.

그리고 만약 APX 드라이버를 설치하지 않고 스위치를 RCM 모드로 연결한 경우 자동으로 드라이버 설치를 진행하게 되니 참고하세요.

마침을 눌러 창을 닫아주시고 다시 첫번째 탭인 Payload(페이로드)로 돌아가겠습니다.

3. TegraRcmGUI를 이용한 Payload(페이로드) 파일의 주입

첫번째 탭인 Payload 탭의 Select payload 문구의 우측으로 보시면 폴더 모양의 아이콘을 눌러 CFW 실행을 위한 페이로드 파일을 선택할 수 있습니다.

이제 페이로드 파일은 무엇이며, 어떤 파일을 선택해야 하나 고민스러워집니다.

스위치의 대표 커스텀 펌웨어인 Atmosphere(아트모스피어) 기준으로 보면 fusee.bin 파일이며 Hekate(헤카테)의 경우에도 hekate_ctcaer_XXX.bin 등의 .bin 으로 끝나는 확장자를 가진 파일이 존재하며 이를 통칭 페이로드라고 부릅니다.

위 사진처럼 CFW 올인원들의 bootloader(헤카테)payloads 폴더 구성을 보자면 키파일 추출에 필수적인 Lockpick_RCM 등도 일종의 대표적인 페이로드로 볼 수 있겠습니다.

따라서 스위치의 정식 기능이 아닌 RCM 모드에서 주입하는 모든 페이로드들은 CFW로 떠나는 문을 여는 일종의 입장권이라고 할 수 있습니다.

용도에 따라 다양한 종류의 페이로드가 존재하기 때문에 현재 사용하고자 하는 상황에 맞는 페이로드를 주입해야만 합니다.

블로그에서도 주로 다루었던 우크라이나 개발자의 CFW 올인원인 KEFIR 기준으로 CFW 부팅을 위해 페이로드가 필요한 상황의 예를 들어 보겠습니다.

현재 SD 카드 내에는 payload.bin이라는 파일이 보입니다.

ASAP 도 동일하게 SD카드엔 payload.bin 이라는 파일이 존재합니다.

CFW로 부팅하기 위한 페이로드 파일은 통상 관례적으로 어떤 CFW 올인원이든 일반적으로 payload.bin 이라는 이름입니다.

본인의 SD 카드에서 위 파일을 찾아서 선택하고 열기를 눌러주세요.

페이로드 파일이 선택되어 주입(Inject)할 준비가 모두 완료되었습니다.

TegraRcmGUI를 켜둔 채로 다음은 스위치를 연결하도록 하겠습니다.

먼저 PC에 USB C타입 데이터 통신이 가능한 케이블을 연결해둡니다.

다음은 스위치에 RCM JIG(지그)를 우측 조이콘 대신 장착하면 복구모드인 RCM 모드로 진입이 가능합니다.

우측 조이콘을 분리하고 RCM 지그를 장착하도록 하겠습니다.

지그의 클립 끝에 달린 작은 핀 두개로 우측 조이콘 레일 단자에 일종의 쇼트를 내주는 역할을 하기 때문에 전기가 통할 정도로 살짝 접촉만 되어 있으면 됩니다.

간혹 지그가 불량인 경우 접촉이 잘 되지 않기도 하는데, 이쑤시개 같은 얇은 물건으로 지그의 핀을 살짝 위로 들어주셔서 잘 닿도록 만들어주시면 해결됩니다.

RCM 모드로의 진입 방법은 (2) 볼륨 + 버튼을 누르고 있는 채로 (1) 전원 버튼을 약 1초정도 살짝 눌러주면 간단하게 진입이 가능합니다.

다만 기기에 눈에 띄는 변화가 생기진 않고 마치 여전히 꺼져있는 것과 같은 상태로 보이기 때문에 진입 성공 여부는 실제로 PC에 연결해서 확인할 수 있습니다.

위 사진처럼 진입에 성공했는지 외관만 보면 전혀 알 수가 없습니다.

스위치를 PC와 USB 케이블로 연결하도록 하겠습니다.

이번엔 PC에서 TegraRcmGUI 프로그램 하단 스위치 이미지 안에 RCM O.K 라는 문구가 새롭게 나타납니다.

또한 작업 표시줄 하단의 아이콘이 붉은 색에서 녹색으로 변경되는 것으로도 확인이 되는데, 우측처럼 녹색으로 연결되면 정상적으로 RCM 모드에 진입한 상태입니다.

💡
실수로 진입에 실패하는 경우 전원을 끄고 다시 한번 볼륨키와 전원키를 통해 위 연결 과정을 진행합니다.

RCM 모드로 스위치가 연결되면 TegraRcmGUIInject payload(페이로드 주입) 버튼을 눌러 스위치로 페이로드를 전송할 수 있습니다.

모래시계 아이콘이 주황색으로 변경되며 페이로드가 전송되는데 보통 약 1초정도 소요됩니다.

다음은 PC에서 갑자기 스위치 이미지가 NO RCM 상태로 바뀌면서 아래 Log에는 "Payload successfully injected" 문구가 나오게 되니 위 사진처럼 이렇게 진행되면 페이로드 주입은 모두 성공입니다.

지금까지 페이로드 주입 과정을 진행해 보았는데, 처음이 어렵지 한두번 하다보면 페이로드 주입은 도사가 되실겁니다.

SD 카드에 미리 넣어둔 파일에 문제만 없다면, 여러분이 원하시는 CFW로 PC를 통해 부팅이 가능하게 되었습니다.

그러나 어떻게 보면 다소 복잡하고 반드시 윈도우 기반의 PC가 필요한 불편함이 있습니다.

특히 외부에서 구동중인 스위치의 배터리 부족으로 전원이 꺼지거나 하면 CFW 로 다시 부팅하기 어렵기 때문에 골치가 아픈 상황도 펼쳐지게 됩니다.

💡
물론 맥과 리눅스용 TegraRcmSmash 방법도 있습니다.

이러한 수요 때문에 PC 없이 페이로드를 주입하기 위한 노력들이 있었는데, 이 계통의 원조는 SX Pro 라는 SX OS의 휴대용 동글입니다.

여전히 지금도 사용 가능한 꽤나 훌륭한 장치로 지금의 RCM Loader(RCM 로더) 라는 일종의 휴대용 주입기들이 만들어지는 배경이 되었습니다.

이후 안드로이드 스마트폰을 이용해서 페이로드 주입이 가능한 Rekado 같은 앱이 등장하는 것은 시간 문제였다고 할 수 있습니다.

도움이 되시길 바랍니다.

감사합니다.