GN⁺: MIDI 메시지를 통한 원격 코드 실행
(psi3.ru)시작
- Yamaha PSR-E433 신디사이저를 오랫동안 소유하고 있었으며, 내부 구조에 대한 호기심으로 분해하게 됨.
- 메인 회로 보드에서 "YAMAHA SWL01U" 칩을 발견했으나, 온라인에서 관련 정보를 찾을 수 없었음.
- 몇 달 후, 유사한 신디사이저의 서비스 매뉴얼을 발견하고, 칩의 핀 설명을 확인하게 됨.
- JTAG 테스트 포인트와 UART 인터페이스를 통해 칩의 정보를 얻으려 시도함.
펌웨어 덤프
- JTAG 인터페이스를 통해 칩의 IDCODE를 읽어보려 했으나, 예상치 못한 IDCODE가 나옴.
- ARM7TDMI 코어로 추정하고 OpenOCD를 사용하여 칩과 통신을 시도함.
- 전류 변화를 통해 ARM7TDMI 코어와의 통신이 성공적임을 확인함.
- 펌웨어를 덤프하여 분석을 시작함.
펌웨어 리버싱
- Ghidra를 사용하여 펌웨어를 리버싱하기 시작함.
- 펌웨어의 문자열을 통해 시스템의 구조를 이해하려고 시도함.
- 쉘 명령어 목록을 발견하고, 이를 통해 시스템의 작동 방식을 이해함.
쉘코드
- MIDI 메시지를 통해 신디사이저의 메모리에 접근할 수 있는 방법을 발견함.
- 메모리 쓰기 명령을 사용하여 RAM에 코드를 주입하고 실행할 수 있음을 확인함.
- "HeloWrld" 문자열을 LCD에 출력하는 간단한 어셈블리 코드를 작성하여 실행함.
Bad Apple
- MIDI를 통해 신디사이저의 LCD에 "Bad Apple" 영상을 출력하는 프로젝트를 진행함.
- MIDI 메시지를 통해 신디사이저의 내부 메모리에 접근하고, 이를 통해 영상을 출력함.
링크
- 프로젝트의 전체 과정과 관련된 링크를 제공함.
이 프로젝트는 MIDI 메시지를 통해 신디사이저의 내부 메모리에 접근하고, 이를 통해 다양한 기능을 구현할 수 있음을 보여줌. 이를 통해 신디사이저의 잠재력을 최대한 활용할 수 있는 가능성을 제시함.