其他
常见的固件加解密方式与D-Link固件解密实战分析
一
前言
binwalk
等工具提取,需要先对加密的固件进行解密。二
常见的固件加解密方式
1、固件出厂未加密,后续发布包含解密方案的未加密版本,最后发布加密版本
2、固件出厂加密,后续发布包含新版解密方案的未加密固件,最后发布新版加密版本
3、固件出厂加密,后续发布包含新版解密方案的加密固件,最后发布新版加密版本
JTAG
、UART
调试等方法进入Linux Shell
或者Uboot Shell
,直接从设备硬件中提取固件的文件系统。然后就是对固件进行更深层次的分析,看看如何能够对加密的固件进行逆向分析,得到加密逻辑,最后破解。三
对加密的D-Link固件进行解密
准备工作
binwalk -E
命令来查看固件的熵值(查看熵值是一种确认给定的字节序列是否压缩或加密的有效手段。熵值越大,意味着字节序列有可能是加密的或者是压缩过的)。The firmware v3.15 must be upgraded from the transitional version of firmware v303WWb04_middle.
利用过渡版本解密固件
firmware v303WWb04_middle
很可能就含有解密程序的中间过渡用未加密固件。所以我们就可以想办法下载这个固件并找到解密方案,从而解密DIR822C1_FW315WWb02
固件。binwalk -ME
直接提取。squashfs-root
文件夹内搜索update
、firmware
、upgrade
、download
等关键的字符串。/etc/templates/hnap/StartFirmwareDownload.php
文件中找到线索,在浏览器中访问该文件就会执行下载固件的操作,这里有一行注释为// fw encimg
,对应意思就是firmware
、encryption
、image。
setattr("/runtime/tmpdevdata/image_sign" ,"get","cat /etc/config/image_sign");
$image_sign = query("/runtime/tmpdevdata/image_sign");
fwrite("a", $ShellPath, "encimg -d -i ".$fw_path." -s ".$image_sign." > /dev/console \n");
del("/runtime/tmpdevdata");
setattr
函数将属性 /runtime/tmpdevdata/image_sign
设置为 cat /etc/config/image_sign
,再使用 query
函数从属性 /runtime/tmpdevdata/image_sign
中获取固件映像签名,并将其存储在变量 $image_sign
中。$image_sign
将被设置为wrgac43s_dlink.2015_dir822c1
fwrite
函数将命令字符串 encimg -d -i ".$fw_path." -s ".$image_sign." > /dev/console
写入文件 $ShellPath
。后续会执行这个shell。
encimg
程序位于/usr/sbin。
readelf
命令可以知道该程序是32位大端MIPS架构。encimg -d -i ".$fw_path." -s ".$image_sign.
等参数。.$fw_path.
就是需要解密的加密固件的路径,即 D-Link DIR-822-US 系列路由器 3.15B02 版本固件的路径。.$image_sign.
即wrgac43s_dlink.2015_dir822c1。
qemu-mips-static
与加密固件DIR822C1_FW315WWb02.bin
复制到squashfs-root
目录中用于运行encimg。
binwalk
去查看DIR822C1_FW315WWb02.bin
,不仅可以看到文件信息,还发现熵值也变了。提取解密后的固件
binwalk -Me
成功提取固件系统文件。看雪ID:Arahat0
https://bbs.kanxue.com/user-home-964693.htm
# 往期推荐
2、Large Bin Attack学习(_int_malloc源码细读 )
3、CVE-2022-2588 Dirty Cred漏洞分析与复现
4、开发常识 | 彻底理清 CreateFile 读写权限与共享模式的关系
球分享
球点赞
球在看
点击阅读原文查看更多