CSAW CTF 2015 - HackingTime
23 Sep 2015HackingTime은 NES 리버싱 문제이다. NES파일은 이번 대회에서 처음 다뤄보는지라 조금 헤맸다. NES, 또는 iNES ROM은 닌텐도 패미컴용 프로그램이다.
1. Environment Setup
NES 에뮬레이터는 종류가 많은데, 간단히 실행만 하려면 VirtuaNES로도 충분하고, 디버깅을 하려면 Nintendulator를 사용해야 한다. IDA에서 NES 파일이 열리지 않는 경우, IDA NES loader를 다운받아 설치해야 한다. 설치는 nes.ldw
파일을 <IDA install directory>\loaders
에 넣기만 하면 끝이다.
2. NES 리버싱
NES는 Motorola 6502를 개조한 8비트 프로세서 기반이다. 주로 사용하는 레지스터는 A,X,Y 세 개이고 각각 8비트씩이다. 몇 가지 어셈블리를 소개하고 넘어가겠다.
LDA #$12 # Load constant 0x12 to A
STA 0x39 # Store A to memory address 0x39
TXA # Transfer X to A
JSR sub_8233 # Call function at 0x8233
LDA 3, Y # Load byte at (Y+3) to A
CPY #24 # Compare Y against const 24
BNE lab_8102 # Branch if not equal
아래 사이트가 아주 유용했다.
- 6502 어셈블리 일람 http://www.6502.org/tutorials/6502opcodes.html
- NES 어셈블리 튜토리얼 http://patater.com/nes-asm-tutorials/
3. 실행 시켜보기
화면 상에 A키를 누르라고 나오면 키보드 X키를 누르면 된다. 게임을 진행하다 보면 아래와 같이 비밀번호를 요구하는 스테이지가 나온다. 올바른 비밀번호가 문제의 답일 것이다.