Dreamhack

리버싱 06 - rev-basic-0

kchabin 2022. 7. 12. 04:05

맞는 입력값을 찾아야 함. 입력값을 검증하는 함수를 찾아야 무엇이 제대로 된 입력값인지 알 수 있으므로 String에서 correct 문자열을 찾음. 

correct 문자열이 참조되는 함수를 살펴보기 위해서 Buffer를 클릭하고 단축키 x를 눌러서 xrefs를 실행함. 

main 에서 해당 문자열을 참조하는 것을 볼 수 있음.

Direction 부분을 더블클릭하면 나오는 부분에서 F5를 눌러서 디컴파일 실행함. 

디컴파일된 main함수

눈에 띄는 함수 sub_140001190과 sub_1400011F0이 보임. IDA는 어셈블리 코드를 C언어로 컴파일해주기 때문에 코드 분석이 쉬워짐. 

일단 저 두 함수가 출력, 입력과 관련이 있는 것 같아서 두 함수를 더블클릭해서 들어가보면 디컴파일된 것이 나옴. 

_acrt_iob_func() 함수는 스트림을 가져올 때 사용하는 함수임. 함수의 인자가 1이므로 stdout스트림을 가져오게 되고 따라서 이 함수가 printf 함수임을 알 수 있음.

이 함수는 위의 함수와 달리 _acrt_iob-func()의 인자가 0임. 이는 이 함수가 stdin 스트림을 가져온다는 것이고, 이를 통해 이것이 scanf 함수임을 알 수 있음. 

다시 main으로 돌아가보면 저장한 입력값을 sub_140001000의 인자로 사용하여 호출한 후, 반환값에 따라 correct나 wrong을 출력하는 것을 알 수 있음. 이는 이 함수가 입력값을 검증하는 함수라는 뜻임. 

해당 함수를 디컴파일해보면 strcmp 문자열 비교 함수를 이용해서 입력받은 값인 a1과 "Compar3_the_str1ng"이 같으면 1, 다르면 0을 리턴하도록 만들어놨음. 이를 통해 Correct가 나올 수 있는 제대로 된 입력값이 "Compar3_the_str1ng" 임을 알 수 있음.

문제 해결

'Dreamhack' 카테고리의 다른 글

리버싱 08 - Patch  (0) 2022.07.12
리버싱 07 - rev-basic-1  (0) 2022.07.12
리버싱 05 - x86 Assembly  (0) 2022.07.12
리버싱 04 - Windows Memory Layout  (0) 2022.07.10
리버싱 03 - 컴퓨터 구조, 명령어 집합 구조  (0) 2022.07.10