• 路由器固件解密思路


    前期接触iot我们遇到固件基本都是binwalk一把梭,但有时候会遇到固件信息混乱,或者分析出来一堆zlma的文件,没有发现有rtos或者文件系统的标志。

    这时候会考虑到是否加密,上网查会发现有用 binwalk 的 -E 参数来判断。

    那么这个判断的原理是啥?

    原理是信息熵。

    熵:泛指某些物质系统状态的一种量度,某些物质系统状态可能出现的程度。

    初高中应该都学过,熵值越大,说明系统越混乱。

    信息熵:1948年C.E.Shannon(香农)从热力学中借用过来提出的概念,解决了对信息的量化度量问题

    信息中,重复的内容越多,系统越稳定,能获得的信息越多。

    对于没有加密的二进制文件来说,某些指令出现的频率通常很高(如序言、nop序列等),并且数据结构几乎没有随机性。重复概率很高

    所以,对于未加密的数据来说熵值一般会比较低。

    对于经过加密的文件来说,都会想尽办法隐藏自己的信息,而导致很少有重复的内容,也就导致重复概率低

    所以,加密的熵值一般都会高。

    上面就是通过信息熵来判断是否加密,binwalk使用相关算法来整理信息熵

    一般来说固件加密有三种情况:

    1. 初始版本未加密,后续某个版本加密了 在加密与初始版本中间某个版本附带了解密程序

            获取中间版本,从中分析解密程序。

    1. 老版有加密,后续更换加密方式,中间发布未加密的过渡版本固件

            与1类似,也是同样获取带有解密程序的过渡版本固件分析提取解密程序

    1. 老版有加密,后续更换加密方式,中间更换了新的未加密的解密程序

            如果清楚早期加密方式,或者拥有早期解密程序,可以去分析更换解密程序的中间版本,来获取解密程序。

    如果没有早期相关解密信息,则无法使用上面方式,更多是购买设备,从硬件直接提取未加密的固件。

    理论上,可以使用二进制对比分析工具,来分析尝试提取复原解密程序。

    案例:

    这是选用某款的路由器固件进行分析:

    从固件时间顺序往早期查验

    发现DIR882A1_FW104B02_Middle_FW_Unencrypt.bin就是我们所说的过渡版本。

    提取,分析,要通过它来查找解密程序。

    或者复现根据升级路径来查找。

    这里比较幸运通过关键字查到在bin下的imgdecrypt,但不能确定他一定是正确的解密程序

    尝试执行他。

    跟上面对比,能够正确被识别出uImage。

    尝试将其他固件也都测试下

    上面是命名比较规范的一种,有些命名不规范可能需要去根据前端升级去寻找相应的文件名称。

    例子只用了一种,之后遇到相关问题会持续更新,可以关注一下。

  • 相关阅读:
    k8s入门之PV和PVC(八)
    Python 初学者容易踩的 5 个坑
    Java.lang.Class类 getSupperclass()方法有什么功能呢?
    T1028:字符菱形(信息学一本通C++)
    思维模型 首因效应
    简单介绍一下c++正则表达式
    【Method】把 arXiv论文 转换为 HTML5 网页
    Docker Dockerfile解析
    香港的Web3从业者们 出走新加坡还是选择留下?
    实战教程:从下载到成功安装,VMware与CentOS 7的完美结合
  • 原文地址:https://blog.csdn.net/biyusr/article/details/126022176