SteffenLee

[CodeEngn]basic 07 본문

Reversing/CodeEngn

[CodeEngn]basic 07

SteffenLee 2018. 1. 10. 18:55

코드엔진 07번 풀이입니다.

문제가 c드라이브 이름이 codeengn일 경우 생성된 시리얼을 찾으면 되나 봅니다.

 

그럼 c드라이브 이름을 codeengn으로 바꾸고 시작하겠습니다.

 

 

이제 올리디버거로 열어보겠습니다.

 

일단 한 번 실행시켜 보겠습니다.

이런 식으로 입력을 하니

시리얼이 다르다고 뜨네요.

그럼 밑으로 내리다 보면

많은 문자열이 보이는 곳이 있습니다.

밑에는 실패나 성공을 했을 때 뜨는 문구도 있습니다.

그리고 중간에 아까 입력했던 asdf라는 문자열도 있군요.

그렇다면 저 부근에서 문자열 비교가 일어난다는 걸 추측 할 수 있습니다.

추측이 맞는지 확인 해봅시다.

 

성공, 실패 여부를 확인하는 곳 앞에는 JE분기문이 있습니다.

이 분기문은 ZF를 보고 판단하여 분기하게 됩니다.

 

그렇다면 저 부분에서 가장 의심스러운 부분은 004010F7이 되겠군요.

 

004010F7에 BP를 걸고 실행을 해보면 레지스터 창에 ZF가 켜지는 걸 볼 수 있습니다.

 

이로서 저 004010F7에서 호출하는 부분에서 문자열 비교가 일어난다는 걸 알 수 있습니다.

 

그럼 그 위에 string1, 2가 비교 대상이 되겠구나를 조심스럽게 예측해봅니다.

그럼 string1의 내용을 프로그램에 넣어 봅시다.

 

 

그대로 집어넣고 F8를 눌러서 ZF를 확인해봅시다.

ZF가 1이 되었습니다.

이 상태로 쭉 실행하면

맞다고 뜨네요.

 

저희가 찾아야 할것은 뒤바뀐 볼륨의 이름입니다.

중간에 보면 GetVolumeInformation이라는 함수가 호출 되는데 이 함수는 볼륨의 정보를 읽어오는 함수입니다.

그럼 그 함수가 호출 되는 부분에 BP를 걸고 실행시키면.

볼륨 이름이 들어오게 됩니다.

그리고 실행을 시켜서 lstrcatA가 실행이 되면 뒷부분에 4562-ABEX가 붙습니다.

그렇게 되면 CodeEngn4562-ABEX가 되겠지요.

그럼 아까 정상적으로 실행시켰을 때는 EqfgEngn4562-ABEX입니다.

CodeEngn이라는 부분이 EqfgEngn으로 바뀌었군요.

볼륨이름이 CodeEngn이었으니 바뀐 EqfgEngn이 이번 문제의 정답겠군요.

 

인증해봅시다.

성공입니다.

감사합니다.

 

 

'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn]basic09  (0) 2018.04.08
[CodeEngn]basic 08  (0) 2018.01.11
[CodeEngn]basic 06  (0) 2018.01.07
[CodeEngn]basic 05  (0) 2018.01.05
[CodeEngn]basic 04  (0) 2018.01.03
Comments