赞助论坛
  • 4970阅读
  • 0回复

提取出海尔BIN中的BOOT2,与刷机软件中的BOOT不太一样,请高手分析 [复制链接]

楼层直达
byzx  

发帖
445
精华
12
金币
658
威望
178
贡献
331
好评
134
注册
2010-03-02
楼主    byzx 发表于: 2010-05-09 10:25:27 
对BIN中数据的分析相当重要,如果不清楚数据的结构,代码也无法分析。

既然机器有机对机升级功能,那么BIN中肯定有BOOT2,但是以前曾查找数次,竟然在BIN中没有找到。
今天看机对机升级部分的代码时,发现了一个奇怪的现象,经过仔细分析,终于发现了BIN中的BOOT2代码的存放位置及存放形式。

发现之旅是这样开始的:

机对机升级部分有如下代码:(771A01至771A59部分是发送BOOT2的部分)
L771A01_SendBoot2:
;向从机发送BOOT2
;将要发送的字节数放在 7DCC12, 值为 0D00H
;将已发送计数 7DCC10清0
L771A18:
...
JNC    L771A59         ;发完,返回
MOV    R4, #00H
MOV    R5, #03H
LCALL    L721E9A_C_IMUL     ;已发送计数乘以3?
MOV   A, #36H         ;原来BOOT2被拆开了,每隔两个字节才有一个有用数据
ADD   A, R7
MOV    R1, A
MOV   A, #0a0H
ADDC   A, R6
MOV    R2, A
MOV    R3, #0F8H
LCALL    L721E54_C_CLDPTR           ;取出一个字节
MOV    R7, A
LCALL    L7778DD_Send               ;送出
LCALL    L721F3A_C_IILDX               ;计数加1
SJMP    L771A18                   ;转去发送下一个字节

L771A59:    RET

看到代码中从77A036处取出数据进行发送,然后查看该处数据,竟然是这样的:

L77A036:
   DB   074H,080H,0FEH,03BH,080H,0FEH,0C2H,080H,0FEH,0C1H,080H,0FEH,0F5H,080H,0FEH,0C1H,080H,0FEH,030H,080H,0FEH,0C1H,080H,0FEH,0FDH,080H,0FEH,0C2H,080H,0FEH
   DB   0AFH,080H,0FEH,075H,080H,0FEH,081H,080H,0FEH,0CCH,080H,0FEH,075H,080H,0FEH,0DDH,080H,0FEH,005H,080H,0FEH,075H,080H,0FEH,0DCH,080H,0FEH,0D3H,080H,0FEH
   DB   075H,080H,0FEH,0DBH,080H,0FEH,005H,080H,0FEH,075H,080H,0FEH,0DAH,080H,0FEH,0D3H,080H,0FEH,075H,080H,0FEH,0D9H,080H,0FEH,01FH,080H,0FEH,075H,080H,0FEH
   DB   0C0H,080H,0FEH,050H,080H,0FEH,075H,080H,0FEH,0C7H,080H,0FEH,0AAH,080H,0FEH,075H,080H,0FEH,0C7H,080H,0FEH,055H,080H,0FEH,075H,080H,0FEH,0C2H,080H,0FEH
(余略..)

原来BIN中的BOOT2,夹杂了无用数据,一个有用的接两个没用的。
经过删除无用数据(留一个删2个),得到了纯BOOT2代码,前面部分如下:
74,3B,C2,C1,F5,C1,30,C1,FD,C2
AF,75,81,CC,75,DD,05,75,DC,D3
75,DB,05,75,DA,D3,75,D9,1F,75
C0,50,75,C7,AA,75,C7,55,75,C2
00,75,C7,AA,75,C7,55,75,9D,FF

经过和刷机软件自带的BOOT2进行比对,前面基本相同,后面也自带1KB的CRC32表。但也发现有不同之处。

因为机对机的提示信息中有“不兼容从机硬件”,可能这个BOOT2中会多出一些命令,希望高手们特别是刷机软件的制做者进行分析。

附上提纯的BOOT2.BIN及其反汇编码。