본문 바로가기
Security/Reversing

Reversing Basic Challenge #2

by jino22 2021. 4. 25.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 

 

DreamHack Wargame 1단계 Reversing Basic Challenge #2 문제 풀이



리버싱 워게임 기초 문제들은 프로그램의 동작을 파악해 문자열을 이용하면 해결되는 문제들이 많다.

이 문제도 마찬가지이다.

 

이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램을 바이너리를 분석하여 correct를 출력하는 입력값을 찾아야 한다.

 

x64dbg 디버거를 이용한다.

[마우스 우클릭-다음을 찾기-모든 모듈-문자열 참조] 를 통해 해당 프로그램 내에서 사용되는 문자열을 확인해보면 input, correct, wrong의 문자열을 찾을 수 있다.

우선 input문자열에 해당하는 주소에 BP를 걸고(F2) 해당 코드까지 실행(F9) 한다.

문자열 검색

그럼 input 문자열 다음에 문자열을 입력받고 그 문자열을 우리가 구해야 하는 문자열과 비교하여 같으면 correct, 다르면 wrong을 출력하는구나 라고 추측할 수 있다.

input문자열 호출 위치

7FF678DC1164 주소부터 보면 CALL 함수에서 문자열을 입력받아 RCX 레지스터에 넣고 DC1000함수로 들어간다.

CALL 7FF678DC1000

처음엔 RAX에 0이 저장되어 있고 루프를 반복하면서 1씩 증가하다 12가 되면 루프가 끝난다.

이때 주의할 점은 12는 0x12 즉 16진수이므로 10진수로 변환하면 17이다.

 

루프를 도는 동안 7FF678DC3000에 저장되어 있는 문자와 비교하게 되는데 이 문자열이 우리가 구해야 할 문자열이다.

해당 주소로 덤프해서 따라가기를 해보면 다음의 문자들이 저장되어 있음을 확인할 수 있다.

7FF678DC3000

 따라서 구해야 할 입력값은 Comp4re_the_arr4y 임을 알 수 있다.

 

 

728x90
반응형

'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

댓글