• 路由器固件解密思路


    前期接触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。

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

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

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

  • 相关阅读:
    WAF简介
    【java期末复习题】第11章 Swing程序设计
    《HelloGitHub》第 80 期
    共享自行车需求预测学习记录
    从零开始学习makefile(5)makefile中patsubst的作用
    Android LiveData Cannot add the same observer with different lifecycles
    Spring5.3学习——from 官网 day1-1
    皕杰报表数据源报错
    Linux内存管理(二十六):shrink_list
    软件测试报告有哪些内容?
  • 原文地址:https://blog.csdn.net/biyusr/article/details/126022176