手上有一台设备希望从中提取一个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 参数后,会显示所有行。
直接运行命令即可在控制台输出转储后的二进制文件:
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 ...