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

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

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

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

  • 2022.12.25 17:49
  • Computer Science/System Programming
반응형

 

 

 

disas phase_5 명령어로 phase_5의 어셈블리어를 조사하자.

 

 

 

 

+4줄에서 string_length 함수를 호출한다.

 

문자열의 길이? 어떤 함수일까?

 

 

 

 

 

뭔가 조건이 만족 될 때 까지 반복하는 함수 인 것 같다.

 

입력받은 문자열 내부를 순회하면서 문자열에 따라 특정 값을 계속해서 더하는 것 같은데.. 우선은 phase_5를 계속 조사하자.

 

다시 phase_5로 돌아와서, +9줄에서 string_length 함수의 반환값이 6과 같은지 검사하고, 6이 아니면 폭탄을 터뜨림을 확인할 수 있다.

 

그러면 phase_5의 입력 양식은 길이가 6인 문자열 일텐데..

 

일단 길이가 6인 아무 문자열이나 입력하고 디버깅해보자.

 

 

 

 

 

대충 aaaccc를 입력했다.

rdi 레지스터에 입력 값이 저장됨을 확인할 수 있다.

 

+0 ~ +14줄을 통해 rdi rbx rax는 모두 입력한 값을 가지고 있다.

+17줄에서 rdi에 rbx + 6 즉, 입력한 문자열이 끝난 바로 다음 주소를 저장한다.

 

+26 : rsi에 0x1675 + rip 값을 저장한다.

+33 : 레지스터의 크기를 변환한다. rax에는 입력한 값의 주소가 들어있기 때문에 edx에는 입력 문자열의 첫 번째 문자가 저장된다.

 

+36 : edx와 0xf를 and 연산한다.

edx에는 문자가 저장돼있으니, 아스키코드로 변환될 것이고 변환된 아스키코드를 16진수로 변환한 값이 and 연산의 대상이 된다.

 

지금은 aaaccc를 입력받았으니 첫 번째 글자는 a이고 a에 해당하는 아스키코드는 97이다.

97을 16진수로 표현하면 0x61이니, 0x61과 0xf를 and 연산 시 0x01을 얻는다.

 

+39 : ecx에 rsi + 4 * rdi 값을 저장한다.

+42 : rax에 1을 더한다.

rax는 입력 문자열의 첫 번째 문자를 가리키고 있었다.

이후 +46과 +49줄은 문자열을 모두 순회할 때 까지 위의 작업을 반복해서 수행함을 의미한다.

 

문자열을 모두 순회했으면 +51줄로 이동한다.

 

0x2a와 ecx의 값을 비교해 두 값이 같지 않으면 폭탄이 터진다.

 

문자열을 한 번씩 순회 할 때 마다 ecx에는 값이 쌓인다.

0xf와 and 연산을 수행하기 때문에 가질 수 있는 문자는 최대 16개이다.

 

그럼 어떤 문자열을 입력해야 하는지 알기 위해 rsi와 그 이후에 저장된 정수들이 어떤 값을 가지는지 확인해보자.

 

 

 

 

 

 

 

적당히 명령어를 수행한 뒤 rsi 뒤에 주석으로 표시된 주소를 확인해봤다.

 

ecx에 a가 저장되면 0xf 와 and 연산 시 1을 얻고, b가 저장되면 0xf와 and 연산 시 2를 얻는다.

1에 해당하는 숫자는 10, 2에 해당하는 숫자는 6이다.

꼭 알파벳 소문자가 아니더라도 and 연산 시 적당한 값을 얻을 수 있으면 된다.

 

string_length 함수에서는 문자열을 순회하면서 문자에 해당하는 숫자를 계속해서 누적하는 작업을 수행한다는걸 알 수 있다.

 

어쨌든, 맞춰야 하는 수는 0x2a이니 6개의 문자를 적절하게 조합해서 0x2a를 10진수로 변환한 42를 만들자.

 

a와 c를 사용해서 만들 수 있다.

a는 10에, c는 1에 해당하기 때문에 4개의 a와 2개의 c를 조합한 문자열을 입력하자.

 

 

 

 

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

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

[시스템 프로그래밍] Bomb Lab Phase Secret  (1) 2022.12.30
[시스템 프로그래밍] Bomb Lab Phase 6  (0) 2022.12.27
[시스템 프로그래밍] Bomb Lab Phase 4  (0) 2022.12.24
[시스템 프로그래밍] Bomb Lab Phase 3  (1) 2022.12.23
[시스템 프로그래밍] Bomb Lab Phase 2  (0) 2022.12.22

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

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

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

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

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

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

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

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

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

    2022.12.23
다른 글 더 둘러보기

정보

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

천천히 꾸준히 조용히

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

검색

방문자

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

카테고리

  • 분류 전체보기 (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.

티스토리툴바