문제
; 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!
chall2.exe를 x64dbg에 넣어보면 위처럼 뜬다.
문자열 검색을 해보자! (오른쪽 마우스 - 다음을 찾기 - 모든 모듈 - 문자열 참조)
Correct 문자열이 보인다. 해당 위치로 이동해보자.
rev-basic-1 문제와 동일하게 화살표로 가리켜진 함수에서 비교가 발생하는 것으로 추측된다.
해당 부분에 BP를 걸어두고 프로그램을 실행시켜보자.
자세히 살펴보자.
00007FF76E441028 주소에서 7ff76e443000 주소를 rcx로 가져온다.
00007FF76E441033 주소에서 r8에 입력한 compare 값을 넣는다.
00007FF76E441038 주소에서 입력한 문자열을 하나씩 가져와 dex에 넣는다.
RDX의 값은 반복을 돌 때마다 00007FF76E44102F 주소에서 1씩 추가된다.
그런 다음 edx의 값과 rcx(7ff76e443000)+rax*4한 주소의 값을 비교한다.
이때 00007FF76E441015 주소에서 eax를 increase 시키는 것으로 보아 입력한 값과 비교할 대상인 값은 4바이트 단위로 저장되어 있음을 유추해볼 수 있다.
이 결과를 바탕으로 7ff76e443000에 비교할 값이 저장되어 있는 것을 알 수 있다.
1번이 7ff76e443000를 가리키기 때문에 오른쪽 마우스 - 덤프에서 따라가기를 클릭한다.
그렇게 했더니 플래그 값을 찾을 수 있었다.
답 : DH{Comp4re_the_arr4y}
'Wargame > dreamhack' 카테고리의 다른 글
dreamhack rev-basic-5 (0) | 2021.05.26 |
---|---|
dreamhack rev-basic-4 (0) | 2021.05.26 |
dreamhack rev-basic-3 (0) | 2021.05.19 |
dreamhack rev-basic-1 풀이 (0) | 2021.05.15 |
dreamhack rev-basic-0 풀이 (0) | 2021.05.15 |