检测 .NPK 档案中的压缩算法

逆向工程 安卓 解压
2021-07-01 05:31:33

我正在尝试解压 Android 游戏存档文件 (.NPK)。

游戏是“Nvidia Glowball demo”(它已经预装在我的安卓平板电脑上)

存档结构看似简单,却解压不了数据。

档案结构:

4 bytes - "BE EF CA FE" signature
4 bytes - File headers count (little-endian)
[File headers]
4 bytes - "BE EF CA FE" signature
[Files data]

文件头结构:

4 bytes - File name length (little-endian)
[File name]
8 bytes - Unknown (not a checksum, signature?)
8 bytes - File offset (little-endian)
8 bytes - Compressed size (little-endian)
8 bytes - Uncompressed size? (little-endian)

文件示例:

initprescenecommon.txt

标头(10 字节压缩,2 字节未压缩,未知字段= 1033E64E):

A373h: 16 00 00 00 69 6E 69 74 70 72 65 73 63 65 6E 65  ....initprescene 
A383h: 63 6F 6D 6D 6F 6E 2E 74 78 74 10 33 E6 4E 00 00  common.txt.3.N.. 
A393h: 00 00 F3 45 41 01 00 00 00 00 0A 00 00 00 00 00  ...EA........... 
A3A3h: 00 00 02 00 00 00 00 00 00 00                    ..........

数据:

141:45F3h: 1A F3 84 8A 6F 6F 6A 49 62 77                    ....oojIbw

teleporter1_enter.txt

标头(10 字节压缩,2 字节未压缩,未知字段= 1933E64E):

A490h: 15 00 00 00 74 65 6C 65 70 6F 72 74 65 72 31 5F  ....teleporter1_ 
A4A0h: 65 6E 74 65 72 2E 74 78 74 19 33 E6 4E 00 00 00  enter.txt.3.N... 
A4B0h: 00 58 52 41 01 00 00 00 00 0A 00 00 00 00 00 00  .XRA............ 
A4C0h: 00 02 00 00 00 00 00 00 00                       .........

数据:

141:5258h: 1A F3 84 8A 6F 6F 6A 49 62 77                    ....oojIbw

炉排输入.txt

标头(19 字节压缩,11 字节未压缩,未知字段= 1033E64E):

A1A8h: 0F 00 00 00 67 72 61 74 65 5F 65 6E 74 65 72 2E  ....grate_enter. 
A1B8h: 74 78 74 10 33 E6 4E 00 00 00 00 8E 33 41 01 00  txt.3.N.....3A.. 
A1C8h: 00 00 00 13 00 00 00 00 00 00 00 0B 00 00 00 00  ................ 
A1D8h: 00 00 00                                         ...

数据:

141:338Eh: 1A F3 94 40 25 A2 19 40 28 43 2E 8A 88 6D 6A 77  ...@%..@(C...mjw 
141:339Eh: 10 6C FA                                         .l.

这三个文件的压缩大小比未压缩的大。我认为这是因为这些是文本文件。例如 balltextures_entrance.nma 文件有 338 字节压缩和 3263 字节未压缩。

请注意,initprescenecommon.txt 和 teleporter1_enter.txt 具有相同的数据,但“未知字段”不同。

有没有人有一些想法?

0个回答
没有发现任何回复~