Be myself :: 지뢰 찾기 핵

달력

32024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

지뢰 찾기 핵

Reversing 2014. 7. 29. 10:38

<지뢰 찾기 패치>

윈도우 xp 시리즈 지뢰 찾기를 시작할 때 지뢰가 보이도록 패치 해 보겠다.

사용한 툴은 오직 OllyDbg뿐이다.

자, 일단 올리디버거로 실행시키고 F8로 쭉~ 따라 가다 보면 다음과 같은 루틴을 만난다.


1005330이 0이 될 때까지 반복하는 구간인데, 초급 난이도에서 지뢰가 10개임을 생각하면 10개만큼의 지뢰를 배치하는 것 같다. 사실, 이 루틴을 찾는 방법은 그냥 무작정 F8로써 분석해 가면서 찾아도 되는데, 나 같은 경우는 srand()함수 부분을 먼저 찾았다. (지뢰가 무작위로 배치될 것이기 때문에 이 부분위주로 찾으면 지뢰가 배치되는 부분을 찾을 수 있다.) 그 후 이 부분 위주로 분석하고 지뢰를 밟았을 때, 지뢰를 보여주는 함수를 찾았고, 이 부분으로 Jmp하게 해서(인라인 패치를 통해) 지뢰가 시작할 때 보여지도록 했다.

아무튼, 위 그림 부분을 하나하나 분석하다 보면 메모리에 다음과 같은 값들이 써진다.

지뢰의 개수를 나타내는 곳은 0x1005334부분이고 이 메모리 근처에 지뢰를 배치하는 판(?)을 그리는 것 같다. 지뢰가 위치하는 곳은 0x8F로 표시하는 듯 하다. 따라서 게임이 끝났을 때, 지뢰가 있는 부분을 표시하기 위하여 0x8F부분에 반드시 접근할 것이므로 저 부분에 하드웨어 브레이크 포인트를 걸어 실행 후 지뢰를 밟으면 지뢰를 보여주는 함수가 나온다.!!


0x1002F80 으로 시작되는 함수이다. 자 그럼, 우린 지뢰를 배치하고, 화면에 뿌리고 그 이후에 사용자의 입력 값을(클릭하는 것) 받는 루틴에서 잠깐 프로그램의 실행을 0x1002F80으로 돌리고 다시 원래의 실행을 하면 지뢰를 보는 상태로 게임을 할 수 있다. 그래서 다음과 같이 패치하자.

(사용자의 입력 값을 받는 루틴이다.)

여기서 우린 0x1002380부분에서 패치를 할 것이다. (이 부분에 패치를 하는 이유는 JMP명령어가 5바이트를 차지하므로 적당한 부분을 고른 것일 뿐이다.) 다음과 같이 바꾸자

이제 오른쪽 클릭-> Copy to executable -> All modifications 을 누른 후 오른쪽 클릭 -> save file을 눌러 패치 파일을 저장하면 모든 패치가 끝나게 된다.

'Reversing' 카테고리의 다른 글

vmware 디버깅  (0) 2015.01.28
peda 설치법  (0) 2014.10.17
치트엔진을 활용한 환세취호전 핵  (2) 2014.07.28
DLL Injection  (1) 2014.05.17
PEB를 활용한 안티디버깅  (0) 2014.05.16
Posted by flack3r
|