解密未知的字符编码

时间:2018-10-06 09:34:06

标签: unicode encoding reverse-engineering filemaker

我试图了解专有文件格式(Filemaker Pro中的fp7-文件格式)的字符串编码。

  1. 我发现XOR0b01011010混淆了每个字符,并且字符串长度使用单个起始字节进行编码(Filemaker中的最大字符串长度为100个字符)。
  2. 编码是可变字节编码,默认情况下,ISO 8859-1(西方)用于编码大多数字符。
  3. 如果要对ISO 8859-1以外的unicode字符进行编码,则字符串中会包含某种control characters,这些字符会修改下一个或几个后续字符的解码。这些控制字符使用ASCII控制字符空间(特别是0x010x1f)。这是我被困住的原因,因为我似乎找不到这些控制字符如何工作的模式。

一些我认为发现的例子:

  • 遇到控制字符0x11时,以下字符是通过在字节值上添加0x40来创建的,例如字符Ā(Unicode \U0100)编码为0x11 0xC00xC0 + 0x40 = 0x100)。
  • 遇到控制字符0x10时,先前的控制字符似乎已重置。
  • 遇到控制字符0x03时,通过在字节值上添加0x100来创建下一个(仅下一个!)字符。如果控制字符0x03之前是0x1b,则通过添加0x100来创建所有后续字符。

示例字符串(0_ĀĐĠİŀŐŠŰƀƐƠưǀǐǠǰȀ),其unicode代码点以及Filemaker中的编码:

   char   0  _      Ā   Đ   Ġ   İ      ŀ      Ő      Š      Ű         ƀ   Ɛ   Ơ   ư   ǀ   ǐ   Ǡ   ǰ         Ȁ  
unicode  30 5f    100 110 120 130    140    150    160    170       180 190 1a0 1b0 1c0 1d0 1e0 1f0       200
encoded  30 5f 11  c0  d0  e0  f0  3  40  3  50  3  60  3  70 1b  3  80  90  a0  b0  c0  d0  e0  f0 1c  4  80

如您所见,字符0_用其直接unicode / ASCII值编码。字符ĀĐĠİ使用0x11控制字节进行编码。然后为每个字符使用ŀŐŠŰ0x03进行编码,然后使用0x1B 0x03对接下来的8个字符进行编码,等等。

这个编码方案对任何人都熟悉吗?

规则对于不超过0x200的字符来说很简单,但随后变得越来越混乱,甚至到看起来位置相关的地步。

我可以为周末的困惑和欢乐提供更多示例。

0 个答案:

没有答案