Dreamhack rev-basic-0

 

x64dbg를 이용하여 문제에서 주어진 파일을 실행시켰다.

 

 

먼저 메인 함수를 찾기 위해 F8키로 계속 확인해보다가 cmd 창에 "input: "이라는 문구가 뜨는 함수 호출 부분에 breakpoint를 걸어주었다.

 

 

아까 걸어주었던 breakpoint 부분에서 F7키를 눌러 함수 내부로 들어온 후 위와 같은 부분을 확인할 수 있었다.

 

여기에서 test eax, eax를 통해 eax가 0인지 아닌지 판단하는 부분을 찾아볼 수 있다.

이때 eax 값이 0이면 Wrong을 출력하고, 아니면 Correct를 출력한다는 것을 예상할 수 있다.

 

이때 좀 더 자세히 확인해 보기 위해 test 명령어 전에 호출하는 함수 내부를 들어가 보았다.

 

 

test 명령어 전에 호출되는 함수 내부를 확인해보니 eax가 0이 아니면 ss:[rsp+20] 주소 부분에 1이 담기고,

eax가 0이면 ss:[rsp+20] 주소 부분에 0이 담기고 함수를 빠져나가는 것을 확인할 수 있다. 

 

이때 "Correct"를 출력해주기 위해서는 eax가 결과적으로 0이 아니어야 하기 때문에 이 부분에서는 eax가 0이 되어야 한다.

 

여기서 call <JMP.&strcmp> 함수는 두 문자열을 비교하여 같으면 0, 다르면 1을 eax 레지스터에 저장하는 역할을 한다.

즉, eax가 0이 되도록 하기 위해서는 rcx와 rdx의 문자열이 서로 같으면 되기 때문에 compar3_the_string을 입력해주면 될 것이다.

 

 

위와 같이 Correct가 잘 출력되는 것을 확인할 수 있다.

 

 

Dreamhack rev-basic-1

 

x64dbg를 이용하여 문제에서 주어진 파일을 실행시켰다.

 

 

이 문제도 메인 함수를 찾기 위해 F8키로 계속 확인해보다가 cmd 창에 "input: "이라는 문구가 뜨는 함수 호출 부분에 breakpoint를 걸어주었다.

 

 

이 문제도 역시 Input값을 받아 test eax, eax를 해준 후  eax 값이 0이면 Wrong을 출력하고, 아니면 Correct를 출력한다는 것을 예상할 수 있다.

 

이 때 test 명령어 전 호출되는 함수에 breakpoint를 걸고 함수 내부로 들어가 보았다. 

 

 

함수 내부로 들어가 보면 위와 같이 cmp 명령어로 문자열을 하나씩 비교해주고 있는 것을 확인할 수 있다.

 

 

이때 하나씩 입력되는 문자열과 Input에 넣어주는 값이 같아야 하므로 Compar3_the_ch4ract3r를 입력해주면 된다.

 

 

위와 같이 Correct가 잘 출력되는 것을 확인할 수 있다.

'2021-2 STUDY > Reversing Study' 카테고리의 다른 글

Week02_Dreamhack rev-basic-2, rev-basic-3  (0) 2021.09.25
Week02_PE 파일 구조  (0) 2021.09.25
Week01_abex' crackme #1  (0) 2021.09.11
Week01_32bit/64bit 호출 규약  (0) 2021.09.11
Week01_64bit 레지스터  (0) 2021.09.11

+ Recent posts