解析/转换诺基亚“智能功能操作系统”备份 .ib 文件?

sda*_*aau 1 parsing nokia

我已经在https://superuser.com/questions/1389657/backup-access-sms-on-nokia-3310-3g-2017-from-linux-pc中写了一些内容;基本上,我正在尝试将诺基亚 3310 3G 上的 SMS 消息备份到 Ubuntu 18.04 PC 上;请注意,诺基亚 3310 (2017)的硬件片上系统和操作系统因版本而异:

\n\n
\n

片上系统/操作系统:

\n\n
    \n
  • 联发科 MT6260 / 诺基亚系列 30+ (2G)
  • \n
  • 展讯SC7701B / Java驱动的智能功能操作系统(3G)
  • \n
  • 展讯SC9820A / 云操作系统(4G,中国移动)
  • \n
\n
\n\n

我有 3G,所以我有一个“智能功能操作系统”,显然是 KaiOS 的一个版本(KaiOS 和“智能功能操作系统”之间有什么区别吗?:KaiOS),显然是(KaiOS \xe2\x80\ x93 智能手机操作系统 | 黑客新闻) 是 Firefox OS 的一个分支。

\n\n

当您在此手机上点击菜单 > 存储 > 创建备份 ( https://www.nokia.com/phones/en_int/support/nokia-3310-3g-user-guide/create-a-backup ) 时,它会生成一个文件夹其中包含文件,命名如下:

\n\n
$ tree All-backup_01-01-2019_20-18-54\nAll-backup_01-01-2019_20-18-54\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ibphone_head.in\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 phonebook.ib\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sms.ib\n
Run Code Online (Sandbox Code Playgroud)\n\n

我以前从未听说过.ib文件,我希望这里有人知道它们是什么。快速浏览一下,建议使用IB 文件扩展名 - 打开 .IB 文件(InterBase 数据库),但是我尝试将这些.ib文件与http://fbexport.sourceforge.net/fbexport.php “使用 Firebird 和 InterBase 数据库导出和导入数据的工具”一起使用,我得到:

\n\n
Engine Code    : 335544323\nEngine Message :\nfile ./All-backup_01-01-2019_20-18-54/phonebook.ib is not a valid database\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以,不是这样的。

\n\n

这是一个十六进制转储ibphone_head.in- 看起来这里没有个人识别信息:

\n\n
$ hexdump -C All-backup_01-01-2019_20-18-54/ibphone_head.in \n00000000  00 00 00 00 41 00 6c 00  6c 00 2d 00 62 00 61 00  |....A.l.l.-.b.a.|\n00000010  63 00 6b 00 75 00 70 00  5f 00 30 00 31 00 2d 00  |c.k.u.p._.0.1.-.|\n00000020  30 00 31 00 2d 00 32 00  30 00 31 00 39 00 5f 00  |0.1.-.2.0.1.9._.|\n00000030  32 00 30 00 2d 00 31 00  38 00 2d 00 35 00 34 00  |2.0.-.1.8.-.5.4.|\n00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n00000100  00 00 00 00 45 00 3a 00  5c 00 42 00 61 00 63 00  |....E.:.\\.B.a.c.|\n00000110  6b 00 75 00 70 00 73 00  5c 00 41 00 6c 00 6c 00  |k.u.p.s.\\.A.l.l.|\n00000120  2d 00 62 00 61 00 63 00  6b 00 75 00 70 00 5f 00  |-.b.a.c.k.u.p._.|\n00000130  30 00 31 00 2d 00 30 00  31 00 2d 00 32 00 30 00  |0.1.-.0.1.-.2.0.|\n00000140  31 00 39 00 5f 00 32 00  30 00 2d 00 31 00 38 00  |1.9._.2.0.-.1.8.|\n00000150  2d 00 35 00 34 00 00 00  00 00 00 00 00 00 00 00  |-.5.4...........|\n00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n00000200  00 00 00 00 30 30 30 31  2e 30 30 30 30 33 00 00  |....0001.00003..|\n00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n00000230  00 00 00 00 00 00 6d 6d  69 6b 65 79 62 61 63 6b  |......mmikeyback|\n00000240  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n00000250  00 00 00 00 00 00 03 00  00 00 00 00 b0 cd 09 00  |................|\n00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n00000270  00 00 00 00 00 00 00 00  f3 dd 00 00 7e 2f 00 00  |............~/..|\n00000280  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n000002c4\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,字符串似乎是用 2 个字节“宽字符”编码的;在大多数情况下,ibphone_head.in似乎只是对其包含/父文件夹的名称进行编码All-backup_01-01-2019_20-18-54

\n\n

这是电话簿的十六进制转储,其中我将姓名匿名化为 AAAAAAAAA 和 BBB:

\n\n
$ hexdump -C -n 1900 All-backup_01-01-2019_20-18-54/phonebook.ib\n00000000  70 00 68 00 6f 00 6e 00  65 00 62 00 6f 00 6f 00  |p.h.o.n.e.b.o.o.|\n00000010  6b 00 2e 00 69 00 62 00  00 00 00 00 00 00 00 00  |k...i.b.........|\n00000020  00 00 00 00 01 00 00 00  30 f8 04 00 62 01 00 00  |........0...b...|\n00000030  62 01 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |b...............|\n00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n00000240  00 00 00 00 98 03 00 00  01 00 00 00 ff ff ff ff  |................|\n00000250  ff ff ff ff 01 00 01 00  00 00 00 00 00 00 00 00  |................|\n00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n00000360  d9 d4 37 46 00 00 00 00  00 00 01 02 00 00 04 01  |..7F............|\n00000370  07 12 80 88 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n00000380  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n000003b0  09 00 41 00 41 00 41 00  41 00 41 00 41 00 41 00  |..A.A.A.A.A.A.A.|\n000003c0  41 00 41 00 00 00 00 00  00 00 00 00 00 00 00 00  |A.A.............|\n000003d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n000005e0  00 00 00 00 00 00 00 00  00 00 00 00 ff ff ff ff  |................|\n000005f0  ff ff ff ff 98 03 00 00  01 00 00 00 ff ff ff ff  |................|\n00000600  ff ff ff ff 04 00 01 00  00 00 00 00 00 00 00 00  |................|\n00000610  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n00000710  d9 d4 37 46 00 00 00 00  00 00 01 02 00 00 06 11  |..7F............|\n00000720  83 29 23 13 58 f9 00 00  00 00 00 00 00 00 00 00  |.)#.X...........|\n00000730  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|\n*\n00000760  03 00 42 00 42 00 42 00  00 00 00 00              |..B.B.B.....|\n0000076c\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里似乎d9 d4 37 46是条目的分隔符,条目之间的间隔似乎是 0x3b0 = 944 字节;但无法得知实际电话号码存储在哪里。

