| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- HackCTF
- 파이썬
- Bandit
- Python
- 리버싱
- Linux
- 백준
- MySQL
- 백준 1008번
- Welcome_rev
- 댓글크롤링
- c언어
- Handray
- split()
- 유튜브크롤링
- 후기 크롤링
- 웹크롤링
- 네이버스토어 후기
- SQL
- Selenium
- 리뷰 크롤링
- 리눅스
- split()함수
- ctf
- Baekjoon
- 백준2557
- 워게임
- 크롤링
- Reversing Me
- reversing
- Today
- Total
root@hfairy:~$
[HackCTF]Reversing - Handray 풀이 본문

냐하하하하라니.. 정말 얄밉다. 얄미워도 주어진 파일을 다운받았다.

오늘도 습관적인 헥사 확인..ㅎㅎ (사용 프로그램: 010 editor)
아스키 값을 확인해보면 flag is라는 문장이 보인다.
아랫줄에 flag라는 단어가 하나 더 보이긴 하는데 뭔진 잘 모르겠다.
일단 리눅스로 넘어가서 파일을 실행해봐야겠다고 생각했다.

파일의 종류를 파악하기 위해 file명령어를 입력했고, ELF 파일이구나~파일이구나~ 정도만 이해했다.

그리고 무작정 실행시켜봤지만 실패했다.

그래서 chomod 명령어를 입력해 권한을 변경해주고 다시 실행시켰다.
‘flag를 뛰어넘었습니다!’라는 문장이 출력되는 것을 확인했다.
flag값을 뛰어넘었다는 것은 코드 실행이 ‘flag를 뛰어넘었습니다!’라는 문장이 출력되기 전에 멈춰야 원하는 flag값을 얻을 수 있는 것 같다는 생각이 들었다.


파일을 분석하기 위해 IDA(디버깅 툴)에서 파일을 열었다.
(실행 프로그램: IDA) 아까 처음에 봤던 flag is 아래에 보이던 flag라는 단어가 ‘flag를 뛰어넘었습니다!’에 있는 flag였다. 그럼 우리는 뛰어넘은 flag is부분을 확인하면 원하는 값을 얻을 것이다.
gdb를 이용해 디버깅을 진행했다.
(gdb설치 방법은 구글에 검색하면 상세하게 나옵니다. 저는 칼리 리눅스를 사용하고 칼리 리눅스에 방법 찾아서 따라했어요.)

gdb 실행 명령어는 ‘gdb [파일명]’이고, r은 running의 약자로 gdb에서 파일 실행 명령어다. 실행시켜보니 아까와 같은 문장이 출력되는 것을 볼 수 있다. 일단 어디서 뛰어넘었는지 알아야 하니 디스어셈블(명령어: disas)을 통해 어셈블리 코드를 확인해봤다.
어셈블리 코드를 분석하기 위해서 어셈블리어를 공부해놓으면 빠른 분석이 가능하다.

일단 이 문제를 풀기 위해 알아야 할 어셈블리어는 cmp인데 cmp는 두 값을 비교하는 어셈블리어다. 사진을 보면 <+15>에 작성된 코드는 rbp-0x4와 0을 비교해서 같으면 <+96>이 출력되고 다르면 <+113>이 출력되는 것을 알 수 있다.
IDA에서 확인한 함수들과 함께 확인하면 <+19>에서 <main+103>으로 건너뛰는 것을 확인할 수 있다. 따라서 아무런 수정 없이 코드를 실행했을 때 <+113>가 출력됐으므로 rbp-0x4이 0을 가지고 있다면 해결할 수 있다.

<+19> 코드가 진행되기 전에 멈추기 위해 <+15>에 브레이크 포인트를 걸어주었다.

다시 r을 입력해 실행시키면 브레이크 포인트 1에서 진행을 멈추는 것을 알 수 있다.

‘x/wx $rbp-0x4’는 rbp-0x4 메모리를 4바이트 단위로 확인한다는 명령어다. 역시나 0이 아니라는 것을 확인했다.

‘set *0x7fffffffdf2c=0’을 입력해 rbp-0x4에 0을 넣어준다. ( ‘set *0x7fffffffdf2c=0x0’으로 입력해도 가능하다.) 그리고 c(continue)로 이어서 실행하면 애타게 찾던 ‘flag is’와 함께 flag값을 얻을 수 있다. 야호!
HackCTF{HotToHanDleC0ldT0H000ld!}
'워게임 > HackCTF' 카테고리의 다른 글
| [HackCTF] Reversing - Reversing Me 풀이 (0) | 2021.10.31 |
|---|---|
| [HackCTF] Reversing - Welcome_REV 풀이 (0) | 2021.10.31 |