이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

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

  • 2022.12.24 17:48
  • Computer Science/System Programming
반응형

 

 

 

항상 하던대로 먼저 phase_4의 어셈블리어를 조사하자.

 

 

 

 

 

 

 

+35줄에서 입력받는 부분이 바로 보인다.

phase_2와 phase_3에서 한 것처럼 입력 형식을 살펴보자.

 

 

 

 

 

 

이번에도 두 개의 정수를 입력받는다.

 

두 개의 정수이니, 대충 1 2를 입력하고 한 줄 씩 진행해보자.

 

+40 줄에서 eax값과 2를 비교하고, +43에서 두 값이 다른 경우 폭탄을 터뜨린다.

 

 

 

 

 

 

+40줄에서 레지스터의 값을 확인해보니 rax에 2가 저장돼있었다.

따라서 43줄에서 폭탄은 터지지 않는다.

아마 두 개의 입력이 잘 들어왔는지 확인하는 부분 인 것 같다.

 

이후 +45줄에서 0xe와 rsp에 있는 값을 비교한다.

 

 

 

 

 

rsp에는 입력한 값인 1과 2가 저장돼있다.

 

+49줄에서 +45줄의 결과에 따라 폭탄을 터뜨린다.

0xe는 10진수로 14이니, rsp의 값은 14보다 작거나 같아야 폭탄이 터지는걸 방지할 수 있다.

 

계속해서 진행해보자.

 

+69줄에서 func4함수를 호출한다.

 

어떤 함수일까? 확인해보자.

 

 

 

 

 

func4 내부에서 func4를 다시 호출함을 확인할 수 있다.

 

일단 이 함수를 통해 어떤 값이 반환될텐데, +74줄을 살펴보니 해당 반환값이 0x23인 경우 폭탄이 터지지 않음을 확인할 수 있다.

 

그럼 두 번째 값은 0x23이다.

 

지금까지 얻은 정보를 살펴보면, 첫 번째 값은 14보다 작거나 같은 정수이고 두 번째 값은 0x23을 십진수로 변환한 35이다.

 

다시 func4를 살펴보자.

 

일단 func4에 진입하기 직전에 입력한 값이 저장된 rsp레지스터의 값을 edi에 저장한다.

그리고 func4에서는 edi값을 사용한다.

즉, 첫 번째 입력값에 따라 리턴되는 값이 달라지게 되니 0x23을 반환하게 하는 첫 번째 입력값을 구하면 된다.

 

edx 에는 14 / esi에는 0 / edi 에는 rsp의 값이 저장돼있다.

 

func4의 +0 ~ +14줄 까지 ebx의 값을 조작하고, +16에서 첫 번째 입력한 값과 ebx의 값을 비교한다.

 

shr로 ebx를 0으로 설정하고, sar로 ebx를 2로 나누는 등 여러 연산을 수행하는데, 여기서 ebx = (edx + esi) / 2 가 저장된다.

 

그러니 첫 번째 func4에서 +14줄까지 진행 시 ebx에는 7이 저장된다.

 

여기서 몇 가지 분기로 나뉜다.

 

 

첫 번째로 입력한 값이 7이다 (edx에 저장된 값)

7을 반환한다.

 

2. 첫 번째로 입력한 값이 edx에 저장된 값 보다 크다

함수를 재귀호출하는데, edx에는 ebx에서 1을 뺀 값이 파라미터로 저장된다.

 

3. 첫 번째로 입력한 값이 edx에 저장된 값 보다 작다

esi에 ebx에서 1을 더한 값이 파라미터로 저장되고 재귀호출한다.

 

이제 함수가 어떻게 동작하는지 알고, 함수의 리턴값도 알고 있다.

노가다를 통해 첫 번째 입력값을 구해 보면..

 

첫 번째 입력값은 8임을 알 수 있다.

 

 

 

 

 

 

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

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

[시스템 프로그래밍] Bomb Lab Phase 6  (0) 2022.12.27
[시스템 프로그래밍] Bomb Lab Phase 5  (0) 2022.12.25
[시스템 프로그래밍] Bomb Lab Phase 3  (1) 2022.12.23
[시스템 프로그래밍] Bomb Lab Phase 2  (0) 2022.12.22
[시스템 프로그래밍] Bomb Lab Phase 1  (0) 2022.12.21

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

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

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

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

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

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

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

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

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

    2022.12.22
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

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

카테고리

  • 분류 전체보기 (679) N
    • 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)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (8) N
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

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

티스토리툴바