ㅇ의 휴식터/연구 (12)
아트록스의 파라미터 파일은 SPM에서 LHA 압축을 풀면 나오는 맵데이터(MAPDATA) 파일에서 얻을 수 있다. 원래 아트록스에서 파라미터는 유닛의 능력치를 의미하지만, 아트록스의 맵에디터에서 보이듯 능력치, 업그레이드, 특수능력의 한 쌍으로 이루어졌다고도 볼 수 있다. 그래서 이 포스트에서도 업그레이드와 특수능력의 분석까지 다루게 되었다. 먼저, 맵데이터 파일에서 파라미터 구조는 다음과 같다. 플레이어1 유닛 능력치플레이어1 업그레이드플레이어1 특수능력...플레이어8 유닛 능력치플레이어8 업그레이드플레이어8 특수능력 파라미터로 가기 위해서는 플레이어1 유닛 능력치의 주소를 알아내야 하는데, 아직 그것까지는 분석하지 않았고(이것을 얻기 위해서는 모든 맵데이터의 정보를 알아내야 할 것 같은 느낌이라서 포..
HQ 파일은 천년의신화, 임진록2, 임진록2+ 조선의반격에 존재하는 파일이며, Data/Data.hq, Hq/Hq.hq 이렇게 두 개의 쌍으로 존재합니다. 여기서 *.hq는 헤더파일, *은 패킹 된 파일로 분류되지요. 아울러 쌍으로 된 이 파일들은 기본적으로 "(var & 16) ? var-16 : var+16" 암호화가 되어있어 먼저 복호화를 해줘야 합니다. 복호화된 천년의신화의 Data.hq 모습. 총라인수 : [파일 개수]->파일 명\t[파일 크기]\t[파일 오프셋]->파일 명\t[파일 크기]\t[파일 오프셋]…. 헤더는 이처럼 먼저 파일명이 명시된 뒤 크기와 오프셋이 뒤따르는 구조입니다.
임진록2+ 조선의반격 밸런스 수정기를 만들려고 노가다 중. HQ팀은 왜 능력치를 EXE 안에 둬서 어떤 게 어떤 능력인지도 구별하기 힘들게 하는지 모르겠다. 능력치를 하나하나 바꿔가면서 능력에 주석을 다는 중이다. 이런데에 HEX-RAY를 써보니까 분석이 훨씬 쉬워졌다. 올리디버거로 대충 예상은 가능하긴 한데, IDA에서는 임시변수 이름을 숫자로 직접 변환해준다. HEX-RAY는 리버싱이 막혔을 때 사용하면 정말 좋은 도구인 것 같다. 항상 많은 도움을 받는다. 위 사진은 조반에서 특정 파일이 "(var & 16) ? var-16 : var+16" 암호화를 쓰길래 만들어본 프로그램(UnZip.exe)으로 뽑아낸 자료. 심심해서 만들어 본 건데 정말로 쓸모가 없었다. (막상 만들어놓고 보니 암호화된 파일이..
아마게돈(Armageddon)의 데이터 파일은 헤더 파일인 Armageddon.HED와 본체 파일인 Armageddon.MFP로 나뉘어 있습니다. HED 파일의 구조를 위 사진을 통해 설명하자면, 맨 앞의 C20F 0000은 압축된 파일의 개수를 나타내며 그 뒤부터는 0x48byte마다 파일의 헤더를 나타냅니다. 이러한 파일의 헤더에서는 맨 앞의 0x04byte는 파일의 오프셋을 나타내고 맨 뒤의 0x04byte는 파일의 사이즈를 나타냅니다. 원래 초기 버전의 아마게돈은 파일이 전부 노출되어 있었지만, 업데이트하면서 HED와 MFP 파일로 아카이브 방식으로 따로 저장해둔 것으로 보입니다.
아트록스의 PAK 파일구조를 그림으로 제시하자면 대충 위 그림과 같습니다. 'Joy Max File Manager!'는 아트록스 파일인지 아닌지를 판별하는 역할을 하며 크기는 0x203으로 추측됩니다. Directory header 부분은(0x204~0x7D1FF) 특정 오프셋을 통하여 그다음 파일헤더 가 어느 위치에 속하는지를 구할 수 있게 도와줍니다. File header에는 파일과 헤더가 공존합니다. 파일의 헤더가 선 제시된 후 파일이 나오고 다음에 또 파일의 헤더와 파일이 제시됩니다. 이처럼 PAK는 마치 디스크의 파일 시스템처럼 체계적인 구조를 지니고 있습니다. 판별자 부분 중간에 나타나는 00E8 0300은 무엇을 하는 역할인지 아직 확실히 연구되지 않았습니다. 파일의 크기도 아니고 PAK의 ..
쥬라기원시전2 더랭커 SPZ 파일의 헤더는 0x20byte이며, 그다음으로는 PNT 파일 불러오기가 시작됩니다. SPZ 파일의 특이한 점은 투명색을 0번 압축 알고리즘을 이용하여 압축한다는 것인데, 아무래도 SPZ가 유닛이미지 파일이다 보니 투명색이 많아 이러한 알고리즘을 사용한 것으로 보입니다. [ 헤더 분석 ] 0x04 | 가로 픽셀0x04 | 세로 픽셀0x04 | 가로 중심점0x04 | 세로 중심점0x04 | 가로 충돌점 (추정)0x04 | 세로 충돌점 (추정)0x04 | 앞머리를 제외한 이미지의 크기0x04 | ? 팔레트를 불러오는 부분에서 바로 시작되는 0x02byte는 구간의 크기를 나타냅니다. 이러한 구간의 크기가 끝난 뒤에는 새로운 구간의 크기가 나타나는 구조로 되어있습니다. 사진에서처럼 ..
쥬라기원시전2 더랭커의 유닛 이동속도는 CEI 파일에 적혀있으며, 오프셋은 다음과 같다. 0x3CC | 상0x5CC | 우상0x7CC | 우0x9CC | 우하0xBCC | 하0xDCC | 좌하0xFCC | 좌0x11CC | 좌상//각 오프셋마다 0x200byte의 크기를 가짐 위 사진과 같이 이동속도는 4byte로 쓰여있으며, {좌우속도, 상하속도}의 8byte 쌍으로 되어있다. 눈으로 판별하기 힘들다면 홀수 번째와 짝수 번째로 판별하면 보기 쉬울 것이다. 이동속도는 CHR파일에 존재하는 m#.spz 이동그림을 토대로 움직이는데, 즉 8byte마다 이동그림 1개의 속도를 의미한다. 총 이동속도의 정보는 0x200byte이므로, 이동그림 64장만 속도를 기입할 수 있다.
쥬라기원시전2 더랭커의 PNT 파일은 위 사진처럼 4byte씩 한 조를 이루며, PNT 파일의 총 크기가 1024byte이므로 총 256개의 색상을 정의할 수 있다. 이렇게 만들어진 팔레트를 더랭커의 그림 파일이 1byte를 사용하여 불러다 쓰는 방식이다. 사진에서 살펴보자면 아래와 같이 RGB와 NULL의 조합으로 반복된다. 0x2C | R0x05 | G0x06 | B0x00 | NULL//4byte를 사용하여 색상 한 개를 표현 덧붙여, PNT 파일 중 유닛의 색상을 나타내는 팔레트는, 다음과 같이 특정 위치에서 특별한 정보를 나타낸다. 0x00~0x04 | 투명 색0x04~0x08 | 그림자 색0x3D4~0x3FC | 각 플레이어 색
쥬라기원시전2 더랭커의 SCR 파일은 800*600 픽셀로 이루어져 있다. 그래서 800byte 마다 다음 세로 픽셀의 시작을 가리키며, 1byte가 PNT 파일의 팔레트 위치를 나타낸다. 즉 SCR 파일은 PNT 파일의 색상위치를 가리킬 뿐이다.
쥬라기원시전2 더랭커의 CHR 파일 오프셋 분석자료이며, 오프셋은 10진수로 적혀 있습니다. - Image 개수 (4byte)전체 : 8720경계(G) : 8724 / 8784 (분할)이동(M) : 8728 / 8816 (분할)공격(A) : 8732 / 8848 (분할)죽음(D) : 8736 / 8880 (분할)베리모음(BG) : 8740 / 8912 (분할)베리없이이동(BME) : 8744 / 8944 (분할)베리소지이동(BMF) : 8748 / 8976 (분할)베리채취없음(BGE) : 8752 / 9008 (분할)베리채취있음(BGF) : 8756 / 9040 (분할)수리(REP) : 8760 / 9072 (분할) - Sound 개수 (4byte)전체 : 9244선택(S) : 9252이동(M) : 92..