KOEI/신장의 야망 시리즈

신장의 야망 혁신PK 추가시나리오와 관련된 실행파일 수정기록.

K66Google 2022. 12. 1. 09:42

신장의 야망 혁신PK의 추가시나리오는 총 4개가 있다. (06, 07, 08, 09)

이 중에서 08번과 09번 추가시나리오 파일을 설치하면 레지스트리에 KAKUSHIN0x 라는 항목이 만들어진다.

문제는 여기서 발생한다.

항목의 값이 컴퓨터마다 전부 다른 것이다.

이 때문에 혁신PK 추가한글패치를 업데이트 할때, 동봉한 추가시나리오 레지스트리 파일은 내 컴퓨터에서만 효력이 있었고 다른 컴퓨터에서는 무용지물이었다.

 

그것때문에 나는 또 Ollydbg를 열고 실행파일을 뜯어고쳐야 했는데, 이 과정을 여기에다 기록해둔다.

(아래 과정은 스팀판 실행파일 기준입니다.)

 

추가시나리오를 열고 말고를 결정하는 방법은 아마 레지스트리를 읽고 그게 참이냐 거짓이냐 아니면 값이 존재하지 않느냐를 따져보는 방식일 것이다.

그래서 나는 CreateFontA 찾듯이 RegQueryValue...라는 함수를 찾아가서 나오는 모든 주소에 브레이크 포인트(F2)를 걸었다.

그리고 게임을 실행해서 (Ollydbg 상에서 재생 버튼 눌러서 실행시켜야 한다.) 추가시나리오 08번 항목을 클릭했다.

그러니 멈추는 곳이 009E4E1C였다.

 

 

하지만 어디의 점프 구문을 바꿔야 레지스트리 확인 과정을 뚫고 나갈 수 있는지 헷갈리기만 하였다.

그래서 나는 어쩔 수 없이...

 

'추가시나리오가 실행이 되는 경우'

 

'추가시나리오가 실행이 안 되는 경우'

 

둘 다 코드 창 화면 녹화를 했다.

'실행이 되는 경우'는

[추가시나리오 08번 클릭 → 009E4E1C에서 멈춤 → 시나리오 파일이 열려서 가문 선택 지도가 나올때까지 Ollydbg에서 계속 F8키 눌러서 넘김] 이런 식으로.

'실행이 안 되는 경우'는

[추가시나리오 08번 클릭 → 009E4E1C에서 멈춤 →  '플레이 데이터의 로드에 실패했습니다.' 가 뜰 때까지 Ollydbg에서 계속 F8키 눌러서 넘김] 이런 식으로 녹화했다.

 

그런 후에 팟플레이어 두 개 띄워서 녹화 영상을 동시에 재생시키고...

JNZ, JA, JE... 이런 점프 구문에 도달했을때 점프를 하는지 안하는지를 잘 살펴본다.

예를 들어, '실행 되는 경우' 에서는 점프를 했는데 '실행 안 되는 경우' 에서는 점프를 안 했다? 그럼 거기 구문을 JMP로 바꿔서 강제로 점프를 시킨다든가... 강제 점프를 해도 안되면 그냥 그 구문을 NOP 처리해서 지워버린다든가 하는 것이다.

 

그렇게 삽질을 거듭한 끝에 찾아낸 답은 다음과 같았다.

 

* 변경사항 
009E4E24 - JNZ를 NOP 처리.
009E4E80 - JNZ를 JMP 처리.
009E506E - JA를 JMP 처리.
009E509C - JA를 JMP 처리.
009E50CA - JA를 JMP 처리.
009E5123 - JNZ를 JMP 처리.
009E515F - JE를 JMP 처리.
009E5194 - JE를 JMP 처리.

 

이렇게 하니까 08번 09번 추가시나리오도 레지스트리 설정 없이 잘 열리게 되었다.