에뮬 게임 세이브 파일 분석하기 힘들까요?
글쓴이: lalupo20 / 작성시간: 목, 2019/05/09 - 3:11오후
아직 만들고 있는 프로그램이 있어서 시작은 못했는데
게임보이(옛날 닌텐도 휴대용 게임기) 에뮬 포켓몬 세이브 파일로 로그인해서
다른 사람과 대전할 수 있는 그런 게임을 만들고 싶은데
세이브 파일 분석하기 힘들까요?
세이브파일에 현재 소지하고 있는 포켓몬, 레벨, 기술
이런 정보가 다 있을테니
이렇게 구현할 수 있을거 같은데..
아 그리고 게임 롬 파일에서 이미지들 뽑아내는거 어려울까요?
골실 기준으로 포켓몬이 한 300마리쯤 되니까 스샷 찍는거는 미친짓인거 같고
Forums:
어렵죠. 예를 들어 레벨 대한 정보가 세이브 파일에
어렵죠. 예를 들어 레벨 대한 정보가 세이브 파일에 바이너리로 저장되어 있다고 할 때,
레벨이 1,2,3, n-2, n-1, n 일때 샘플로 저장해보고 바이너리가 어떻게 변하는지를 추적하면 됩니다.
바이너리의 l 주소에서 m 까지의 바이너리가 변하면 그게 레벨 정보겠죠.
그런식으로 하나 하나 찾아야 하는 겁니다. 시간이 오래 걸리므로, 스크립트로 툴을 만들어서 사용해야할 것이고, 일단 그게 저작권법상 문제의 소지가 있습니다. 법적인 부분을 먼저 확인해보세요.
참고로 hwp 의 미공개 포맷도 저러한 방식으로 찾아낼 수 있습니다.
한컴 오피스로 hwp 파일을 작성하고, 문서에 '가' 입력 후에 hwp 파일 저장, 비교,
문서 형식 x를 적용 후에 파일 저장 비교.
그리고 한국에서는 역공학이 어떠한 경우 합법인 경우가 있으니 법적인 부분을 반드시 확인해 보시기 바랍니다.
일일히 대조 그렇게 해야겠네요 ㄸ
깃허브 둘러보니까 에뮬 소스 올려놓은것들 있던데 일단 그거부터 분석해봐야겠네요. 안드로이드로 하면 테스트하기 힘드니까 피씨용으로 시도 해봐야겠습니다. 댓글 감사드립니다.
심심해서 메모장으로 열어봤는데 세이브 내용이 그리 길지는 않네요.
비트 단위로 분석해야 할테니 마냥 적은 분량은 아닌가 싶기도 하고..
컴퓨터가 데이터 저장할 때 바이트 단위로 저장하므로,
컴퓨터가 데이터 저장할 때 바이트 단위로 저장하므로, 바이트(8비트) 단위로 분석하세요.
그리고 도시락 싸들고 다니면서 말리고 싶네요. 많은 시간이 소비될텐데 차라리 그 시간에 게임을 개발하거나 기획이 어려우면 리메이크하는게 더 나은 선택일 수 있습니다.
분석할 데이터가 양이 많으면 오픈소스로 협업을 해볼 만도 한데.. 그 경우 한국에 국한하지 말고 세계인을 대상으로 하세요.
네 ㅎㅎ 조언 감사드립니다.
다른 게임도 한번 생각해볼께요
물어보신 내용은
1. save 파일은 원하시는 게임 기기의 에뮬레이터중 "디버깅 기능이 있는" 에뮬레이터로 동작을 step by step 으로 분석하시면 될겁니다.
2. 이미지 추출은 게임 한글과쪽 자료를 찾아보시면 bitmap 단위로 unarch 해서 이미지 데이터를 찾는 좋은 툴들이 많이 나와 있습니다. 그쪽을 찾아보시는게 빠를듯 하네요.
-----새벽녘의 흡혈양파-----
디버깅 가능한 에뮬이 있군요 ㅎㅎ
한번 찾아봐야겠네요. 댓글 감사드립니다.
세이브가 무슨 세이브인가요?
게임 고유의 자체 세이브 기능을 파일로 빼놓은 것이라면 일이 좀 줄어들겠고,
게임 자체의 세이브 기능과 무관하게 강제 세이브 형태로 메모리 전체를 덤프하는 방식이라면 시간이 더 걸리겠죠
어떤 방법이든 확실히 가능은 합니다. 일부 에뮬중에 치트 기능을 제공하는 게 있는데 (대표적인게 MAME - 게임보이는 지원 안하지만.) 이걸 가지고 치트를 만들어보면 해당 정보가 저장되는 메모리 주소를 쉽게 알 수 있게 됩니다. 설사 그런 에뮬이 존재하지 않는다 해도 cheat-o-matic같은 윈도 프로세스에 대해 같은 일을 해주는 툴을 사용하면 유사한 방법으로 패턴을 알아낼 수가 있습니다. 요컨대 일일이 세이브파일생성-HEX분석하는 노가다를 상당부분 피할 수 있다는 얘기입니다.
다만 메모리나 세이브파일 자체에 암호화가 되어 있는 경우에는 많이 힘들어지겠죠. 게임보이에 그정도까지 일을 벌여둔 게임이 있을지는 의문입니다만..
롬파일에서 이미지 뽑아내는 것은 조금 다른 얘기입니다. 일단 해당 게임이 어떤 방식으로 비트맵을 저장했는지를 알아내야 합니다. 바이너리 데이터를 실시간으로 비트맵 변환해주는 툴들이 있는데 그런 데에 던져놓고 이리저리 파라미터를 바꿔가며 알아내야 되겠죠. (경우에 따라선 그냥 스샷 300번 찍는게 더 빠를 수도 있습니다...) 제일 힘든 게 전용방식의 압축을 사용한 케이스인데 게임보이에 압축 비트맵을 사용한 게임이 있을지는 잘 모르겠습니다.
--
자체 세이브파일이요.
에뮬상에서 정상적인 루트로 세이브하면 파일이 하나 생기더라구요.