본문 바로가기

Study/Reverse Engineering

dreamhack : rev-basic-1 write-up

728x90

실습을 통해 이해하기

https://dreamhack.io/wargame/challenges/15/

 

rev-basic-1

Reversing Basic Challenge #1 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io

step1. main 함수 분석

디컴파일(F5) 

1. v4라는 256바이트의 char배열을 0으로 초기화

2. sub_1400013E0 함수와 sub_140001440 함수를 호출. 이때 인자로 각각 "Input: " , "%256s"문자열이 들어감

3. v4 배열을 sub_140001000 함수의 인자로 전달해 반환값이 있다면 "Correct"를, 아니라면 "Wrong" 문자열을 출력

 

step2. 각 함수 내부 분석

1. sub_1400013E0 함수 = printf( ) 

 

2. sub_1400012B0 함수

 

3. sub_140001440 함수

_art_iob_func( ) 를 통해 가져오는 파일 스트림이 0번 -> stdin 파일 스트림 = 표준 입력을 사용하는 함수 = scanf( )

 

4. sub_140001300

 

step2. main 흐름 파악

input: 이라는 문자열을 화면에 출력

256바이트의 문자열을 v4 변수에 입력받음

Correct와 Wrong 중 출력할 문자열 결정

 

Step3. 입력값 검사 함수 분석 -> sub_140001000 함수 분석

a1은 입력한 값(1바이트 단위로 값 비교)

조건문 중에서 문자열의 각 인덱스 별로 정해진 숫자와 다르면 0을 리턴하고, 마지막 조건이 입력값의 21번째 인덱스가 0 이면 1을 리턴.

입력해야 하는 문자열의 각 인덱스 값이 정해져 있고 정해진 값과 모두 일치하면 "Correct"출력.

 

IDA에서 숫자를 무자로 변환하는 단축키 = r

변환 후

모두 아스키 코드로 변환하고 이를 이어붙이면 우리가 입력해야 하는 입력값이 될듯.

문자열의 끝은 NULL문자로 0을 의미(입력 ㄴㄴ)

 

💡쓸만한 단축키

이름 재설정 : n

숫자->문자 아스키 변환 : r

'Study > Reverse Engineering' 카테고리의 다른 글

dreamhack : rev-basic-3 write-up  (0) 2024.05.13
dreamhack : patch write-up  (0) 2024.05.11
Windows Memory Layout  (0) 2024.05.02
Computer Architecture(컴퓨터 구조)  (0) 2024.04.29
정적분석과 동적분석  (0) 2024.04.11