编码表
PFPX 导航数据文件使用自定义的基于 XOR 的编码系统。导航数据使用字符映射表编码,将可读的 ASCII 文本转换为二进制数据。
字符映射
通过逆向工程,我们确定了以下编码关系:
十六进制码 | 字符 | 十六进制码 | 字符 |
---|---|---|---|
A5 | 空格 ( ) | B5 | 0 |
A4 | ! | B4 | 1 |
A7 | " | B7 | 2 |
A6 | # | B6 | 3 |
A1 | $ | B1 | 4 |
A0 | % | B0 | 5 |
A3 | & | B3 | 6 |
A2 | ' | B2 | 7 |
AD | ( | BD | 8 |
AC | ) | BC | 9 |
AF | * | BF | : |
AE | + | BE | ; |
A9 | , | B9 | < |
A8 | – | B8 | = |
AB | . | BB | > |
AA | / | BA | ? |
十六进制码 | 字符 | 十六进制码 | 字符 |
---|---|---|---|
C5 | @ | D5 | P |
C4 | A | D4 | Q |
C7 | B | D7 | R |
C6 | C | D6 | S |
C1 | D | D1 | T |
C0 | E | D0 | U |
C3 | F | D3 | V |
C2 | G | D2 | W |
CD | H | DD | X |
CC | I | DC | Y |
CF | J | DF | Z |
CE | K | DE | [ |
C9 | L | D9 | \ |
C8 | M | D8 | ] |
CB | N | DB | ^ |
CA | O | DA | _ |
十六进制码 | 字符 | 十六进制码 | 字符 |
---|---|---|---|
E5 | ` | F5 | p |
E4 | a | F4 | q |
E7 | b | F7 | r |
E6 | c | F6 | s |
E1 | d | F1 | t |
E0 | e | F0 | u |
E3 | f | F3 | v |
E2 | g | F2 | w |
ED | h | FD | x |
EC | i | FC | y |
EF | j | FF | z |
EE | k | FE | { |
E9 | l | F9 | | |
E8 | m | F8 | } |
EB | n | FB | ~ |
EA | o | FA | DEL |
编码方法
编码过程的工作原理如下:
- XOR 操作:每个字节都与密钥
0x85
进行 XOR 运算 - 字符映射:结果映射到上述字符表
- 头部保留:文件头部保持明文格式
- 行结构:每行代表一个导航数据条目
密钥属性
- XOR 密钥:
0x85
(十进制 133) - 可逆性:相同操作可解码数据
- ASCII 兼容:映射到标准 ASCII 字符集
- 二进制安全:保持数据完整性
使用注意事项
重要提示
- 只有导航数据内容被编码
- 文件头部和元数据保持明文格式
- 换行符(CR/LF)在编码过程中保留
- 编码是大小写敏感且位置相关的
转换示例
以下是字符编码的简单示例:
原始字符:'A'(ASCII 65,十六进制 0x41)
与 0x85 进行 XOR:0x41 ^ 0x85 = 0xC4
在表中查找:0xC4 = 'A'
对于反向(解码):
编码字节:0xC4
与 0x85 进行 XOR:0xC4 ^ 0x85 = 0x41
ASCII 结果:0x41 = 'A'
下一步
- 学习解码过程 - 实际应用这些知识
- 使用我们的 Python 工具 - 自动化编码/解码
- 了解文件结构 - 查看编码数据的组织方式