틀린 부분이 있다면 언제든지 댓글 남겨주세요!
DreamHack Wargame 1단계 Reversing Basic Challenge #2 문제 풀이
리버싱 워게임 기초 문제들은 프로그램의 동작을 파악해 문자열을 이용하면 해결되는 문제들이 많다.
이 문제도 마찬가지이다.
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램을 바이너리를 분석하여 correct를 출력하는 입력값을 찾아야 한다.
x64dbg 디버거를 이용한다.
[마우스 우클릭-다음을 찾기-모든 모듈-문자열 참조] 를 통해 해당 프로그램 내에서 사용되는 문자열을 확인해보면 input, correct, wrong의 문자열을 찾을 수 있다.
우선 input문자열에 해당하는 주소에 BP를 걸고(F2) 해당 코드까지 실행(F9) 한다.
그럼 input 문자열 다음에 문자열을 입력받고 그 문자열을 우리가 구해야 하는 문자열과 비교하여 같으면 correct, 다르면 wrong을 출력하는구나 라고 추측할 수 있다.
7FF678DC1164 주소부터 보면 CALL 함수에서 문자열을 입력받아 RCX 레지스터에 넣고 DC1000함수로 들어간다.
처음엔 RAX에 0이 저장되어 있고 루프를 반복하면서 1씩 증가하다 12가 되면 루프가 끝난다.
이때 주의할 점은 12는 0x12 즉 16진수이므로 10진수로 변환하면 17이다.
루프를 도는 동안 7FF678DC3000에 저장되어 있는 문자와 비교하게 되는데 이 문자열이 우리가 구해야 할 문자열이다.
해당 주소로 덤프해서 따라가기를 해보면 다음의 문자들이 저장되어 있음을 확인할 수 있다.
따라서 구해야 할 입력값은 Comp4re_the_arr4y 임을 알 수 있다.
'Security > Reversing' 카테고리의 다른 글
GDB 실습 1 (0) | 2021.05.16 |
---|---|
GDB 사용법 (0) | 2021.05.05 |
Abex crackme #5 (0) | 2021.02.07 |
Abex crackme #4 (0) | 2021.02.07 |
Abex crackme #3 (0) | 2021.02.07 |
댓글