向日葵控控A2(OrayKVM)U盘救砖/USB恢复模式说明/免U盘刷机教程

回复列表(101|显示机器人聊天)
  • @Ta / 2022-10-28 / /

    @Caddi,嗯,就在固件里。控控ssh的/lib目录是可写的,直接scp到/lib就可以。

    admin密码是oray.com

    scp -P44022 libstdc++.so.6 [email protected]:/lib
    scp -P44022 oraymcu_helper oray_mcu_firmware.hex [email protected]:.
    ssh -p44022 [email protected]
    # busybox chmod +x ./oraymcu_helper
    # ./oraymcu_helper -f ./oray_mcu_firmware.hex
    

    oray_mcu_firmware.hex(57.75 KB)
    oraymcu_helper(19.04 KB)
    libstdc++.so.6(737.75 KB)


    亲自提取固件时的注意事项:

    libstdc++.so.6libstdc++.so.6.0.19的符号连接,所以应该提取后者,再重命名为前者。

  • @Ta / 2022-09-25 / /
    收到文件,谢谢!@老虎会游泳,请问您尝试这样是可以成功了吗
  • @Ta / 2022-09-25 / /

    @Caddi,我还没刷。等我试试。

  • @Ta / 2022-09-25 / /

    @Caddi,注意我在教程中可能会写错SSH端口,用户名和密码,因为我的固件和默认固件不一样。

    你应该使用44022端口,用户名是admin,密码是oray.com

    对于scp命令,端口用-P指定,而ssh命令则是-p

  • @Ta / 2022-09-25 / /
    我仔细看了一下,您62楼教程里写的是对的
    另外我偏个题,请教hex文件里写的这堆数字怎么能转换成中文来看(什么编码方式?我比较好奇😂)@老虎会游泳
  • @Ta / 2022-09-25 / /

    @Caddi,我虽然刷入成功了

    图片.png(194.11 KB)

    但重启后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
            }
    
  • @Ta / 2022-09-25 / /
    可以理解成控控官方内置了防止刷新的程序?
  • @Ta / 2022-09-25 / /

    @Caddi.hex是用bin2hex方式存储的单片机固件,对于stm32f103c8t6,采用ARM32机器语言。

    IDA Pro可以把它转换为ARM32汇编语言,就像这样:

    图片.png(878.71 KB)

    但转换后的汇编语言只能用来看(因为转换不完整,不可能得到原始源代码),不能用来修改或编译。想修改还是只能修改.hex文件本身。

  • @Ta / 2022-09-25 / /

    @Caddi,我还有另一个线索,IDA Pro提示我文件校验和不正确。这是一个“Intel Hex”文件,看起来它内置校验和,可能需要使用专用编辑器进行修改。

    图片.png(46.67 KB)

    Intel Hex文件格式:https://zhuanlan.zhihu.com/p/420620471

    记录格式:

    一个英特尔HEX 文件由一些HEX记录组成。每个记录由如下所示的五部分组成:
    :llaaaatt[dd……]cc

    • : 冒号代表了每个记录的开始
    • ……
    • cc 是校验和的校验码。是计算了所有前面的数据的和后,除以256后的余数,一般是补码,所以要对和取反再加一。
  • @Ta / 2022-09-25 / /
    猜测他校验和这里需要重新计算改变之后的INTEL HEX
  • @Ta / 2022-09-25 / /
    @老虎会游泳,不能随便修改oray_mcu_firmware.hex中的字符,这样理解对吗
  • @Ta / 2022-09-25 / /

    @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))
    

    图片.png(90.33 KB)

  • @Ta / 2022-09-25 / /
    好强😭老虎哥给个微信吧,我请您喝奶茶@老虎会游泳,辛苦您了
  • @Ta / 2022-09-25 / /
  • @Ta / 2022-09-25 / /

    在修复校验和之后,修改就成功了

    图片.png(326.98 KB)

  • @Ta / 2022-09-27 / /

    注意:oray_mcu_firmware.hex是从控控固件1.4.0版本提取的,不适用于其他固件。如果你的控控固件版本低于1.4.0,你应该先升级到该版本再刷入。

  • @Ta / 2022-09-28 / /

    @Caddi,结果如何老虎应该给你解决了吧。
    一加8Pro

  • @Ta / 2022-09-28 / /

    @老虎会游泳,oray_mcu_firmware.hex
    改好的固件来个呗。我之前就想过,但是不知道怎么弄。

    一加8Pro

  • @Ta / 2022-09-28 / /

    @罐子oray_mcu_firmware_mod.hex(57.75 KB)

    你可以自己和未修改的固件进行对比

  • @Ta / 2022-09-28 / /

    @老虎会游泳,嗯嗯。
    一加8Pro

添加新回复
回复需要登录