IDA에서는 비주얼 스튜디오로 프로그램이 컴파일 되었을 때 어떻게 진입점에서 main 함수를 호출하는지 알고 있기 때문에 바로 main 함수를 찾을 수 있음.
_arct_iob_func() 함수를 이용해서 stdout 파일 스트림을 가져와 sub_1400012B0 함수를 전달함.
vfprintf 함수의 파일 스트림이 stdout이기 때문에 sub_1400013E0 함수가 printf 함수임을 알 수 있음. 단축키 n으로 함수 이름을 printf로 바꿈.
분석한 함수가 어떤 함수인지 알아냈으면 이름을 바꾸는 게 코드 분석하기 간편함.
sub_140001440 함수가 scanf 함수임을 알 수 있음.
sub_140001300 함수 내부를 보면 _stdio_common_vfscanf 함수가 보이기 때문임. main으로 돌아가서 sub_140001440 함수 이름을 scanf로 바꿔줌.
a1은 우리가 입력한 문자열임. 문자열의 각 인덱스를 비교해서 정해진 숫자와 다르다면 0을 리턴하고 마지막 조건인 입력값의 21번째 인덱스가 0이라면 1을 리턴함.
단축키 r을 누르면 숫자가 문자로 변환됨.
숫자를 전부 문자로 바꾸면 Compar3_the_ch4ract3r 가 나옴.
입력해서 correct가 나오는 것 확인. 해당 문제의 플래그가 Compar3_the_ch4ract3r 라는 것을 알 수 있음.
'Dreamhack' 카테고리의 다른 글
리버싱 09 - 혼자 실습 (0) | 2022.07.12 |
---|---|
리버싱 08 - Patch (0) | 2022.07.12 |
리버싱 06 - rev-basic-0 (0) | 2022.07.12 |
리버싱 05 - x86 Assembly (0) | 2022.07.12 |
리버싱 04 - Windows Memory Layout (0) | 2022.07.10 |