Just a Blog

[펌웨어 해킹] (Youtube) '게임 & 워치 슈퍼 마리오 브라더스' 하드웨어 펌웨어 해킹 기술 영상 본문

IT, Computer

[펌웨어 해킹] (Youtube) '게임 & 워치 슈퍼 마리오 브라더스' 하드웨어 펌웨어 해킹 기술 영상

wehong 2020. 11. 21. 16:18

최근에 나와서 직접 구매하기도 했던 '게임 & 워치 슈퍼 마리오 브라더스' 기기를 전문가가 해킹하는 동영상이 유투브에 공개되었다.

불법적으로 사용하기 위한 해킹이 아니라 기술적 호기심에 대한 접근이며, 특히 하드웨어 펌웨어를 해킹하는 방식에 대한 괜찮은 기술 레퍼런스로 보인다.

공유기든 게임기든 현재의 기기 해킹은 이와 비슷한 방식으로 이루어지는 것으로 알고 있는데, 내용에도 나오는 것 처럼 이를 방지하기 위한 칩 레벨의 방어 기술도 계속 선보이고 있다.

 

 

방식을 대충 요약해 보면 다음과 같다.

 

(1) 기기를 열어서

 

(2) 프로세서와 플래시의 칩 종류를 확인함

 

(3) 디버깅 포트를 찾아야 하는데 이 기기의 경우 정직하게 드러나 있고

 

(4) 그게 진짜 맞는지 datasheet와 멀티미터 체크를 통해 확인함.

 

 

(5) J-Link와 같은 디버그 장비에 연결해서

 

(6) 디버그 프로토콜을 SWD로 하고 속도를 디폴트로 해서 설정하면

 

(7) 연결 완료.

 

(8) 하지만 난관이 기다리고 있었으니... 칩셋이 Read-Out Protection을 지원해서, RAM은 아니지만 플래시 읽기는 막는 RDP Level 1 상태로 설정되어 있음. 즉 RAM의 내용은 읽을 수 있는데 플래시 내용을 read가 안되고, 강제로 플래시 내용을 덤프해도 암호화 되어 있다는 이야기임.

 

(9) 기기를 이용해 플래시와 RAM 내용을 덤핑해서

 

(10) 플래시 이미지(암호화됨)와 RAM 이미지 확보.

 

(11) binwalk를 이용해 플래시 내용을 Entropy analysis를 하거나 헤더를 살펴보면 역시나 암호화 되어 있음을 예상할 수 있음.

 

(12) 정보가 없기 때문에 진행의 방향을 못 잡을 수도 있으나... RAM 덤프 내용을 살펴봄. 우리는 RAM에 NES용 슈퍼마리오 롬이 올라갔을 것이라는 알고 있음. RAM의 내용과 NES 슈퍼마리오 1과 2의 덤프 롬 내용을 헥사 에디터로 비교해 봄.

 

(13) 동일 패턴이 있음은 물론 게임 롬 부분이 항상 일정한 어드레스에 위치한다는 것을 확인함.

 

(14) 플래시를 헥사 에디터로 읽어 임의의 지점들에 00 값을 넣고 플래시에 다시 구어 실행해 봄. 정상 동작함. 이를 통해 시스템은 롬 데이터의 유효성을 검증하지 않는 것을 확인.

 

 

(15) 플래시 내용에 00 값들을 넣고 실행된 RAM 내 덤프 롬 이미지와 오리지널 롬 내용이 같은지 확인. 변경한 만큼의 같은 크기의 바이트가 변경됨을 확인. 이로써 바이트 단위 암호화가 아닌 블럭 단위의 암호화가 되어 있음을 확인할 수 있음.

 

(16) 이를 염두에 두고 분석을 해 본 결과, RAM의 내용과 플래시의 내용을 XOR 한 결과 값은 플래시에 00 값을 써 넣었을 때 RAM에 올라오는 값과 동일함을 알게 되었음. 즉, AES-CTR 같은 XOR 기반 암호화라는 것을 알아냄.

 

(17) 이것을 이용해, NES 슈퍼마리오 롬 내용과 플래시 내용을 XOR 연산하여 암호화에 사용한 XOR 바이트 스트림을 얻음. 이것을 이용하면 임의로 만든 롬을 이 시스템이 이해하도록 암호화 할 수 있음.

 

(18) 스크립트를 만들어 이 모든 작업을 하고, 변형한 슈퍼마리오 롬을 추출한 XOR 데이터로 암호화하여 플래시에 넣음. 게임을 실행시키니 변형한 롬 실행 가능. 해킹 성공. (게임 첫 시작 화면의 'SUPER'라는 단어를 'HACKED'로 변형)

 

 

* 업데이트: 직접 설명하는 또 다른 영상 (추가로 homebrew를 돌림)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments