버려진 장난감, 열풍과 칼로 되살린 USB 프로토콜
2008년 출시된 ME2 핸드헬드 장치의 USB 통신 프로토콜(USB Communication Protocol)을 복원하기 위한 리버스 엔지니어링 과정을 소개함
칩-온-보드(Chip-on-Board) 형태의 마이크로컨트롤러를 분석하기 위해, 열풍(Heat Gun)과 칼(Knife)을 사용하여 칩을 분리하는 과정을 거침
Ghidra를 사용하여 펌웨어를 분석하고, μ'nSP 명령어 집합(Instruction Set)을 식별하여 USB 통신을 위한 커스텀 명령어를 찾아냄
최종적으로, 플래시 메모리 읽기/쓰기, 포인트 및 보석 설정, 메모리 덤프, 버튼 입력 감지 기능을 갖춘 커맨드라인 유틸리티(Command-line Utility)를 개발함
하드웨어 분석 및 칩 분리 과정
ME2 장치의 USB 프로토콜 리버스 엔지니어링을 위해, 저자는 먼저 칩-온-보드(Chip-on-Board, CoB) 형태의 마이크로컨트롤러를 분석해야 했다. 칩 식별을 위해, 열풍(Heat Gun)을 사용하여 칩을 분리하는 과감한 시도를 감행했다. 이 과정에서 칩의 손상 없이 분리하는 데 성공했으며, 이를 통해 펌웨어 덤프를 진행할 수 있었다. 이러한 하드웨어적 접근은, 소프트웨어 분석의 첫걸음이 되었다.
펌웨어 분석 및 명령어 집합 식별
펌웨어 덤프 후, 저자는 Ghidra를 사용하여 펌웨어를 분석했지만, 초기에는 명령어 집합(Instruction Set)을 알 수 없어 어려움을 겪었다. 다양한 시도 끝에, GeneralPlus 마이크로컨트롤러의 μ'nSP 명령어 집합을 식별하고, 관련 데이터를 Ghidra에 임포트하여 분석을 진행했다. 이 과정을 통해, USB 통신에 사용되는 커스텀 명령어를 찾아내고, 리버스 엔지니어링의 핵심 단계를 완료했다.
USB 통신 프로토콜 재구축
저자는 libusb(실제로는 rusb)를 사용하여 USB 통신을 위한 사용자 공간 코드(Userland Code)를 작성했다. 이를 통해, ME2 장치와 통신하며 플래시 메모리를 읽고, 쓰고, 지우는 기능을 구현했다. 특히, 장치에 저장된 포인트와 보석 값을 변경하는 데 성공했다. 이러한 과정은, 잃어버린 소프트웨어 없이도 장치의 기능을 복원할 수 있음을 보여주는 중요한 사례이다.
임베디드 ROM 분석 및 버그 발견
리버스 엔지니어링 과정에서, 저자는 장치의 임베디드 ROM(Embedded ROM)을 읽어내는 데 성공했다. 이 ROM에는 자체적인 USB 핸들러와 플래시 읽기/쓰기/지우기 구현이 포함되어 있었다. 또한, 플래시 메모리 쓰기 과정에서 발생하는 버그를 발견했는데, 이는 동기화되지 않은 명령 사이클로 인해 발생하며, 특정 메모리 위치의 데이터가 손상되는 결과를 초래했다.