某些情况下,单纯针对硬件层面的修改可能无法满足需求时,就需要在固件层面进行修改,如通过修改智能摄像头固件中的密码,绕过厂商在串口调试时的密码验证;如修改家用电视机主板固件中的用户信息,解决开机故障问题,如修改路由器固件,使低版本固件兼容高版本硬件,本章将用实例,展示固件修改的具体方式和思路。
对于嵌入式系统的固件,查看其文件系统,解压,找到对应的文件,直接修改,修改之后重打包刷入即可。例如对某个摄像头 root 密码的修改。
拿到固件 BIN 之后,使用 binwalk 解包
发现有多个 squashfs 文件系统,且解包后对应的文件系统根目录只有一个,其他几个是不完全的目录,猜测第一个 squashfs 对应文件系统根目录。将第一个 squashfs 文件系统从固件中 dump 出来,然后使用 unsquashfs 工具解压
在当前工作目录中多出一个 squashfs-root 文件夹,内容正是根文件系统
查看 etc/shadow
将root账户的密码字段置空后保存,然后使用 mksquashfs 工具打包,压缩格式选用和 second.bin 相同的压缩格式,blocksize 设置为和 second.bin 相同的131072 bytes,将所有文件的所有者使用 -all-root 参数设置为 root,-nopad 指定不要进行4k对齐
由于重打包之后的文件系统比原文件系统要小,所以要对 newrootfs.bin 末尾进行填充
填充之后的 newrootfs.bin 和 second.bin 大小相同。然后将 first.bin,newrootfs.bin,three.bin 按顺序拼接成新的固件
可以看到修改之后的固件和原固件大小相同,文件结构也相同,配合之前的体外分离硬改,刷入固件之后开机,root 用户已经可以无密码登录。
如果要对 elf 文件的修改,可以参考之前的 2.3.2 固件逆向,2.5.3 远程调试章节,二进制逆向分析,修改对应的指令,字符串来完成程序修改。然后在重新打包回去。
对于无操作系统的单片机固件,需要通过逆向出来,再来修改逻辑或字符串。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。