codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰

codeengn.com

코드엔진 문제입니다.

리버싱 문제인데... 요즘 리버싱 공부를 해보고 싶어져서 풀어보려는 중입니다...

일 벌리기만 하는거같은데 ㅇㅁㅇ;;


바로 문제풀이 시작하죠

 

GetDriveTypeA의 리턴값이 무엇이 되어야 하냐고 하네요.

리턴값을 말하는 것을 보니 저건 함수인 것을 유추할 수 있습니다.

 

올리 디버거로 바로 넘어갑시다!

코드는 이게 끝입니다.

코드를 보아하니 00401018에서 GetDriveTypeA 함수가 실행되는 것 같습니다.

그래서 저부분에 브레이크를 걸어주었고,

또 00401024가 CMP, 즉 비교를 해주는 부분이기 때문에 알아보기 위해서 브레이크를 걸어주었습니다.

 

실행을 해보죠

이렇게 나오는것을 동일하다고 인식하도록 해야하는 것이겠죠?

 

함수 실행 전까지 왔습니다. 이제 이 함수를 직접 들어가서 살펴봐도 좋지만, 리턴값을 찾는 것이므로 이 함수가 실행된 뒤의 레지스터 변화를 찾아보겠습니다.

 

실행 전과 실행 후 레지스터입니다.

EAX값이 바뀌었고, ESP도 살짝 바뀌고, EIP는 당연히 바뀌는거고, 그 이외에는 뭐 큰 변화가 없습니다.

ESP도 상관 없으니까 EAX만 변했다고 볼 수 있겠네요.

 

그리고 이제 한줄씩 실행시켜서 CMP까지 이동해봅시다.

 

CMP까지 왔습니다. EAX와 ESI를 비교하네요. 현재 레지스터 값을 보니

EAX는 2가 줄었고 ESI가 3이 증가했습니다.

그리고 이 값이 같아야하나봅니다!

그러면 EAX의 값은 401003에서 2가 증가한 401005면 되는게 아니냐? 라고 물어보시면 맞습니다!

맞는데...

저기서 ESI는 0041003이 아닌 그냥 3이라서 EAX는 00401005가 아닌 그냥 5가 되는것이 맞습니다.

이게... 401000이 image base라서 그렇다... 라고 다른 블로그에 나오는데

맞긴 한데 이건 잘 모르겠습니다. 다른 디버거에서는 그냥 3이 나오는 경우가 있더라구요...

 

그래서 EAX의 값이 5가 되면 문제는 풀리게 됩니다.

짠! (이것도 EAX에서 401005를 입력해줘야합니다...)

'Hacking-기초 > [REV] CodeEngn.com' 카테고리의 다른 글

Basic RCE L04  (0) 2020.09.04
Basic RCE L03  (0) 2020.09.04
Basic RCE L02  (0) 2020.09.04

+ Recent posts