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

환세취호전 핵 만들기

오랜만에 고전게임이 생각나서 환세취호전을 했는데 너무 재미있었다. 그래서 핵까지 만들게 되었다. ㅋㅋㅋ

사용한 툴은 OllyDbg와 치트엔진 그리고 환세취호전을 창모드로 만들어 주는 인터넷에서 돌아다니는 툴을 사용했다. 핵이 적용된 save파일은 밑에서 다운받자.


savedat2.dat

환세취호전.zip


자 일단, 핵을 만들기 전에 한번 게임 해봐야 할 것 같아 한번 켰더니 '켠킴에 왕까지' 프로그램 빙의되서 엔딩까지 보고 말았다. ㅋㅋㅋ

음. 암튼 치트 엔진을 키고! 일단 돈부터 조작해보자.

돈에 해당하는 값을 입력하고 First Scan을 누르고 224의 값을 가진 주소값(변수)들을 전부 출력한다.

그 후 몬스터 한 마리 잡고 돈이 올라갔을 때, Scan Type에 Changed value를 선택하고 First Scan옆에 있는 Next Scan을 누른 후 값이 변한 변수들을 확인해서 현재 돈과 같은 값을 가지는 변수를 찾는다. 그것이 바로 돈의 변수 주소 값이다.


(첫 번째 스캔 눌렀을 때)


(두 번째 scan)

이러한 원리로 체력, 기력, 공격력, 방어력 등의 변수의 주소 값을 구할 수 있다. (레벨업을 하면 이 값이 변동되므로 변한 값 위주로 scan해서 파악함.) 주의할 점은 캐릭터들의 능력 치는 구조체 형식으로 저장이 되어 있을 것임을 예측 할 수 있다. 따라서 캐릭터 별로 능력치의 값들은 서로 가까운 주소 값에 몰려 있을 거라 생각할 수 있다. 돈을 가진 변수 또한 마찬가지 이므로 값을 찾을 때 0x400000 부분의 주소 위주로 찾으면 쉽게 다 찾을 수 있다.

다음은 캐릭터 별 체력, 기력, 공격력, 방어력을 찾은 화면이다.

자 이제 캐릭터 별 레벨, 체력, 기력, 공격력, 방어력 을 완전히 통제할 수 있고, 사실 혼자 핵을 쓸려면 이대로 플레이 하면 된다. 하지만, 우린 다른 사람도 우리의 핵 패치를 이용하고 싶을 것이므로(그래야 할 텐데..) 범용성을 위해 어떤 프로그램이나 파일을 만들어야 한다.

생각을 해봤는데, DLL인젝션을 통해서 캐릭터 특성 값을 하나하나 변경할 수 있지만 너무 큰 프로젝트가 될 것 같고 간단하게 특성 값들이 조작된 Save파일을 만든다면, 다른 사람들도 Save파일을 불러오기만 하면 거의 무적이 된 게임 캐릭터들을 만나볼 수 있을 것이다. ㅎㅎ

그럼 Save파일을 불러와 그 구조를 확인하자.

흠.. 그냥 이렇게 봐선 뭐가 뭔지 모른다. 그렇지만, 어떤 덩어리(패턴)등이 3번 반복되는 것을 볼 수 있는데(화면엔 2덩어리 밖에 안 잡혔다.) 게임에서 우리가 플레이 하는 캐릭터가 3명임을 감안 할 때, 이 덩어리들은 각 캐릭터들의 특성을 저장한 구조체임을 추측 할 수 있다.

이를 더 확실히 하기 위해 OllyDbg를 열고 치트엔진으로 확인한 변수들의 주소 값을 확인해 어떠한 형태로 캐릭터 특성 값들이 저장되는지 확인 해 봐서 Save파일과 비교한 후 Save파일의 어떤 부분의 값이 무엇을 뜻하는지 확인하는 과정을 거치고 알아 낸 후 조작하고 파일을 저장하면 끝이다. ㅋㅋㅋ 무슨 말인지 몰라도 상관없다. 다음의 그림들을 보면 확실히 알 것이다.

