用hexdump从嵌入式Linux设备中提取二进制文件

手上有一台设备希望从中提取一个ELF到本地做逆向工程,设备只开放了一个COM口用于访问U-Boot和Linux Shell,BusyBox里可用的命令少得可怜,tftp、minicom也全部阉割。手头暂时没有直接拆flash读rootfs的工具,不过好在/usr/bin里还留了一个hexdump可以转储二进制文件。

hexdump本身只有转储功能,不能将转储之后的数据还原成二进制文件。 目标:将hexdump转储的十六进制文本还原为原始的二进制文件。

$ hexdump -v -e '16/1 "%02x " "\n"' ca-app

其中: -v 表示输出时不要省略重复的行。默认情况下,如果有连续相同的数据行,hexdump 会省略这些行,只显示一行,并在其后用一个星号 (*) 表示省略。使用 -v 参数后,会显示所有行。 [collapse title="-e 用来指定输出格式,指导 hexdump 如何显示数据。"]‘16/1 “%02x " “\n”’ 16/1:每次处理16个字节,每个字节单独处理一次。 “%02x “:指定每个字节的显示格式。%02x 表示以十六进制形式显示每个字节,至少占用两个字符的宽度,不足的地方用0填充。 “\n”:每处理完16个字节后,输出一个换行符。[/collapse]

直接运行命令即可在控制台输出转储后的二进制文件:

7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
03 00 08 00 01 00 00 00 80 8e 00 00 34 00 00 00
54 85 04 00 07 10 00 00 34 00 20 00 0a 00 28 00
20 00 1f 00 06 00 00 00 34 00 00 00 34 00 00 00
34 00 00 00 40 01 00 00 40 01 00 00 04 00 00 00
04 00 00 00 03 00 00 00 74 01 00 00 74 01 00 00
74 01 00 00 0d 00 00 00 0d 00 00 00 04 00 00 00
...

串口控制台将输出的内容保存到文本文件ca-app.hex。

在Ubuntu中使用xxd即可将转储的内容还原为二进制文件。

$ xxd -r -p ca-app.hex ca-app

验证:

1、使用IDA加载还原后的文件可正常进行逆向工程。

2、再次运行hexdump转储还原后的文件,内容相同。

7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
03 00 08 00 01 00 00 00 80 8e 00 00 34 00 00 00
54 85 04 00 07 10 00 00 34 00 20 00 0a 00 28 00
20 00 1f 00 06 00 00 00 34 00 00 00 34 00 00 00
34 00 00 00 40 01 00 00 40 01 00 00 04 00 00 00
04 00 00 00 03 00 00 00 74 01 00 00 74 01 00 00
74 01 00 00 0d 00 00 00 0d 00 00 00 04 00 00 00
...
Licensed under CC BY-NC-SA 4.0
最后更新于 2023-11-07
Powered by Hugo | Theme Stack