我正在使用一个小算法修改固件文件 (.jic) JTAG 间接配置文件,但更改文件内的数据会使其无法使用,因为文件中的某处有一个校验和需要更新。
我需要找到 .jic 文件中的校验和并破译使用哪种算法(crc32 等)。
每个字节上的位都被反转,我检查了正常和反转的位文件,但没有成功。
有人知道或者有办法找出 .jic 文件中的校验和数据在哪里吗?
您需要生成一个.rpd 文件。 该数据将在上电时加载到 FPGA 中。 如果在加载 .jic 后逐字节读取闪存,您将看到以下内容。
如果您有权使用创建 .jic 文件的软件(例如 Quartus),您可以创建两个有一点差异的 .jic 文件,并比较两个输出(两个 .jic)文件。它应该会提示您支票所在的位置(如果有的话)
不是从
.jic
文件开始。但是,如果您尝试更新的数据是从 .hex
或 .mif
文件初始化的,则可以使用 quartus_cdb --update_mif
对项目执行部分重新编译。 (这也可以在 IDE 中作为“更新内存初始化文件”获得。)
很可能是 CRC-16-IBM-SLDC,它是 .jic 文件的最后两个字节。删除这些,在更改的固件上重新运行 CRC,然后添加新的。
参见例如这里有一个例子https://github.com/Tsarpf/intellij-shapeshifter-serum-wavetables/blob/master/wavewriter.py#L71
就我而言,我比较了两个不同的 .jic 文件,发现除了标头版本信息之外,主要是最后两个字节不同。然后为了找到 CRC 算法参数,我使用了 CRC RevEng。