이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

[시스템 프로그래밍] Bomb Lab Phase 3

  • 2022.12.23 17:46
  • Computer Science/System Programming

 

 

 

disas phase_3로 phase_3 함수를 어셈블리어로 조사해보자.

 

 

 

 

+35줄에서 정수를 입력받는 것 같다.

 

phase_2처럼 +28의 source 부분에 입력값의 형태가 저장돼 있을 것 같다.

어떤 형식으로 입력받는지 살펴보자.

 

 

 

 

 

 

 

ni 명령어로 한 줄 씩 읽어가면서 source 부분을 확인해봤다.

정수 2개를 입력받는 것 같다.

 

적당히 break를 설정하고 두 개의 숫자를 입력해서 다시 실행해보자.

 

 

 

 

 

 

대충 3 4로 입력했다.

 

+40줄에서 1과 eax의 값을 비교한다.

 

그러면 eax의 값을 알아야 하는데..

 

다시 한 줄 씩 실행하면서 확인해보자.

 

 

 

 

 

 

+40줄 까지 진행한 후 레지스터의 상태를 확인해보니 rax 레지스터에는 2가 저장돼있음을 확인할 수 있다.

 

+43줄에서 jle 명령어가 실행된다. 2는 1보다 크기 때문에 jle가 실행되지 않고 폭탄이 터지는걸 피할 수 있다.

 

계속 진행해보자.

+45줄에서 7과 rsp에 있는 값을 비교한다.

rsp에는 어떤 값이 있을까?

 

 

 

 

 

 

3이 저장돼있다.

 

처음에 3 4를 입력했었는데, 처음에 입력한 3이 저장돼있는 것 같다.

 

+49줄을 살펴보니 첫 번째로 입력한 값이 7보다 크면 폭탄이 터지게 된다.

첫 번째 정수는 7이하인 정수 인 것 같다.

 

이후 +51 ~ +68 까지는 입력값을 적절하게 조작하는 부분이고..

+70줄에서 폭탄이 터지기 때문에 +68에서 어디로 점프할지가 중요해진다.

 

다시 한 줄씩 실행하면서 +68줄에서 rax레지스터가 어떤 값을 가지는지 확인해보자.

 

 

 

 

 

 

+68줄에서 rax 레지스터에는 0x555554013a8 값이 저장돼있다.

0x55554013a8은 어디일까?

 

 

 

 

 

+91줄이다.

 

+91줄에서 0x122값을 %eax에 넣고 +143으로 점프함을 알 수 있다.

 

 

 

 

 

 

+143에서는 0x4(%rsp) 와 %eax값을 비교한다.

 

0x4(%rsp)는 두 번째로 입력한 수이고, %eax에는 이전에 넣었던 0x122값이 저장돼있다.

+147에서 cmp연산의 결과에 따라 폭탄을 터뜨린다.

즉, eax와 두 번째로 입력한 수는 같아야 한다.

 

0x122는 10진수로 290이다.

 

두 개의 정수를 입력받는건데..

그럼 답은 3 290 인가?

 

확인해보자.

 

 

 

 

 

정답임을 확인할 수 있다.

 

+154줄 이후는 대충 함수를 리턴하는 부분이다.

 

처음 두 개의 숫자를 입력받을 때 1~7 사이의 수를 입력받을 수 있는데, 첫 번째 숫자로 뭘 입력받는지에 따라 두 번째 숫자가 정해지는 것 같다.

 

중간에 수많은 mov와 jmp가 있었으니.. 아마 C언어로는 switch문법으로 작성됐을 것 같다.

반응형
저작자표시 (새창열림)

'Computer Science > System Programming' 카테고리의 다른 글

[시스템 프로그래밍] Bomb Lab Phase 5  (0) 2022.12.25
[시스템 프로그래밍] Bomb Lab Phase 4  (0) 2022.12.24
[시스템 프로그래밍] Bomb Lab Phase 2  (0) 2022.12.22
[시스템 프로그래밍] Bomb Lab Phase 1  (0) 2022.12.21
[시스템 프로그래밍] Data Lab  (0) 2022.12.20

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [시스템 프로그래밍] Bomb Lab Phase 5

    [시스템 프로그래밍] Bomb Lab Phase 5

    2022.12.25
  • [시스템 프로그래밍] Bomb Lab Phase 4

    [시스템 프로그래밍] Bomb Lab Phase 4

    2022.12.24
  • [시스템 프로그래밍] Bomb Lab Phase 2

    [시스템 프로그래밍] Bomb Lab Phase 2

    2022.12.22
  • [시스템 프로그래밍] Bomb Lab Phase 1

    [시스템 프로그래밍] Bomb Lab Phase 1

    2022.12.21
다른 글 더 둘러보기

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (605)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (68)
      • Operating System (18)
      • Computer Network (16)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (13)
    • Life Logs (0)
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바