ugonfor.
Home
  • 분류 전체보기 (86)
    • Study (39)
      • Paper Review (3)
      • 대회 후기 (7)
      • Reversing Skills (5)
      • Develop (1)
      • Pwnable (2)
      • Tips (21)
    • Writeup (39)
      • Wargame_Writeup (31)
      • CTF_Writeup (8)
    • CS (0)
      • Algorithm (0)
      • Operation System (0)
      • Computer Network (0)
    • Etc (8)
      • Life (7)
Home
  • 분류 전체보기 (86)
    • Study (39)
      • Paper Review (3)
      • 대회 후기 (7)
      • Reversing Skills (5)
      • Develop (1)
      • Pwnable (2)
      • Tips (21)
    • Writeup (39)
      • Wargame_Writeup (31)
      • CTF_Writeup (8)
    • CS (0)
      • Algorithm (0)
      • Operation System (0)
      • Computer Network (0)
    • Etc (8)
      • Life (7)
블로그 내 검색
About Me

ugonfor.

보안 위주로 가볍게 작성하였습니다 :)

  • Writeup/Wargame_Writeup

    [ Reversing.kr ] CustomShell

    2021. 1. 6.

    by. ugonfor

    blukat29.github.io/2015/09/avr-memory-and-registers/

    blukat29.github.io/2015/09/avr-reversing/

    blukat29.github.io/2015/09/debugging-avr/

    위 글을 정독하고 문제를 풀어보도록 하자.

     

    AVR 아키텍처에 대한 내용들이 쓰여있다. 이분 리버싱 카테고리를 참고하면, AVR 프로그램에 대해서 디버깅하는데 필요한 정보들을 확인할 수 있다. 본인이 사용한 것은 IDA를 이용해서 어셈블리를 확인하였고, 이에 대해서 디버깅하며 확인하였다.

     

    AVR 어셈블리의 경우에는 아래 주소에서 확인할 수 있다.

    ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf

     

    알아야 하는 것들을 요약하자면,

     

    1. Register

    각 레지스터는 8비트이다. 주소공간은 16비트이기에 2개의 레지스터를 이용해서 포인터 표현을 한다.

     

    • r27:r26을 붙이면 (r27이 high byte) X라는 16비트 레지스터가 된다.
    • r29:r28은 Y인데, ebp처럼 stack frame pointer로 쓰인다.
    • r31:r30은 Z라고도 부르는데, 프로그램 메모리를 읽어올 때 쓰인다.
    • r1의 값은 항상 0이다.
    • 함수의 argument는 순서대로 r25:r24, r23:r22, r21:r20, … 을 통해 전달한다.
    • 함수의 return value는 r25:r24에 저장한다.
    • SP는 Stack Pointer인데, SPH:SPL로 사용된다. High:Low로 표현함.

    2. Code Section

    codeflow

    • __RESET : entry point
      • 위 함수를 따라가다보면 main함수를 찾을 수 있다.
    • static compile이 되어 있기에, 각 함수들이 printf, scanf 같은 함수 일 수도 있다.

    address expression

    • 주소공간은 16비트이기에 2개의 레지스터를 이용해서 포인터 표현을 한다.

    Function Call

    • argument는 각각 두개의 레지스터를 차지하며 그 순서는 다음과 같다.
      • r25:r24, r23:r22, r21:r20, … 
      • Return Value도 위 순서로 담기게 된다.
      • 일반적으로 r25:r24에 담긴다.
    • stack에 데이터를 push하여 전달하는 경우도 있다.

     

    저작자표시 비영리 변경금지

    'Writeup > Wargame_Writeup' 카테고리의 다른 글

    [ Reversing.kr ] CRC1  (2) 2020.07.17
    [ Reversing.kr ] Adventure  (0) 2020.04.15
    [ Reversing.kr ] PEpassword  (0) 2020.04.14
    [ Reversing.kr ] WindowKernel  (0) 2020.04.13
    [ Reversing.kr ] Metroapp  (0) 2020.04.09

    댓글

    관련글

    • [ Reversing.kr ] CRC1 2020.07.17
    • [ Reversing.kr ] Adventure 2020.04.15
    • [ Reversing.kr ] PEpassword 2020.04.14
    • [ Reversing.kr ] WindowKernel 2020.04.13
    맨 위로
전체 글 보기
  • Githug
  • Facebook
  • ugonfor.kr
  • Portfolio
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Designed by Nana
블로그 이미지
ugonfor

티스토리툴바