如何以可理解的格式转换转储的固件(从 linksys-wrt54gl 通过 JTAG 端口)

逆向工程 调试 二元分析 固件 米普 标签
2021-06-17 16:33:01

为转储的固件发出一些命令:

$ du -h fw.bin
4.0 M

$ file fw.bin
fw.bin: data

$ file -i fw.bin
fw.bin: application/octet-stream; charset=binary

$ binwalk fw.bin
-

$ enca -L none fw.bin
-

我转储固件的方式是使用 JTAG 端口:

并且linksys路由器上的引脚根据数据表(www.cse.buffalo.edu/~bina/amrita/cse524/wrt54gl.pdf)中描述的图设置:

根据参考资料(dangerousprototypes.com/docs/Bus_Pirate_I/O_Pin_Descriptions)放置来自 BusPirate v3.6 的相应引脚:

已发出 OpenOCD 命令,例如:

sudo openocd -f interface/buspirate.cfg -f board/linksys-wrt54gl.cfg -c "init"

BusPirate 的配置 interace/buspirate.cfg

interface buspirate
buspirate_port /dev/ttyUSB0
buspirate_speed normal
reset_config srst_only

board/linksys-wrt54gl.cfg

# Linksys WRT54GL v1.1
#
source [find target/bcm5352e.cfg]
set partition_list {
    CFE         { Bootloader                    0x1c000000 0x00040000 }
    firmware    { "Kernel+rootfs"               0x1c040000 0x003b0000 }
    nvram       { "Config space"                0x1c3f0000 0x00010000 }
}

# External 4MB NOR Flash (Intel TE28F320C3BD90 or similar)
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME cfi 0x1c000000 0x00400000 2 2 $_TARGETNAME

和来源,target/bcm5352e.cfg,它指的是:

set _CHIPNAME bcm5352e
set _CPUID 0x0535217f

jtag newtap $_CHIPNAME cpu -irlen 8 -ircapture 0x1 -irmask 0x1f -expected-id $_CPUID

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME mips_m4k -endian little -chain-position $_TARGETNAME

gdb_memory_map disable
$_TARGETNAME configure -event gdb-attach {
   reset
   halt
}

我打开一个新终端并 telnet 到套接字 openocd 已打开通信,我转储固件如下:

dump_image fw.bin 0x1c000000 0x00400000

这些值改编自linksys-wrt54gl.cfg先前显示文件。

任何想法使用/连接 JTAG 和转储固件可能有什么问题?

有关当前 Linksys-Wrt54gl 的信息:

型号:WRT54GL-EU

固件版本:v4.30.7,2006 年 6 月 20 日

可以在此处获得“转储”固件的副本:https : //www.dropbox.com/s/kl02cnc5qqddx1x/fw.bin?dl=0

1个回答

固件本身很可能不是二进制文件。此外,通常当你运行的文件,它会告诉你是这样的:
file busybox busybox: ELF 32-bit MSB executable, MIPS, MIPS32 version 1我的猜测是您实际上还没有提取任何二进制文件。我的建议是使用 binwalk 之类的东西从固件中提取特定文件和二进制文件。在整个固件上运行 objdump 可能会给你一个固件中每个二进制文件的对象转储,这可能很多。