반응형

계산기 쪼물딱 거리기


목적: 계산기를 이리저리 만져보면서 리버싱 스킬 향상 및 동작원리 파악


목표:  프로그래머라면 계산기를 사용할때 HEX 값을 자주 사용한다. 하지만 계산기를 작동 시키면 Default로 되어 있는 값은 DEC이다. 이 Default 값을 HEX 값으로 바꾸어 보자.



기본적인 계산기 Default 값 


계산기를 올리디버거로 열어서 해당 루틴 찾아보기


  Search for -> All intermodular calls 에서 찾아보자



     이 많은 함수 중에 어떤것이 저 함수일까?? 조금 찾아보면 Check 관련 함수들이 나와 있다. 해당 Dec에 체크가 되어 있으니 저 함수중에 우리가 바꿔야 할 함수가 있을 것이다.


음.. Check 로 시작되는 함수중에 있을것 같은데.. 이럴땐 구글링이 쵝5~ 구글링 고고싱


CheckMenuItem()

http://msdn.microsoft.com/ko-kr/library/windows/desktop/ms647619(v=vs.85).aspx


CheckMenuRadioItem()

http://msdn.microsoft.com/ko-kr/library/windows/desktop/ms647621(v=vs.85).aspx


CheckRadioButton(핸들, 시작 라디오 버튼, 끝 라디오 버튼, 체크 할 라디오 버튼)

http://msdn.microsoft.com/en-us/library/windows/desktop/bb761877(v=vs.85).aspx



구글링을 해보니 맨 마지막에 있는 것이 약간 냄새가 난다 킁킁 


CheckRadioButton()에 BreakPoint(F2)를 걸고 실행 해보자


스택을 보면 다음과 같다.


구글링한 내용으로 해당 스택을 분석해 보면 IDfirst(시작 라디오 버튼) 313 이고, IDlast(끝 라디오 버튼) 316이다. 또한 체크 되어 있는 라디오 버튼인 IDcheck가 314에 해당한다.


다시 계산기로 돌아와서, 해당 사항을 비교해보면 


 

HEX있는 곳이 시작 점(313 )으로 가정하고 보면 Dec가 체크 되어 있는 곳이(314)로 두 번째이고 마지막 Bin이 316이라고 추측해볼 수 있다.


이 추측이 맞는지 한번 확인 하는 작업을 해보자.



스택에 있는 IDcheck 값을 임시로 315로 바꾸어 보았다.


수정 후 실행을 해보면 다음과 같이 Oct에 체크되어 있는것을 볼 수 있다.


이로써 위의 추측이 사실이라는 것을 증명하였다.


그러면 이제 계산기 코드를 패칭해 보자.

일단 CheckRadioButton() 함수로 가보자



001AD4B3에서 IDcheck값에 ESI를 넣어 주고 있는데 ESI에 들어있는 값이 어디서 왔는지 찾아보면

001AD4AF에서 mov을 통해 값이 들어간다는 것을 알 수 있다.


대입하는 내용을 보면 다음과 같다.


0013E5E8에 있는 값을 가지고 온다는 것을 알 수 있다. 


그렇다면!!!! 0013E5E8로 고고싱 ~_~



리틀엔디언 형식때문에 3A 01로 되어 있는 것을 볼 수 있다.


이 값을 HEX체크 박스가 있는 시작점(313)으로 바꿔주면 될것이다. 313은 십진수고 HEX값으로 바꿔주면 139이다. 

그러면 리틀엔디언 형식을 고려하여 39 01 이렇게 넣어주면 될것으로 보인다.


더 조사하다 보니 이미 39 01 이 이미 입력되어 있다는 것을 파악하였다. 





001AD4AF에서 [EBP+10] = 13A으로 되어있는데 [EBP+10]을 [EBP+8]로 수정 하면 내가 원하는 139을 가지고 올 수 있다.




수정한 후 Copy to exeutable -> All selections을 선택 후 save files로   실행파일을 저장하자


이제 해당 실행 파일을 확인해보자 !_!




굿굿 잘 들어 왔군..


이것으로 글을 마치겠습니다. 


반응형

+ Recent posts