服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

惠普打印机固件提取技术

日期: 来源:ADLab收集编辑:启明星辰

更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)











一、前 言


惠普作为打印机品牌当中的中坚力量,对其固件安全也是相当注重。关于惠普固件的格式,之前很多人已经有了不同的分析,但是缺乏最新的信息,网上也没有合适的工具对其进行分析和解压。本文将从逆向分析的角度,剖析惠普固件的更新包。


二、固件压缩和编码格式


常用的固件压缩和编码方式有PJL格式和SREC格式。PJL格式是描述打印作业的文档格式,是打印机命令语言(PCL)格式的扩展。SREC格式是由二进制到文本编码的二进制版本组成的专有编码方案。

2.1 PJL和PCL语言

HP的RFU文件格式包含打印机作业语言(PJL)命令,惠普开发了打印机作业语言(PJL),以允许在作业级别切换打印机语言。支持PJL的应用程序可以使用PCL打印一个作业,并使用其他打印机语言(例如:PostScript)打印另一个作业。

例如,以下PJL命令用于更新文件:

其中:
  • 文件开头的特定序列%-12345X,即通用退出语言(UEL)命令,使打印机退出当前活动的打印机语言,并将控制返回到PJL层,这是默认的控制层。该命令一般还出现在文件的末尾。从这个头中,我们可以了解到该固件的打印机型号,以及固件版本和代码发布日期。

  • UPGRADE命令及其选项值SIZE来指定RFU文件的大小。

  • ENTER命令用于为打印后续数据选择特定的打印机语言。通常是PCL或PostScript,但在本例中选择的语言是FWUPDATE。

  • PCL命令是以ASCII格式指定的转义序列,至少由两个字符组成。第一个字符是转义字符。不管接下来是什么,都被解析成打印机命令。打印机通用命令格式如下:

2.2 S-Record格式

我们以一个文件作为案例对S-Record格式进行分析:
S-Record格式是一种用于编码二进制数据的ASCII格式。它的常规用途是为EEPROM/闪存芯片编程。它通常被固件开发人员使用,由不同类型的记录组成,主要有两个类别:
  • 数据记录,由一个加载地址后面跟着数据组成。

  • 开始地址记录,包含在编程结束时重定向执行的地址。

每个S-Record是一个单独的行,以\n结尾。每个字段的使用取决于记录类型。除了第一个字符(S),其他所有字符都是ASCII十六进制的。
下图为第二部分固件文件的起始部分,其中包含7个类型为A的S-Records,每个长度为0x27。
在认证头之后,有一个类型为0的s记录,称为头记录。它的地址字段通常为零,它的数据字段通常包含以人类可读的格式描述下面S-Records块的文本信息。此记录类型不影响记录解析。在我们的例子中,它包含字符串"reflash":
接下来的5908行是类型3的s记录。类型3记录指示flash程序员将记录数据存储到指定的4字节内存地址。例如,下面的S-Record行表示“在地址401D0000存储20字节数据”。
最后一个字节是校验和,从长度字段开始对所有字段求和,然后模256,最后取结果的1的补码。类型3的S-Records块以类型7的S-Record终止。
这一段没有数据字段,地址字段是传递控制(CPU执行)的4字节地址。使用开源工具srec_info,我们可以获取关于文件的部分信息(前提是要手动删除前7个S-Records),输出应该如下:
这个输出显示加载的数据在内存中不是连续的。srec_info引用的garbage lines是紧接在S7-Record后面的两行:

F025A0DA4

PO2628000

