Recent posts

Debugging AVR

AVR Studio와 hapsim을 이용하면 윈도우에서 AVR프로그램의 시뮬레이션 및 디버깅을할 수 있다.

1. AVR Studio 4

AVR Studio는 Amtel에서 배포하는 공식 AVR IDE이다. 최신 버전은 6인데 해본 결과 시뮬레이션이 잘 되지 않았다. 오히려 구 버전인 AVR Studio 4가 잘 되었다. 필자는 4.19버전을 사용해 보았다.

무료이며, 공식 홈페이지 (http://www.atmel.com/tools/STUDIOARCHIVE.aspx)에서 다운받을 수 있다.

avrstudio_open

우선 ELF파일을 AVR Studio에서 연다. AVR Studio를 켜면 처음에 위와 같은 화면이 나오는데, 여기서 Open을 눌러 ELF파일을 열면 된다. 그 다음 프로젝트 파일을 저장할 곳을 고르고, 디버그 옵션으로 AVR Simulator를 선택한다. 그러면 시뮬레이터 화면이 켜진다.

2. hapsim

그런데 AVR Studio만 가지고는 UART로 나오는 터미널 입출력을 테스트할 수 없다. 그래서 hapsim(http://www.helmix.at/hapsim/)이라는 프로그램이 필요하다. hapsim은 실행 중인 AVR Studio에 자동으로 연결하여 다양한 I/O 인터페이스 역할을 해준다.

AVR Studio가 켜진 상태에서 hapsim을 켜고 File > New Control > Terminal을 선택하여 새 터미널 창을 띄운다. 그 다음 Options > Terminal Settings을 선택하여 Local Echo를 체크해준 뒤 USART0이나 USART1을 선택한다.

hapsim

이제 AVR Studio에서 시뮬레이션을 시작하면 hapsim 창에 출력이 보일 것이다.

avrstudio_done


AVR Reversing

AVR instruction set은 공식 문서에 잘 나와 있으므로 아래를 참고하면 된다. 각각의 인스트럭션은 이 글에서 설명하지 않겠다.

http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html
http://www.atmel.com/Images/doc1022.pdf

이 글은 C언어로 작성된 AVR프로그램에 등장하는 패턴을 적어놓은 것이다.

1. 프로그램 구조

프로그램은 __RESET이라는 지점에서 시작한다. 보통 프로그램의 제일 처음 (0x0000)에 보면 jmp __RESET인스트럭션이 있다. __RESET에서는 SP값을 세팅하고 SRAM에 .data섹션의 내용을 load한 뒤 main을 호출한다.

main부터는 일반적인 C함수와 마찬가지로 callee-save인 레지스터를 push하고, SP를 내리고 지역변수를 레지스터와 스택에 저장한다.

AVR 하드웨어에는 프로그램을 하나만 올리기 때문에 모든 라이브러리 함수가 static하게 compile되어있다. 따라서 AVR 프로그램을 리버싱 할 땐 printf나 strcmp따위의 라이브러리 함수를 찾아내는 것이 중요하다.

Read more


AVR Memory and Registers

AVR은 Atmel사에서 개발한 8비트 RISC 마이크로프로세서다. x86이나 ARM에 비해 특이한 점들이 많아서 따로 정리한다.

1. 아키텍처

AVR은 Harvard Architecture (참고) 로 되어있어서 프로그 램 메모리와 데이터 메모리가 분리되어 있다.

AVR의 메모리는 Flash memory, SRAM, EEPROM으로 구성되어 있고, 각자 memory space를 가진다.

  • Flash memory: 프로그램 메모리.
  • SRAM: 데이터 메모리.
  • EEPROM: 데이터를 반 영구적으로 저장하기 위한 보조기억장치.

Flash memory와 SRAM은 둘 다 0부터 시작하는 16비트 address space를 가지고 있는데, 이를 ELF파일과 IDA에서는 프로그램이 0x0000부터 시작하고, 데이터가 0x800000부터 시작하는 것으로 표현하고 있다. 실제 주소가 0x800000가 아님에 주의해야 한다.

Read more


CSAW CTF 2015 - pcapin

pcapin은 네트워크 포렌식 문제다.

We have extracted a pcap file from a network where attackers were present.
We know they were using some kind of file transfer protocol on TCP port 7179.
We’re not sure what file or files were transferred and we need you to investigate.
We do not believe any strong cryptography was employed.

Hint: The file you are looking for is a png.

문제로 주어진 pcap 파일을 열어 보면 깔끔하게 두 컴퓨터 간에 오고 간 TCP 패킷이 보인다. 그런데 TCP 헤더에는 IP와 달리 상위 프로토콜에 대한 정보가 없기 때문에 이들이 어떤 포맷으로 데이터를 주고받았는지 알 수가 없다.

패킷을 직접 분석하기에 앞서 이리저리 검색을 해 보았지만 이 데이터가 무슨 프로토콜로 주고받은 데이터인지 찾을 수 없었다.

Read more


CSAW CTF 2015 - Sharpturn

I think my SATA controller is dying.

Sharpturn은 400점짜리 포렌식 문제다. sharpturn.tar.xz파일이 주어졌는데, 이런 파일이 들어있었다.

HEAD  branches/  config  description  hooks/  info/  objects/  refs/

Git 저장소의 .git/ 디렉토리임을 대번에 알 수 있었다.

Read more