Recent posts

CSAW CTF 2015 - HackingTime

HackingTime은 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

아래 사이트가 아주 유용했다.

3. 실행 시켜보기

화면 상에 A키를 누르라고 나오면 키보드 X키를 누르면 된다. 게임을 진행하다 보면 아래와 같이 비밀번호를 요구하는 스테이지가 나온다. 올바른 비밀번호가 문제의 답일 것이다.

HackingTime

Read more


Blogging in Github

몇달 전에 Jekyll로 Github에 블로그를 파보려고 한 적이 있었다. 그때가 내가 한창 웹 언어와 bootstrap을 배워서 가지고 놀던 때였고, 그래서인지 Jekyll-bootstrap을 fork해서 첫 포스트를 썼었다. 웹사이트에는 “Host on Github in 3 minutes”라고 되어 있었지만 gem이니 rake니 하는 커맨드가 좀 낯설어서 꽤나 오래 걸렸다. 게다가 그 결과도 썩 마음에 들지 않았다. 결국 포스트를 2개 쓰고 방치해 두었다.

이번 주에 카포전과 CSAW CTF에 참가한 뒤 평소 하던 대로 풀이를 작성하고 bitbucket에 올렸다. 그런데 이제 보니 내가 푼 문제가 꽤 많았다. 잠시 뿌듯함을 느끼고 인터넷에 다른 사람들 블로그처럼 풀이를 올려보고 싶다는 생각을 했다. 하지만 길게는 몇 년간 내 글을 올릴 곳을 정하는 것이라 고민이 좀 되었다.

네이버 블로그는 고등학생 때 잠시 써보았는데 글 작성이 불편하고 테마도 마음에 들지 않았다. 컴퓨터 하는 사람들이 티스토리를 많이 쓰는 것 같아서 보니까 초대장을 받아서 쓰는 것이었다. 그 사람들처럼 열심히 글을 올릴 것도 아닌데 모르는 사람에게 초대장 씩이나 받기엔 좀 뭐했다.

그러던 차에 이 글을 발견했다. 커맨드를 칠 필요 없이 단순히 저장소를 fork하는 것만으로 사이트를 띄울 수 있다는 것이었다. 이 글에서 소개한 저장소는 jekyll-now다. jekyll-now에 보면 다른 테마도 소개하고 있는데, 이 블로그에 사용한 건 Hyde이다. 가볍고, 깔끔하고, 쉬워서 아주 마음에 든다. 앞으로 글 쓰는 연습도 할 겸 꾸준히 글을 올려볼 생각이다.