向日葵控控A2(OrayKVM)U盘救砖/USB恢复模式说明/免U盘刷机教程
但重启后ID没有变,我正在查找原样。也许MCU固件被以下脚本还原了(/etc/init.d/S16mcu_helper
):
cur_version=$(cat /etc/version | grep 'mcu' | awk -F ':' {'print $2'})
mcu_version=$(/usr/sbin/oraymcu_helper -v | awk -F ',' {'print $2'} | awk -F ':' {'print $2'})
#读取mcu版本号失败或者与本固件的mcu版本不匹配,则将本固件的mcu固件刷入到mcu中
[ $? -ne 0 -o "$mcu_version" != "$cur_version" ] && {
burn_mcu_firmware
}
@Caddi,我还有另一个线索,IDA Pro提示我文件校验和不正确。这是一个“Intel Hex”文件,看起来它内置校验和,可能需要使用专用编辑器进行修改。
Intel Hex文件格式:https://zhuanlan.zhihu.com/p/420620471
一个英特尔HEX 文件由一些HEX记录组成。每个记录由如下所示的五部分组成:
:llaaaatt[dd……]cc
:
冒号代表了每个记录的开始cc
是校验和的校验码。是计算了所有前面的数据的和后,除以256后的余数,一般是补码,所以要对和取反再加一。@Caddi,我写了个python脚本用来重算一行的校验和:
intel-hex-checksum.py(593 Bytes)
import re
import sys
from functools import reduce
print('请输入要计算校验和的行:')
line = sys.stdin.readline().strip()
checksum = int(line[-2:], 16)
parts = re.findall('.{2}', line[1:-2])
parts = map(lambda x: int(x, 16), parts)
new_checksum = 256 - reduce(lambda a, b: (a + b) % 256, parts)
if checksum == new_checksum:
print('校验和匹配,该行无需修改')
else:
print('校验和不匹配,原校验和:%d,应该改为:%d' % (checksum, new_checksum))
print('正确的行:')
print('{}{:02X}'.format(line[:-2], new_checksum))
在修复校验和之后,修改就成功了
注意:oray_mcu_firmware.hex
是从控控固件1.4.0版本提取的,不适用于其他固件。如果你的控控固件版本低于1.4.0,你应该先升级到该版本再刷入。
@罐子,oray_mcu_firmware_mod.hex(57.75 KB)
你可以自己和未修改的固件进行对比
@Caddi,嗯,就在固件里。控控ssh的
/lib
目录是可写的,直接scp到/lib
就可以。(
admin
密码是oray.com
)oray_mcu_firmware.hex(57.75 KB)
oraymcu_helper(19.04 KB)
libstdc++.so.6(737.75 KB)
亲自提取固件时的注意事项:
libstdc++.so.6
是libstdc++.so.6.0.19
的符号连接,所以应该提取后者,再重命名为前者。