-
CodeEngn Basic RCE 12$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 6. 14:04
파일을 열어 보면 다음과 같이 Key를 입력받는 프로그램이 하나가 나옵니다.
해당 프로그램에서 옳바른 키를 입력했을때 문자열이 나올 것입니다.
올리디버거에서 문자열을 찾아보겠습니다.
너무나도 한눈에 보기 쉽도록 되어 있습니다.
저기 40107D에서 비교를 해서 같으면 Congratulation이 출력 되는 것 같습니다.
그렇다면 입력을 받는 함수가 있을터 해당 함수를 찾아보겠습니다.
GetDlgItemInt 이라는 함수가 있습니다.
해당 함수가 데이터를 입력받고 비교 하는 역할을 하는 것 같습니다.
BP를 걸고 F9로 따라가보면 입력 창이 뜨는데 저는 9라는 숫자를 입력했습니다.
그리고 아래로 내려가 보면 다음과 같이 반복되는 부분이 있습니다.
다음 사진의 구간을 계속해서 반복하는데
엄청나게 긴 문자열을 4바이트씩 무언가를 하는 것을 볼 수 있습니다.
그리고 해당 루프를 빠져 나오면 다음과 같이 CMP로 비교하는 구문이 나옵니다.
현재 EAX에 들어있는 값은 9 입니다.
아까 입력한 9라는 숫자가 EAX에 들어 갔다는 것을 알수 있습니다.
또한 CMP 명령어로 EAX와 7A2896BF를 비교 합니다.
즉, 입력한 값이 16진수로 7A2896BF면 Congratulation이라는 문자열이 뜨는 것입니다.
7A2896BF는 10진수로 2049480383입니다.
한번 입력을 해보겠습니다.
잘뜨는 것 같네요
키값도 알았으니 이제는 HxD에서 어떤 범위의 공간을 바꿔야 성공했을때 입력한 문자열이 나오는지 확인해 보겠습니다.
뒤쪽에 성공했을때 출력 하는 문자열이 있습니다.
해당 문자열을 지우고 키값을 입력하면 키값이 나올 것 입니다.
이렇게 말입니다.
범위는 0x0D3B ~ 0x0D45입니다. 44가 아니라 왜 45냐면 문자열 뒤에는 00 인 NULL값까지가 문자열 하나 이기 때문입니다.
Challenges Auth 에다가 20494803830D3B0D45를 입력하면 CLEAR가 됩니다.
'$ 리버싱 $ > CodeEngn Basic RCE' 카테고리의 다른 글
CodeEngn Basic RCE 14 (0) 2019.05.07 CodeEngn Basic RCE 13 (0) 2019.05.06 CodeEngn Basic RCE 11 (0) 2019.05.06 CodeEngn Basic RCE 10 (0) 2019.05.06 CodeEngn Basic RCE 9 (0) 2019.03.27