KairoSoft - KingDom Story 왕국건설스토리 모드분석
많은분들이 방사능의나라 일본겜 왕국건설스토리 세이브연동가능하게 만들어달라는 요청이있어 한번 열어보았습니다
일단 외국인이 만든 모드를 알아보니 다이아캐쉬 무제한 사용 버전이 존재하더군요
하지만 버전이 업데이트 될때마다 기존의 세이브데이터연동이 되지않아 날아간다는 이야기를 들어보니 아마 해외버전은 작업자들마다 서명이 다르니 생기는 문제가 아닐까 싶습니다
일단 외국인 노동자가 어느부분을 수정했나 비교분석을 위해 코드를 까봐야겠죠
먼저 코드를 비교하기위해 구글 플레이스토어에서 순정 '왕국건설스토리' APK를 뽑아내, 외국인노동자의 손길이 닿은 mod apk
이렇게 두개의 APK를 준비합니다
코드를 비교해보니
외노자가 총 다섯군데를 손본것이 확인되네요
각각
수정된 위치1 - 오프셋 5C625C
F0 4D 2D E9 18 B0 8D E2 - 원본
FF 04 E0 E3 1E FF 2F E1 - 수정된 코드
MVN R0, #0xFF000000
BX LR
수정된 위치2 -오프셋 D815AC
F0 4B 2D E9 18 B0 8D E2 - 원본
00 00 A0 E3 1E FF 2F E1 - 모드 (0으로 리턴=false)
뭔진 모르지만 D815AC 여기는 그냥 False처리 혹은 0으로 리턴시키네요
수정된 위치3 - 오프셋 D81790
F0 4B 2D E9 18 B0 8D E2 - 원본
00 00 A0 E3 1E FF 2F E1 - 모드 (0으로 리턴=false)
여기도 뭔진 모르지만 D815AC 여기는 그냥 False처리 혹은 0으로 리턴시키는것을 확인
수정된위치4 - 오프셋 81C50
F0 4B 2D E9 18 B0 8D E2 - 원본코드
00 00 A0 E3 1E FF 2F E1 - 수정된코드
여기도 뭔진 모르지만 D815AC 여기는 그냥 False처리 혹은 0으로 리턴시키는것을 확인
수정된위치5 - 오프셋 D8B774
70 4C 2D E9 - 순정코드
1E FF 2F E1 -수정된코드 - 뭔진 모르지만 이부분을 실행 안하고 BX LR로 바로 리턴시켜버림
이제 저 오프셋이 가르키는곳이 어떤 메소드들인지 덤프를 통해 IDA로 해당 오프셋위치의 메소드명을 확인해보니
5C625C - CoinManager클래스의 GetCoin() 메소드 - 예상했던대로 어마어마한 수치를 입력하고 리턴한게 게임캐쉬인것을 확인
D815AC - KairoPlugin클래스의 LicenseCheckForSugo() - 라이센스체크Sugo 관련 메소드였네요 False로 리턴시켰으니 체크를 무력화시킨듯
D81790 - KairoPlugin클래스의 LicenseCheckForAu() - 라이센스체크Au 관련 메소드였네요 False로 리턴시켰으니 체크를 무력화시킨듯
D81C50 - KairoPlugin클래스의 LicenseCheck() - 라이센스체크 관련 메소드였네요 False로 리턴시켰으니 체크를 무력화시킨듯
D8B774 - LicenseChecker클래스의 DoCheck()메소드 - 라이센스첵 관련 클래스에서 체크실행메소드인듯한데 바로 리턴시켰으니 실행이 되지않을듯하네요
이렇게 1개의 캐쉬조작코드와 4개의 라이센스 체크 무력화 코드로 이루어진 모드였습니다
smali쪽에서는 어떤장난을 쳤는지 확인해보니
androidmanifest.xml에서
hookpms가 들어있는것을 확인
서명값 체크까지... 크.. 지독한 새끼들이네
일단 이정도 파악을 마치고 순정 APK에 위의 작업을 적용해 사인작업까지 하니 실행이 안되네요 ..ㄷㄷ (뭔가 아직 놓친게 더있단말인가!)
몇시간 더 삽질을 하다가 도저히 못찾겠다 에잇!
앞으로 순정설치까지 한걸음인데..사람 돌아버리게만드는 카이로소프트 +_+
하지만 현재까지 분석된코드들로 루팅기기나 LD플레이어에서 정상적으로 실행되는것을 확인.
루팅환경에서는 업데이트로인한 버전변경에도 세이브파일이 연동되게는 일단은 성공.. 절반짜리 성공이라 아쉽긴하지만..
작업된 루팅용 왕국스토리는 상단 링크 몽키치트닷컴에 있습니다