게하! 개하! (게임도 하고 개발도 하고)

윈도우 리버싱 01 본문

SISS (2017-2018)/윈도우 리버싱

윈도우 리버싱 01

Sorrel 2017. 11. 28. 23:38

글 정리 및 블로그 편집은 나중에 하겠습니다.

 

코드엔진에서 제공하는 Basic RCE 01 번 문제를 풀겠습니다.

 

일단 문제는

이것입니다.

GetDriveTypeA의 리턴값이 무엇인가?

 

 

일단 코드를 봤습니다.

 

오... 초보인 저는 뭐가 뭔지 모르겠습니다.

일단 빨간 글씨로 MessageBox가 보입니다. MessageBox 함수입니다.

 

이렇게 봐서도 하나도 모르겠으니 F9로 실행시켜봅시다.

 

 

첫번째 MessageBox로 호출된 문구가 뜹니다.

Make me think your HD is a CD-Rom.

CD-Rom으로 생각하게 만들랍니다.

 

 

...?

 

 

 

 

 

 

다음에 호출된 문구입니다.

 

아무것도 고치지 않았으니 당연히 FAIL입니다.

 

40103D는 그냥 지나쳐버리는군요.

 

 

 

 

 

CMP는 두 값을 비교하여 같으면 0을 반환합니다.

밑에 있는 JE는 반환된 값이 0이면 실행되는 함수입니다.

 

아까 전체를 실행하였을 때 JE가 하라는대로 40103D로 점프되지 않았으니 EAX와 ESI의 값은 다를 것 같습니다.

 

 

 

 

CMP일 때의 EAX와 ESI값을 봅니다.

 

EAX=1

ESI=3

 

예상했던 대로 다릅니다. 이 둘을 같은 값으로 고치면 되는데 막혔더라고요 이 방법은 패스.

 

 

그렇다면 JE를 실행시키려면 CMP가 비교하는 두 대상이 같으면 되는데 그 점을 이용해보자

 

 

 

같은 ESI끼리 비교하면 당연히 같은 값이 나올테지

 

 

 

같은 EAX끼리 비교해도 당연히 같은 값이 나올테지

 

 

 

코드를 변경했더니 저렇게 빨간 색으로 변했습니다.

변경하기 전에는 점프하지 않고 401028로 PUSH 되었었는데 코드를 변경해주니 바로 40103D로 점프되어 PUSH 됩니다.

 

결국 40103D부터의 MessageBox 함수가 실행되어 풀이에 성공한 메세지 박스가 떴습니다. 짝짝짝

'SISS (2017-2018) > 윈도우 리버싱' 카테고리의 다른 글

윈도우 리버싱 05  (0) 2017.12.04
윈도우 리버싱 04  (0) 2017.12.04
윈도우 리버싱 03  (0) 2017.12.04
윈도우 리버싱 02  (0) 2017.12.04
윈도우 리버싱 01  (0) 2017.11.28
0 Comments
댓글쓰기 폼