본문 바로가기

리버싱/CodeEngn

Basic level 1

처음 프로그램을 실행시키면 왼쪽 창이 나타나는데 "OK"를 누르면 오른쪽창이 나타난다

 

사진에서 "MessageBoxA" 함수를 볼 수 있는데 이 함수는 메시지 박스를 띄워주는 함수이다. 아래부분에는 "Ok, I really think that your HD is a CD-ROM! :p"라는 문자열을 볼 수 있는데 딱봐도 성공했을 때 나타날 문자열임을 알 수 있다.
문제에서 GetDriveTypeA의 리턴값을 구하라고 했기 때문에 "GetDriveTypeA" 함수를 호출하고 난 후의 번지에 BP를 걸어서 리턴값을 확인하도록 하자

 

프로그램을 실행시키면 BP를 걸어둔 주소에서 실행이 멈추게 된다. 그리고 레지스터값을 확인하면 EAX값이 3으로 변한 것을 알 수 있다 다시말해 "GetDriveTypeA" 함수의 리턴값은 3이다

 

F8을 누르면서 분석하다가 여기에 오면 EAX와 ESI값을 비교해서 같으면 분기가 일어나는 조건문을 볼 수 있다. 분기되는 주소값을 보니 성공메시지를 띄워주는 곳으로 이동하는 것을 알 수 있다 즉, 분기가 되도록 수정해야 한다.
위 사진을 보면 EAX는 2번 감소하고, ESI는 3번 증가하는 것을 알 수 있다
ESI, EAX가 변하기 전 값, 변한 후 값이다.

EAX가 ESI보다 1 작으므로 처음 리턴값 3에서 +1해서 리턴값을 4로 바꿔주면 성공 메시지가 출력된다

 

 

참고

MSDN에서 "GetDriveTypeA" 함수를 검색하면 

MSDN에선 리턴값이 5라고 되어 있다. (임의로 만든문제라서 다른게 아닐까...?)

 

'리버싱 > CodeEngn' 카테고리의 다른 글

Basic level 3  (0) 2019.08.31
Basic level 2  (0) 2019.08.31