\n\n

我不会粘贴 的十六进制转储内容sms.ib,因为我担心泄露比我打算透露的更多的个人信息。

\n\n

但是,也许已经发布的内容可以帮助某人查看这是否是已经建立的文件格式?无论如何,我想将这些文件的内容转换为纯文本......

\n

小智 6

phonebook.ib是一种专有文件格式。我做了一些分析,并达到了能够从中提取姓名和电话号码的程度。

  • 标头有 580 字节,似乎不包含任何有趣的内容。
  • 条目似乎以条目长度开始,编码为 3 个 4 位十进制半字节,后跟另一个数字(可能是版本号?)。

在我的示例文件中,所有条目均为 940 字节,因此94 03前两个字节为。我在不同偏移量处识别的其他字段条目:

  • Entry+0x12a [1字节]:代表电话号码的字节数。
  • Entry+0x12b [1 字节]:看起来像一个两位十进制编码标志。如果设置了高半字节(例如10),则电话号码以 开头+
  • Entry+0x12c:电话号码,十进制编码。例如,123456将显示为21 43 65. 特殊数字:
    • a*
    • b#
    • f被忽略(当位数不是偶数时被视为最后一位数字)。
  • Entry+0x16c [1 字节]:名称长度。
  • Entry+0x16e:UTF-16 格式的名称(即每个字符 2 个字节)。

以您的代码片段为例:

  • 0x36e是电话长度,4字节。
  • 0x36f 是额外标志,高半字节0因此没有+前缀。
  • 0x370 是电话号码的开头,07 12 80 88翻译为70210888.

可以在我的存储库中找到一个简单的参考解析器:https ://github.com/yossigo/phonebook_ib_export