본문 바로가기

OS-서버

곰플레이어 닷지 리버싱

반응형



자료 출처 

https://m.blog.naver.com/PostView.nhn?blogId=popqser2&logNo=221247913117&proxyReferer=https%3A%2F%2Fwww.google.com%2F

https://www.youtube.com/watch?v=ORzQ6nnd3NI  ← 영상



▣ 사전지식



1. BreakPoint : BP를 만날 경우 코드 실행을 멈춘다.

2. 재시작(Ctrl+F2) 하면 설정해뒀던 브레이크 포인트는 삭제된다.

3. Attach : 실행중인 프로세스를 불러오고 해당 프로세스는 중지된다.

4. Call Stack : Call되는 함수 목록을 출력한다.

5. Execute till return ( Ctrl + F9) : 함수내부로부터 빠져나온다.





▣ 닷지 리버싱 과정



닷지에서 메세지박스가 호출되는 위치를 찾은 뒤 상위로 올라가서

죽는부분을 찾아 패치하도록한다.


닷지 프로그램은 내부데이터가 패킹되었으므로

닷지 exe를 실행 후 올리디버거에서 attach로 잡아야한다.


그 후 M(Memory Map)을 클릭해서 

Owner - Section - Contains

Address Dodge .text Code

위 탭에 해당하는 메모리 주소를 확인한다.


메인화면에서 Ctrl+G(Enter expression to follow)를 통해 메모리맵에서 찾은 Dodge에 해당하는

주소로 이동한다.


Search for - intermodular calls로 사용된 함수 목록을 확인할 수 있다.

메세지박스 API는 MessageBoxA다.


Destination탭을 눌러서 이름순으로 정렬하고 위 API명을 그대로 타이핑한다.


User32.MessageBoxA 함수를 찾아서 모두 브레이크 포인트(F2)를 걸어주어

메시지를 출력할 때 정지하도록 만든다.


그리고 BP에서 F8을 눌러 메시지 박스를 출력하여 

닷지에서 죽었을 때 나오는 메세지박스를 찾고 Ctrl+A를 눌러서 어셈블리 코드를 분석하게한다.


스택덤프창에서 게임오버 메시지박스를 호출하는 곳의 위치를 확인한다.(Alt+K)


해당 호출되는 위치로 가보면 Case문에서 비교후 WM_USER가 400일 때 실행된다.


wm_user는 PostMessage나 SendMessage 관련있으므로 해당 API를 올리디버거에서 검색해본다.

검색하기전 B에 들어가서 기존에 걸어놨던 BP를 삭제한다. 


찾은 해당 API에 bp를 걸고 확인해본 결과 ebp 값이 2면 PostMSG(wm_user(400)) 호출한다.

즉 이 부분이 바로 총알이 맞았을 때 실행되는 구간이다.


PostMSG 코드 위로 올라가서 ebp 값이 무엇에 의해 바뀌는지 확인한다.

[

먼저 HexDump에서 Goto로 40D858주소로 이동 후 메모리브레이크포인트를 건다.


해당주소에서 변화되는 값을 실시간으로 확인하여 영향을 받는 주소로 이동해서

그 값을 변조한다.

.....................................................................................................................................................................................................


※ 메모리브레이크포인트

- 하드웨어 브레이크 포인트와 비슷하나, 범위 지정이 가능하다는 점에서 다르다.

- 정확히 시작하는 주소와 저장공간의 데이터를 알고 있다면 하드웨어 브레이크 포인트를 사용    할 수 있지만, 그렇게 알 수 없다면 메모리 브레이크 포인트를 사용한다.



반응형

'OS-서버' 카테고리의 다른 글

CPU 가상코어(스레드)  (0) 2019.04.17
컴퓨터 부팅 과정  (0) 2018.12.09
어셈블리어 개념 정리  (0) 2018.12.09
VirtualBox NAT 포트포워딩  (0) 2017.12.20
[운영체제보안] 버퍼오버플로우  (0) 2017.06.07