昨天晚上发现了程序中检查校验码的程序片段,分析后认为,可以通过简单的方法让BIN中的校验失效。(实际上是伪校验,就是不管内容改成什么,校验码都对)
以后的修改工具可以增加这么一个功能“去掉程序中的CRC校验”,并通过校验表数据判断一个BIN是有校验的还是无校验的。
这么做的好处是,如果你频繁修改BIN进行测试,在对文件进行16进制编辑后,可直接用于刷机实验,而不需要用风寒或者FACE或者其它工具进行CRC修正,能小幅的提高工作效率。
方法如下:
找到BIN中的CRCTABLE,小海尔0202的值是14BB1H-14FD0H,小海尔0224版的值是14BDF-14FFE其中前32个字节是CRC16-ITU的CRC常数表,后1K字节是CRC32BitMpeg2的校验常数表,将这1056个字节全清成0。(其中有至少6个本来就是0)
如果你的BIN中CRC表的位置和这个不符,可以按十六进制搜索“00 00 10 21 20 42 30 63 40 84”,表的最后4个字节是“B1 F7 40 B4”。
然后找到BIN中的各校验码,也将其一一清0,比较著名的有1FFF8H,20059H,200FCH等处,可以用风寒或者FACE工具查看具体位置。参见附图。
本方法已经通过实验证实。