我正在尝试运行从DSL调制解调器路由器的提取文件系统中挖出的可执行文件。因此,首先,我需要安装MIPS Linux机器或采用仿真路径。经过一些研究和努力,我让QEMU运行了具有网络访问权限和USB支持的Debian MIPS系统,以将文件复制到仿真文件系统中:
文件,更改了rwx属性并尝试执行它,但没有成功

qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap -usb -device usb-host,hostbus=1,hostaddr=8


如果我列出目录的内容,该文件实际上就存在。我确实注意到一些缺少的库:

root@debian-mips:~/myfiles/# ./generator
-bash: ./generator: No such file or directory


,所以我从提取的路由器固件文件中复制了丢失的libc.so.0: >
然后还有另一个丢失的文件:

root@debian-mips:~/myfiles# ldd generator
    libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x2aaad000)
    libc.so.0 => not found
    libd1.so.2 => /lib/libd1.so.2 (0x2ac2d000)
    libz.so.1 => /usr/lib/libz.so.1 (0x2ac41000)
    libc.so.6 => /lib/libc.so.6 (0x2ac67000)
    /lib/ld-uClibc.so.0 => /lib/ld.so.1 (0x55550000)


从路由器提取的固件中再次复制它: >
此时一切似乎都不错:

root@debian-mips:~/myfiles# ldd generator
    libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x2aaad000)
    libc.so.0 => /usr/lib/libc.so.0 (0x2ac2d00)
    libd1.so.2 => /lib/libd1.so.2 (0x2ac8f000)
    libz.so.1 => /usr/lib/libz.so.1 (0x2aca3000)
    libc.so.6 => /lib/libc.so.6 (0x2acc9000)
    /lib/ld-uClibc.so.0 => /lib/ld.so.1 (0x55550000)
    ld-uClibc.so.0 => not found


但是,我仍然无法执行该文件。

root@debian-mips:~/myfiles# ldd generator
    libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x2aaad000)
    libc.so.0 => /usr/lib/libc.so.0 (0x2ac2d00)
    libd1.so.2 => /lib/libd1.so.2 (0x2ac8f000)
    libz.so.1 => /usr/lib/libz.so.1 (0x2aca3000)
    libc.so.6 => /lib/libc.so.6 (0x2acc9000)
    ld-uClibc.so.0 => /usr/lib/ld-uClibc,so,0 (0x2ae4b000)
    /lib/ld-uClibc.so.0 => /lib/ld.so.1 (0x55550000)


库文件删除thos后,我的工作变得更加混乱ei复制并尝试了类似的方法:

root@debian-mips:~/myfiles# file generator
generator: ELF 32-bit MSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), stripped


同样令人失望的是“没有这样的文件或目录消息” ...
值得赞赏的原因是,在这一切之后,感觉就像是死路一条。我必须手动找到它并dpkg,这样毕竟可以给出以下结果: />

评论

你能告诉我们strace ./generator的输出吗?

确保以递归方式解决.sos的所有依赖项

你是怎么挖出来的?

#1 楼

尝试使用readelf比较固件二进制文件和任何“马耳他”二进制文件,以发现差异。

示例:

$ readelf -a gdb | more
ELF Header:
  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, big endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           MIPS R3000
  Version:                           0x1
  Entry point address:               0x431fd0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          4016720 (bytes into file)
  Flags:                             0x5, noreorder, cpic, mips1
...


评论


我有足够的名声只能评论自己:) @Cyrax:vmlinux-2.6.32-5-4kc-malta是非常具体的ELF文件。我的意思是将提取的文件(生成器)与来自debian-mips环境的任何常规文件(/ bin / bash)进行比较。请注意两个文件的“程序头”部分中的字符串“请求程序解释器”。

–伊戈尔·马秋(Igor Matyuh)
18-10-2在23:43



#2 楼

由于具有固件映像,因此一种更简单的方法是chroot进入设备的根文件系统(例如# chroot path/to/firmware /bin/sh)。这样可以减轻可能难以解决的任何动态加载问题。

唯一的要求是,必须为正确的体系结构安装qemu二进制文件。