武汉家电维修网 www.whjdw.com 欢迎您的光临!
当前位置: 主页 > 家庭影院 > 卫视设备维修 >

如何修改中九空中升级的数据文件?

时间:2010-10-07 16:31来源:未知 作者:admin 点击:
现在的中九机空中升级的最后一部就是把抓到的空中升级数据刷写到flash。
那么升级代码在什么地方开始刷写flash,升级代码从空中抓下来后又暂存在哪呢?

对于海尔系列(包括大小海尔),在bin的0400~1FF00, 搜索E4 FF FE 7D 06 FC 12, 从这里开始是刷写flash的代码。

那么升级代码从空中抓下来后又暂存在哪呢?这个大小海尔是不一样的,暂存的地址就是boot时,应用程序数据的第一次加载地址。
大海尔是RAM内存的5F0000, 长度不应该超过1A0000
小海尔是RAM内存的410000,长度不应该超过A0000

如果在刷写flash前,插入代码,修改该处资料,理论上可以定制升级代码。
但要注意的是,升级数据时lzss压缩过的,要获得有意义的修改必须先解压,修改后再压缩回去,同时还要更新flash header处的crc32.
更新flash header处的crc32,则涉及到修改flash header资料,重计算升级资料的CRC32,复杂度都要上去一些。
总体上这些技术上都没有问题,是可以做到的。

下面是用卓异大海尔的bin测试通过。

1. 12 5D DB 38 7B 27 7A 5D 79 17. 同时记住数字12后面跟随的三个数字YYYYYY, 这里YYYYYY就是5DDB38

2. 在bin的400~1FF00之间找一个空闲的都是FFFF的地方,空闲区要长。该处地址值变换代码空间地址,对于卓异海尔bin,把该处的地址值减0400H加上5D0000,得到三个字节数字。比如是MMMMMM

3. 把第1步找到的YYYYYY修改成MMMMMM

5. 修改地址MMMMMM处数据。依次录入:C0 86 75 86 01 90 26 5D 70 05 86 90 02 00 59 75 86 20 78 08 E0 F0 A3 A3 D8 FA D0 86 22

6. 注意,以上的YYYYYY,MMMMMM等都必须是完整的3字节数据,不足用零补齐,比如000326.

7. 重新修正01FFF8处CRC32。OK, 刷机测试。

这个方法骗过升级程序, 升级日期和版本号更新,而实际程序数据没有更新。

不想知道原理的这段请跳过。
昨天的设想主要有两点,一是在刷写flash前,重新加载flash的应用程序数据,覆盖掉空中升级数据。
二是修改flash header的应用程序crc32计算长度为零。让CRC32计算程序误以为应用程序区数据的CRC32为FFFFFFFF
但这两个设想实测下来都有点问题。
第一点,因为上面提到的插入代码点,Flash已经被擦除掉了,无法重新加载旧数据了。解决办法,代码插入点提前到擦flash之前,然后干脆跳过刷写程序。
第二是修改flash header的应用程序crc32计算长度的方法,可以欺骗升级程序。但应用程序本身会自我校验,这个花招欺骗的了升级程序,欺骗不了应用程序。解决办法是复制旧的crc32资料到新的flash header。
------分隔线----------------------------
栏目列表
推荐内容