这些是特殊的记录,以F或P开头,后面跟着一个四字节地址。它一般可以用于在分支之前设置一些寄存器或状态,作为版本号或其他任何东西的指示器。S-Records之后是二进制数据。二进制数据中的许多序列是明显可以分辨的,但是也是不完整的。也就是说,它们是字符串的可读片段,而不是整个字符串。这说明数据格式没有被压缩或加密。
仔细观察以下二进制数据,可以发现一些规律。
这些数据大概每40个字节重复一次。其中的7个字节包含非ascii字节,像是某种特征。其中这7个字节的第2个和第3个字节33 2D像是某种类型的报头,而后面的4个字节是某种类型的计数器,每次递增0x28。让我们看看第一个字节,它看起来像一个校验和。注意,对于两个相同的序列,该值是不同的,如下图:
看起来,对于每一个0x28字节,校验和字节通常减少0x28(先对0x100取模),但偶尔减少0x29。所以它其实就是摩托罗拉S-Records的二进制版本。
二进制S-Record的记录结构与ASCII版本类似,除了ASCII版本中的SX(X代表类型)被0x3X替代,其余都是二进制数据,而没有ASCII编码,然后换行符也被省略了。
举个例子,如下record:
被解析成:


三、固件提取


本文选取了3个不同类型的HP固件实例,对固件提取过程进行说明。

3.1 FWUPDATE格式固件提取

固件版本

2105A

发布日期

20210405

设备型号

HP OfficeJet Pro  8720

下载链接

https://ftp.hp.com/pub/softlib/software13/printers/ojp8720/2105/OJP8720_2105A.exe

将固件解压后,发现里面包含一个ful文件,根据初步分析,此固件采用HP PJL语言,并实施TIFF压缩算法,编写脚本将其解压。

解压后我们得到一个新的二进制文件,其内容如下:
先观察文件开头,很明显是SREC(S19)格式的文件,中间跟着F开头和P开头的两段字符,之前提到过,F后面跟着的可能是第三部分的大小,P后面跟着的具体含义未知。最后一部分暂时未知。
我们先将第一部分的内容保存下来,直接拖到IDA中分析,发现这部分其实就是flash程序:
第三部分发现是一个类似SREC的玩意儿,分析可得,第一个字节为type,第二个字节为长度,后面跟着data。

编写脚本,将binary-srec格式转换为S-Rec格式,最终再转换为bin格式,拖进IDA中进行分析。发现其部分代码仍然采用LZSS算法压缩,进行解压,此时可以开始进行固件代码逆向。

3.2 ACL格式固件提取

HP ACL格式,是HP打印机的固件格式数据,可以通过PRINT的方式进行打印机固件升级,未找到官方文档,我们找到了两个版本的固件。
(1)HP LaserJet Pro M127/M128
更新版本

20201012

发布日期

20201003

设备型号

HP LaserJet Pro  M127/M128等型号

下载链接

https://ftp.hp.com/pub/softlib/software13/printers/LES/M127/HP_M127_128_FW_Update_20201012.exe

初步分析固件,图中蓝色部分,使用PJL命令进入ACL语言。这段内容可用binwalk提取出执行代码。

初步分析,其固件结构如下:

ACL_HEADER

NAND_HEADER

Magic

Version

Entrycount

MultiEntries

Entryoffset

Entrysize

EntryCommand

0x02=Partition2

0x03=Partition3

0x07=FileSystem

0xFF=END

APP_HEADER

Checksum

APP_DATA

ZLIB

(2)HP LasterJet P2055dn

更新版本
20141201
发布日期
20150122
设备型号
HP LasterJet  P2055dn
下载链接
https://ftp.hp.com/pub/softlib/software13/COL25657/lj-66014-12/ljp2050_Series_FW_Update_20141201_signed.exe
这个虽然也叫ACL,但和前面的ACL格式有一些不一样,依旧采用7-zip将其解压,发现两个bin文件。
如下图所示,将其改为rfu格式(左边为bin,右边为rfu),头部内容区别用红色标出,rfu最后还多出了数字签名部分,其他没有区别。
最终结果如下:
简单分析后,可总结出如下代码结构:

ACL Header

UAT HEADER

DATA

ZLIB


四、小 结


FWUPDATE格式的HP固件主要采用ASCII S-Record+ Binary S-Record的结构,从Binary S-Record解压出的文件大小来看,主要是为了节省空间。而ACL格式HP固件整个结构相比之下则较为简单,依托以往的固件分析经验,可以很快判断出固件结构,找到代码部分,并按照对应的压缩方式进行解压。




参考链接:

