在 x86_64 Ubuntu 下反编译/运行 MIPS 可执行文件

在 x86_64 Ubuntu 下反编译/运行 MIPS 可执行文件

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

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

这是 rootfs.img 的 binwalk:

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

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

最终的固件大小比原始固件大。尝试闪光,但什么也没发生。我分析了固件,特别是升级方法,以了解如何正确构建固件。

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

这是该文件的 Pastebin 的链接

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

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

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

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

我在文件夹 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)

这是文件的 binwalk sig_verify

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环境(虚拟机)下运行它,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

首先,你的意思是提取或解压,而不是反编译。然而,更重要的是,您需要的是 qemu 用户程序,而不是 qemu 系统。例如,在 Debian GNU/Linux 上,您只需安装 qemu-user-binfmt 软件包,然后就可以像本机二进制文件一样运行 tghese 二进制文件。

唯一的复杂之处是这些二进制文件需要硬编码位置的文件(例如 /lib 中的 uClibc)。解决此问题的一个简单方法是将相关的 qemu 用户(例如“qemu-mips”)复制到提取的根目录内的同一路径中:

cp /usr/bin/qemu-mips router-root/usr/bin

然后你应该能够在里面进行 chroot,使用例如 busybox 作为 shell:

chroot router-root bin/sh
chroot router-root bin/sig_verify ...

然而,如果 sig_verify 使用足够好的签名算法(例如 rsa),那么签署您自己的文件的机会将会很小。

相关内容