Reverse Engineering

Project for reverse engineering

  • Reverse Engineering,  Series

    [Bomb Lab] Secret Phase

    Bomb lab 과제에 내부 secret phase가 있다고 해서 찾아보니 phase_defused 함수를 분석해보면 된다고 힌트가 있었다. <+24>에서 0x38d0(%rip)의 값이 0x6일 경우 다른 곳으로 이동하는 것을 봤다. 이를 분석해보니 각 phase를 통과 할 때마다 값이…

  • Reverse Engineering,  Series

    [Bomb Lab] Phase 6

    Phase 6는 마지막 단계인만큼 assembly code가 길다. 바로 본론으로 들어가자면 <+40>에서 <read_six_numbers> 함수 이름으로 유추해볼 때 6개의 정수가 필요해 보인다. 위 그림은 phase_6 수행 직후 register 및 stack information을 보여준다. 우리가 임시로 입력한…

  • Reverse Engineering,  Series

    [Bomb Lab] Phase 5

    Phase 5에는 이전과 다르게 sscanf 함수로 된 이름이 보이지 않는다. 그리고 <+8>에 <string_length> 함수로 건너 뛰며 바로 직전에 $rdi의 값을 복사하는 것으로 봐선 $rdi의 값이 뭔지가 중요 할 것으로 보인다. 테스트용으로 입력을 123456을…

  • Reverse Engineering,  Series

    [Bomb Lab] Phase 4

    우선 phase_4를 disassembly 해보면 위와 같다. 우선 <+44>에서 $eax의 값을 0x2와 동일한지 확인하는 것으로 봐선 2개의 입력이 필요한 것으로 예측된다.<+49>에서 보면 처음 입력한 값과 0xe를 비교해서 jbe (jump if bellow or equal)를 수행하는…

  • Reverse Engineering,  Series

    [Bomb Lab] Phase 3

    Phase 2와 마찬가지로 phase_3를 disassembly하면 위와 같다. 위 코드에서 <+39>를 수행하고 난 뒤에 $rsi의 값을 주소로하는 메모리 값을 보면 다음과 같다. 이를 통해 phase_3의 argument는 2개로 유추해볼 수 있다. 실제로 <+44>를 보면 #…

  • Reverse Engineering,  Series

    [Bomb Lab] Phase 2

    Phase 1과 같이 phase 2로 disassembly 해보면 다음과 같은 코드를 볼 수 있다. phase_2 function을 보면 수행 직후 여러 register 처리들을 해주고 난 뒤 <+29>: callq 0x555555555c14 <read_six_numbers>를 통해 read_six_numbers 함수로 jump 하는…

  • Reverse Engineering,  Series

    [Bomb Lab] Phase 1

    Bomb lab은 assembly 및 computer system을 공부를 하는데 도움이 되는 project다. 기본적으로 bomb lab을 수행하는데 하나의 binary가 주어지는데 해당 binary는 bomb라는 이름으로 되어있다. 참고로 해당 binary는 x86 machine에서 돌아가도록 build 되어있다. 즉, 위…

  • Reverse Engineering,  Series

    [Buffer Lab] Level 0

    Introduction 우선 Buffer Bomb lab은 system programming에 대해 익숙해지기 위한 project 중 하나다. 위 과제를 수행하기 위해선 크게 3가지 binary와 1개의 manual PDF file이 존재한다. (자세한 binary 및 code는 아래 reference[3] 참고 바랍니다.)…