[1]https://www.jsof-tech.com/unpacking-hp-firmware-updates-part-1/
[2]https://www.jsof-tech.com/unpacking-hp-firmware-updates-part-2/






启明星辰积极防御实验室(ADLab)





ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞近1100个,通过 CNVD/CNNVD累计发布安全漏洞2000余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。






相关阅读

  • 路由器固件解包打包与后门防御

  • 路由器已经是我们生活中必不可少的网络设备之一了。有不少的小伙伴喜欢捣腾路由器系统。喜欢在路由器系统中安装各种插件来丰富“网络生活”,但是你知道吗?你的路由固件真的安
  • 浅谈路由固件解包打包与后门防御(二)

  • 在前一篇文章中,我们提到了路由器固件的解包和打包操作。利用的工具是binwalk。但是打包的操作相对比较繁琐。今天我们来讲解另外一款工具的使用。环境说明kali 2022.4firmwa
  • 上传视频到BB课程

  • 上传视频到BB课程注:根据最新测试结果,mp4,wmv,avi,flv等格式的视频均可上传到BB,但只有mp4格式可在线播放,其他类型视频只能下载后播放。建议:将非mp4视频转成mp4格式后再上传到BB
  • 如何利用Endnote快速插入参考文献?

  • Endnote作为一款出色的文献管理软件深得科研狗的喜爱,它的功能十分强大,其中最大的功能就是可以轻松管理我们的文献库,细分功能有分类保存、查看和引用等。这些功能可以大大提
  • 原创Paper | 某 T 路由器固件解压缩探秘

  • 作者:sn0w_xxx@知道创宇404实验室日期:2023年2月15日准备工具参考资料1.某T固件2.某T路由器3.ida4.binwalk5.xz-5.6.26.squashfs-tools7.010 Editor开始分析参考资料固件初始
  • XR凉了,“行业冥灯”罗永浩又入错行了?

  • 深燃(shenrancaijing)原创作者 | 王敏编辑 | 金玙璠罗永浩又一次被调侃了。 2月16日,字节跳动、腾讯两家互联网大厂的XR(扩展现实)业务先后传出业务调整的消息,“罗永浩‘行业冥灯
  • “行业冥灯”罗永浩,又入错行了?

  • 作者:王敏编辑:金玙璠来源:深燃(ID:shenrancaijing)罗永浩又一次被调侃了。 2月16日,字节跳动、腾讯两家互联网大厂的XR(扩展现实)业务先后传出业务调整的消息,“罗永浩‘行业冥灯’的
  • Kindle Scribe 固件升级至 5.16.1.2

  • 这是 Kindle Scribe 自发布以来的第二次更新固件,版本号为 5.16.1.2。这是一个小版本更新,官方未发布具体的更新内容。◆ 功能改进:本次更新包括:性能改善、问题修复、及其他一
  • 制作百分比%图表,条件格式就是高端大气!

  • hello~我是运营菌。我们经常用饼状图展示百分比%。今天教大家利用一种新颖的方法做百分比图,那就是利用【条件格式】。没错,它们都是条件格式做的↑01.把单元格调整成正方形状

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 惠普打印机固件提取技术

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)一、前 言惠普作为打印机品牌当中的中坚力量,对其固件安全也是相当注重。关于惠普固
  • Atlassian JIRA Velocity模板注入漏洞分析

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)近两年Atlassian JIRA爆出几个SSTI(服务器端模板注入)漏洞,漏洞编号分别为CVE-2019-11
  • ThinkPHP多语言文件包含漏洞分析

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)一、漏洞概述 ThinkPHP是一个开源轻量级PHP框架,其6.0.13及以前版本存在一个文件包
  • ADLab 2022年安全研究回顾

  • 2022年,启明星辰ADLab研究方向重点包括攻防技术安全研究、黑客攻击与威胁研究、主流操作系统及应用安全研究、Web安全研究、云安全研究、智能终端安全研究、工控物联网安全研
  • Android App半自动化静态漏洞挖掘技术分析

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)目 录一、前言二、Android App漏洞扫描的难点三、个人扫描器和商业化漏洞扫描器的