加拿大魁北克省的逆向工程 PDF417 餐厅账单

逆向工程 解密
2021-06-21 07:14:20

让我解释一下我正在尝试做什么,然后我在哪里......

正如你在这张图片上看到的:

在此处输入图片说明

末尾有一个 PDF417,其中包含一个字符串,我猜测它是一些 base64 字符串。

这里是 :

3GLDjVKaUbwysHTAffMyChP1wqzvc/h41aebPrw0PsprtPy85tBa87vzsLw6hL8t5FBJLGlHODGQ0O8ml0OKs7mmqgB1pZsAvcs2CyAgICA0MzA2MzjAAAAgQAyzKAgwcAaaaagqagwhL8t5fbc

当我解码它时,我得到以下信息:

在此处输入图片说明

我找到了女服务员的名字“朱莉”,在它前面,有一堆空格字符,我猜这是因为名字的大小有限。

账单号和桌号相同。

但我想知道前几位中是什么类型的信息,所以任何想法如何继续解码/解密这些信息将不胜感激。


用于生成 base64 字符串的机器及其内容是“AE​​C-6822”。

这里有一些与我正在尝试做的无关的信息,但可能会有所帮助......(我希望)http://www.revenuquebec.ca/documents/en/publications/in/in-577-v ( 2013 -08).pdf

非常感谢,非常感谢任何帮助!

3个回答

来自https://www.ctf.ca/ctfweb/Documents/PDF/2009ctj/09ctj4-ainsworth.pdf --

除了确保收据上显示的信息的完整性外,魁北克税务局设计的解决方案确保[手持]阅读器扫描的条形码是由[魁北克税务局]交付给特定MEV [SRM]的证书产生的] 生成此签名。签名由 SHA-256 和 ECC-224 组合生成。

该方法使用的证书包括为每个 MEV [SRM] 颁发的公钥和私钥,以及标识 MEV [SRM] 和餐厅的信息。

我们选择椭圆曲线算法 (ECC) 来减少结果的长度(要转换为条形码)并保持良好的强度。

很明显,条形码中的前几位组成了数字签名,这可以解释高熵。

我曾经有过一组收据,仔细阅读了符号重复频率的统计数据。这表明最有可能有 256 个符号,这将使符号行包含 96 = 12 * 8 位。

https://www.ietf.org/mail-archive/web/81attendees/current/msg00986.html

检查Unicode图表,几乎所有符号都在页面U+22xx,“数学符号”上。我还没有找到其余的,其中一些非常模糊,但有些似乎是无衬线的希伯来字母。我猜测不在 U+22xx 中的符号是为了替换该页面上与其他符号太相似的一些符号。

这些符号似乎没有任何普通的数据处理目的,因为您希望机器处理的任何信息都放在条形码中。我的猜测是,这些符号是条码中信息的散列、摘要或子集,用作收件人可以阅读的“收据编号” ,因此如果两个买家购买相同的东西,企业不能给他们两个一个(记录的)收据的副本,而是必须记录两个收据以提供给他们每个人。

这个解释解释了为什么这些符号很容易被人类识别。它还基于魁北克文明博物馆的一次经历:我从咖啡馆买了一杯茶,我的同伴也在我之后从同一个收银员那里买了一杯茶。我们的收据具有相同的符号行,这是一个极不可能发生的事件,这表明我们收到了一份记录收据的副本。

根据一些示例,这里概述了一些可以清晰阅读的字段。

来源:https : //github.com/fproulx/tastybits/blob/master/NOTES.md

数据集:https : //github.com/fproulx/tastybits/tree/master/sample-data

非官方规格

  • 带有 BASE64 编码二进制负载的 PDF417 条码
  • 总是 0x7A 字节长 == 122 字节 == 976 位
  • Endianness 似乎是 Little Endian (Intel)
  • [0x00, 0x39] 未知数据。总是因账单而异。
  • [0x40, 0x43] MEV 序列号
    • 注意:左对齐二进制 32 位小端,零填充 (0x00)
  • [0x44, 0x47] MEV交易计数器(单调递增)
    • 注意:左对齐二进制 32 位小端,零填充 (0x00)
  • [0x48, 0x4B] 未知数据
  • [0x4C, 0x55] 唯一帐单/交易编号
    • 注释:右对齐的 ASCII 文本,空白填充 (0x20)
  • [0x56, 0x59] 账单日期时间
    • 注意:从 MRQ Epoch 开始的秒数 (2009-01-01)
  • [0x5A, 0x63] 员工姓名
    • 注释:右对齐的 ASCII 文本,空白填充 (0x20)
  • [0x64, 0x6B] 供应商字段,通常是桌号、外卖等。
    • 注释:右对齐的 ASCII 文本,空白填充 (0x20)
  • [0x6C, 0x6E] 以美分为单位的 TPS 值
    • 注意:左对齐二进制 24 位,小端,零填充 (0x00)
  • [0x6F, 0x71] 以美分为单位的 TVQ 值
    • 注意:左对齐二进制 24 位,小端,零填充 (0x00)
  • [0x72, 0x77] 总价(包括 TPS+TVQ),单位为美分
    • 注意:左对齐二进制 24 位,小端,零填充 (0x00)
  • [0x78, 0x7A] 常量数据 (0C:43:0E)