x86_64 Ubuntu下路由器固件修改和MIPS可执行文件[来自unix.stackexchange.com的X-POST]

逆向工程 二元分析 固件 米普
2021-07-05 17:57:37

来自 unix.stackexchange.com 的 X-POST

我目前正在尝试修改路由器固件:Swisscom Centro Grande - 又名 Pirelli Vx226N1,固件版本:60200。

我已经用FMK v0.99成功地反编译了它,并得到了header.imgrootfs.imgfooter.img图像部分。

这是 rootfs.img 的 binwalk:

Squashfs 文件系统,小端,非标准签名,4.0 版,压缩:gzip,大小:2764423 字节,1145 个 inode,块大小:65536 字节,创建时间:2013 年 3 月 15 日星期五 00:33:08

我成功地用 unsquashfs 反编译了 rootfs.img 并获得了系统文件夹。我进行了一些更改(在 telnet 上启用了 shell)并尝试使用提供的工具(./build-firmware.sh命令)重新打包所有内容

最终的固件大小比原来的要大。试图falsh,什么也没发生。我分析了固件,尤其是升级方法,以了解如何正确构建固件。

我找到了update.sh处理升级过程的文件(分析用户提供的文件,只有在一切正确时才闪烁,以防止砖块)

这是该文件的 pastebin 的链接

我很确定原始固件文件是通过该parse_yaps_image()函数解析的,因此我尝试自行调整以检查文件,但我注意到有一个名为的二进制文件的外部检查sig_verify

如果文件不存在调用另一个函数,问题是提供的函数不正确(wrong validation token即使使用原始固件也会返回错误!)

我的目标是分析sig_verify文件并寻找算法,以了解组合方法并以正确的方式刷新我的路由器并最终获得root shell(并对我想要的所有内容进行修改)

我将所有文件都上传到了Mega 文件夹中,因此想要帮助我的感兴趣的人可以访问所需的任何文件。

我将用于检查文件的两个脚本包含在文件夹 60208 中。

我写的脚本的结果(只是对路由器中脚本的适配)是这样的:

denys@denys-pc:~/Documents/router/Vx226N1/images/modified/60208$ ./check_upgrade_yaps.sh 
Parsing YAPS format...
16+0 records in
16+0 records out
16 bytes (16 B) copied, 0.000843843 s, 19.0 kB/s
Error: wrong validation token (5b445d3b251d59753031c9d7a94ba4ab, 7d98668859855f1b9459256257fc3262)

这是sig_verify文件的binwalk

denys@denys-pc:~/Documents/router/Vx226N1/images/modified/60208$ binwalk sig_verify 

DECIMAL     HEX         DESCRIPTION
-------------------------------------------------------------------------------------------------------
0           0x0         ELF 32-bit MSB executable, MIPS, version 1
1921        0x781       LZMA compressed data, properties: 0x01, dictionary size: 16777216 bytes, uncompressed size: 16777472 bytes

正如您所注意到的,它是一个MIPS可执行文件。我试图在 MIPS 环境(虚拟机qemu-system-mips)下运行它,但没有成功。

qemu-system-mips -M mips -kernel ./vmlinux-2.6.18-6-qemu -initrd ./initrd.gz -hda hda.img -append "root=/dev/ram console=ttyS0" -nographic

内核和 initrd 由http://archive.debian.org/debian/dists/etch/main/installer-mips/current/images/qemu/netboot/下载

任何帮助,将不胜感激。如果有些不清楚,请告诉我:)

- - 编辑 - -

反编译... 谁能将机器语言翻译成人类可以理解的代码?

1个回答

有趣的是,在线反汇编器可重定向反编译器都阻塞了你的sig_verify程序,并objdump说它有一个损坏的节头,而 Ida 可以毫无问题地读取它。

快速浏览一下,其中只有 3 个有趣的函数,我称之为main,generate_hashverify_keygenerate_hashverify_key使用的各种功能gcrypt库(它动态链接)。main从 中打开一个文件argv,用于generate_hash计算文件的校验和,然后调用verify_key. verify_key除了其他一些东西之外gcry_pk_verify,还使用 ​​来验证公钥。如果verify_key成功,则main截断文件中的最后几个字节(我假设其中包含要验证的密钥)。

在我看来,供应商使用一些私钥对固件文件进行签名,并让闪存过程根据相应的公钥检查文件,这使得创建有效的替代固件变得非常困难。然而,我只查看了函数名和字符串,并没有试图理解函数的每个字节,所以我可能是错的。

我不知道我的 IDA 许可证是否允许我公开反汇编,但我会检查这个,如果你有兴趣并且许可证没问题,请将反汇编上传到某个地方,以便你可以进一步调查。