아타호의 level은 0x457756주소에 2Byte형태로 저장되어 있다. 이를 올리디버거로 확인 해 보면 다음과 같다.

0x457756 부분을 확인 해 보면 저런 식으로 값이 들어가 있다. [01 00]->아타호 레벨 부분이고 다음 [1E 00 1E 00 1E 00] 부분은 아타호의 체력과 관계된 부분이다. 근데 위에 빨간색으로 표시된 부분은 어디서 많이 본 것 같지 않나? 그렇다. 아까 save파일에 덩어리 부분의 일부이다.

위의 offset값 0x11A 부분부터 올리디버거로 확인한 저 빨간색 블록과 비교해 보자.

거의 똑같지 않나? 그렇다. 올리디버거에서 확인한 구조체 부분과 save파일의 구조체부분이 다르지 않다는 것이다. 그렇다는 것은 치트엔진과 Ollydbg를 이용해 save파일에서 캐릭터들의 특성 값이 어디에 위치하는지 알아 낼 수 있다는 것을 의미한다.

그래서 하나하나 알아보면 다음과 같다.

여기서 공격력-update와 방어력-update부분은 레벨업 시 레벨업을 처리하는 함수가 참조하는 부분인데, 이 부분을 조작하지 않으면 캐릭터가 레벨 업을 할 때 애써 조작한 공격력이나 방어력이 원래대로 돌아가 버린다. 암튼 위에 부분의 구조는 아타호의 값들인데 다른 캐릭터들의 특성값들도 동일한 구조로 저장되어 있으므로 여기까지 이해 했다면 나머지 린샹이나 스마슈의 특성값들은 쉽게 찾을 수 있을 것이다.

다음은 내가 파악한 값들이다.

<raw 0x8>

4바이트 -> 돈

--------------------아타호------------------

<0x457756>

<raw 11a>

첫째 2바이트 -> 레벨

둘째 2바이트*3 ->체력

셋째 2바이트*3 ->마나

 

<raw 142>

2바이트 -> 공격력

 

<raw 146>

첫째 2바이트 -> 방어력

 

<0x45780E>

<raw 304>

첫째 2바이트->공격력 업데이트

<raw 308>

첫째 바이트 ->방어력 업데이트

--------------------------------------------

 

-------------------린샹---------------------

<0x45782E>

<raw 0x320>

첫째 2바이트 -> 레벨

둘째 2바이트*3 -> hp

셋째 2바이트*3 -> mp

 

<0x457844>

<raw 0x358>

첫째 2바이트 -> 공격력

+2바이트

둘째 2바이트 -> 방어력

 

<raw 0x51a>

첫째 2바이트 -> 공격력 업데이트

+2바이트

둘째 2바이트 -> 방어력 업데이트

-----------------------------------------

 

------------------스마슈--------------------

<0x457906>

<raw 54c>

첫쨰 2바이트 ->레벨

둘째 2바이트*3 ->hp

둘째 2바이트*3 ->mp

 

<raw 574>

첫째 2바이트 ->공격력

+2바이트

둘째 2바이트 ->방어력

 

<raw 736>

첫째 2바이트 -> 공격력 업데이트

둘째 2바이트 -> 방어력 업데이트

자, 이렇게 해서 레벨, 체력, 공격력 등을 조작해서 자기가 원하는 값으로 세팅한 후 저장하면 트레이너 save파일이 만들어 진다. ㅎㅎ

완성된 save 파일을 로드 했을 때의 사진이다.

'Reversing' 카테고리의 다른 글

peda 설치법  (0) 2014.10.17
지뢰 찾기 핵  (1) 2014.07.29
DLL Injection  (1) 2014.05.17
PEB를 활용한 안티디버깅  (0) 2014.05.16
WinDbg, xp 연동  (0) 2014.05.16
Posted by flack3r
|