热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分析和解密已加密的路由器固件

我们直奔主题!现在,查看你的路由器品牌及型号信息,然后去对应厂商的官方网站下载你路由器对应的固件。下载完成之后,把固件文件丢

我们直奔主题!现在,查看你的路由器品牌及型号信息,然后去对应厂商的官方网站下载你路由器对应的固件。下载完成之后,把固件文件丢到binwalk里,这样我们就可以在QEMU中模拟路由固件了。此时,你将会看到如下图所示的画面:


发生了什么?

一般来说,每一个非binwalk友好的固件都要用不同的方法来进行分析,因此我们无法给大家提供一个针对所有类型加密固件的通用手把手教程。不过,我们将在这篇文章中给大家演示几种常见的固件分析场景,并提供一个处理这类加密固件的一般性指南。除此之外,沃恩还将提供一个解密D-Link DIR-882固件的示例。


加密固件的三种情形

解密固件最简单的方法就是在固件中寻找解密程序。那我们该怎么做呢?如果路由器可以解密新固件并进行更新,那么解密程序就肯定位于就固件镜像中的某个地方。如果你遇到的是加密固件,那你就可以访问厂商官网并寻找这个固件的旧版本,然后下载所有的旧版本固件并开始分析。

下面给出的是三种常见的固件发布场景。


场景1

设备固件在出场时未加密,也未包含任何解密程序。解密程序与较新版本(v1.1)中未加密版本的固件一起提供,以便将来进行加密固件更新。此后发布的固件为加密固件。

此时,我们可以从固件v1.1处获取解密程序,然后用它来解密最新版本的固件v1.2。


场景2

设备固件在原始版本中加密,厂商决定更改加密方案并发布一个未加密的转换版本v1.2,其中包含了新的解密程序。

跟场景1类似,我们可以从v1.2映像获取解密程序,并将其应用到最新的加密固件中。阅读固件版本的发布公告可以帮助我们识别未加密的转换版本。发布公告通常会指示用户在升级到最新版本之前先升级到中间版本,而中间版本很可能就是未加密的转换版本固件。


场景3

设备固件在原始版本中加密。但是,厂商决定更改加密方案,并发布包含新版解密程序的未加密转换版本。

此时,获取解密程序会比较困难。一种方法是购买设备并直接从设备硬件中提取未加密的固件,另一种方法就是对固件进行更深层次的分析,希望能够“破解加密”。


场景4

通过使用十六进制编辑器来查看固件内容,我们可以迅速且直观地了解我们正在处理的对象。使用二进制或十六进制模式查看固件源码,你看到了0xFF或0×00字节的数据域吗?文件代码有特定的模式吗?它们是由随机十六进制字节组成的同质块吗?如果有的话,很有可能固件源码已经被带有静态密钥的简单异或域取代了。你可以看看,是否有一个十六进制字节比其他字节出现得更加频繁呢?


场景5:压缩、加密还是混淆处理?

熵可以帮助我们更好地分析固件,固件中有一部分具有高熵,表明这些地方经过了加密处理。一段低熵字节代表的是低随机性、结构化和可预测性。当与其他分析相结合时,它可以帮助我们确定固件是经过压缩得、加密得还是混淆处理得。在这个分析阶段,binwalk的大量选项可能会提供帮助。


理论与实践

接下来,我们将刚学到的知识应用到加密的D-Link DIR-882固件镜像中:

我们可以从厂商的FTP服务器找到这款路由器的所有旧版本固件。使用binwalk对最早期版本的固件v1.00B07进行测试,它将正确检测到uImage头以及LZMA压缩数据:

这表明,我们现在处于场景1中。浏览了固件镜像的所有可用版本之后,我们发现固件的v1.04B02版本就是转换版本,它包含在v1.10B02固件包中。除此之外,我们还可以计算镜像的熵来快速确定哪个镜像已进行了加密处理。

接下来,使用binwalk从v1.04B02固件中提取文件系统:

提取成功之后,我们就可以开始分析固件的更新过程了,并确定解密固件的方法。幸运的是,快速浏览文件系统后,我们在/bin目录中找到了一个貌似有戏的代码文件“imgdecrypt”。

我们遇到了一个小问题,即主机设备和代码文件之间的处理器架构存在差异。幸运的是,我们可以使用QEMU执行跨架构chroot。首先,我们需要将qemu-mipsel-static代码拷贝到固件root文件系统中的/usr/bin/目录,然后将加密固件拷贝到未加密固件的文件系统中。最后,使用chroot进入到固件root,然后获取到可用的shell。

我们可以看到,binwalk成功检测到了解密固件中的不同区域。


总结

以上就是处理加密固件的一般方法。值得一提的是,厂商有时会对多个路由器使用相同的加密方案,而且imgdecrypt这个文件还可以用来解密DIR-878和DIR-867的固件。因此,我们在找到一个解密程序或解密方案时,可以用它来试试同一产品线中具有相同处理器体系结构的其他路由器产品。

 

 


推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文深入探讨了如何选择适合业务需求的MySQL存储引擎,详细解析了不同存储引擎的特点、适用场景及其在数据存储和管理中的优势。通过对比InnoDB、MyISAM等主流引擎,为读者提供了全面的技术指导和专业建议,帮助开发者在实际应用中做出明智的选择。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • B站服务器故障影响豆瓣评分?别担心,阿里巴巴架构师分享预防策略与技术方案
    13日晚上,在视频观看高峰时段,B站出现了服务器故障,引发网友在各大平台上的广泛吐槽。这一事件导致了连锁反应,大量用户纷纷涌入A站、豆瓣和晋江等平台,给这些网站带来了突如其来的流量压力。为了防止类似问题的发生,阿里巴巴架构师分享了一系列预防策略和技术方案,包括负载均衡、弹性伸缩和容灾备份等措施,以确保系统的稳定性和可靠性。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 基于Linux系统的Kickstart自动化服务器部署方案
    本文针对企业需求,提出了一种基于Linux系统的Kickstart自动化服务器部署方案。该方案旨在通过无盘批量安装操作系统,提高企业IT基础设施的部署效率。Kickstart是一种利用Anaconda工具实现服务器自动化安装的技术,能够显著简化和加速操作系统的安装过程。通过详细的实施规划,本文介绍了Kickstart的工作原理及其在实际部署中的应用,为企业提供了高效的自动化部署解决方案。 ... [详细]
author-avatar
黄俊毅伶云政星
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有