Reversing/코드엔진
CodeEngn Basic 01
마늘부추
2019. 6. 13. 11:00
1. CodeEngn Basic 01
레지스터의 값을 수정하는 문제이다.
1.1 풀이 과정
파일을 열어보면 프로그램의 흐름을 알 수 있다.
00401024에서 EAX와 ESI의 값을 비교 후 같으면 0040103D로 분기하는 조건문이다.
우선 GetDriveTypeA 함수의 반환값이 무엇인지 실행시켜보자.
함수 실행 후 EAX의 값은 00000003이다.
그다음 조건문 실행 직전의 값은 무엇인지 실행시켜보자.
EAX는 00000001로 원래 값에서 2가 감소되었음을 알 수 있다.
ESI는 최종적으로 00000003의 값을 가지게 된다.
함수 호출 후 분기문까지 DEC EAX가 두 번 등장하였으니 디버깅을 다시 시작해 GetDriveTypeA의 반환값을 초기값에서 2를 더해준 00000005로 수정해준다.
레지스터의 값을 임의로 바꾸려면 해당 레지스터를 더블클릭하면 된다.
0040103D 주소로 분기하는데 성공하였다.
1.2 Comment
컴퓨터의 환경은 Windows8.1인데 이 환경에서는 ESI 레지스터가 갖는 값이 달랐다.
codeengn을 통과하고 싶다면 vmware windows7 환경에서 해야 한다.