히어로 나이츠 MOD 분석
타 해외포럼의 자료를 가져와 원본과 비교하여 분석을 해보는 작업을 하였습니다.
사진을 보시면 1. 보석 사용시 감소X 2. 돈 사용시 감소X 3. 부활포인트 감소X 가 패치된 모드입니다.
그 후 간단하게 알집으로 확인한 결과 따로 보안 모듈을 장착하지 않은듯 하여 바로 HXD로 libil2cpp.so 원본 파일과 모드 파일들을 비교해보았습니다.
HXD 분석에 비교기능을 사용하여 다른 부분을 찾았습니다. 보통 4,8 정도 길이가 되어 4길이씩 구분했습니다. 그리고
줄 오프셋과 부분 오프셋을 확인 후 09 00 90 E0 과 09 00 50 E0 을 ARM 코더 사이트에 분석을 돌려보았습니다.
원본코드 09 00 50 E0는 SUB(뺴기)를, 모드코드 09 00 90 E0는 ADD(더하기)를. 즉 코드가 실행시 SUB(빼기)가 되어야할 코드를 ADD(더하기)로 패치한 것 입니다.
이 코드만 보고 전부다 파악하기 힘들기 떄문에 SO 파일과 메타데이터를 덤프하여 IDA 오프셋 코드장과 IDA 스크립트를 얻어보도록 하겠습니다.
덤프 후 IDA에서 스크립트 로드 후 2가지 방법으로 분석이 가능합니다.
1. 오프셋 코드장에서 아까 찾은 오프셋을 검색하여 펑션을 찾는다.
2. IDA 뷰어에서 오프셋 이동 후 확인한다.
첫번째 방법 보다 2번째 방법이 쫌더 효율적 이기때문에 바로 2번째 방법으로 넘어가도록 하겠습니다.
(SO파일 전부다 로드 후 스크립트까지 실행한 상태입니다.)
아까전에 찾아 놓았던 오프셋을 점프기능을 통해 찾아간 후 IDA 뷰어로 확인해본 결과
DataManager$$useGold 라는 펑션에서 SUB코드가 ADD코드로 변경되었다는 것을 확실히 알게 되었습니다. 그러면 다른 코드도 비슷할테니
DataManager$$use펑션을 이용하여 찾아보았습니다.
패치된 SO는 간단히 값 체크 후 차감해주는 부분에서 더하기로 수정을 하였다는것을 알게되었습니다.
이후 차감을 원하지 않는 다른 기능을 찾아 SUB 를 ADD 으로 수정해주시면 정상적으로 작동할 것 입니다.
그 예로 제가 한번 새로운 기능을 추가 해보도록 하겠습니다.
DataManager$$useExpStone 펑션에서 위에서 본 사진과 같은 구조를 가지고 있습니다.
SUB 부분을 클릭하시고 Hex 뷰어를 통해 오프셋과 헥스코드를 알아봅니다.
오프셋은 0134EB20 헥스코드는 04 00 50 E0 입니다.
먼저 ARM 코더 사이트에서 SUBS R0, R0, R4 형식을 복사 해주신 후 ADDS R0, R0, R4 로 변경 후 컨버팅 합니다.
그러면 헥스 코드 04 00 90 E0 가 나옵니다.
HXD에서 아까 찾아 놓았던 0134EB20 오프셋으로 이동 후 04 00 50 E0 -> 04 00 90 E0 으로 수정해주시면 경험치 스톤 차감X 기능 완성!
이로써 히어로 나이츠 MOD 분석글을 마칩니다.
추신. 처음으로 작성해보는 분석글이라 말투나 언어가 어색할 수 있습니다 ㅠㅠ 양해 부탁드려요!