자료 출처
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 |