我已经成功root了一个设备,我想转储它的整个文件系统,以便对其进行分析和逆向工程。
该设备声称是Linux 2.6.31 mips GNU/Linux
。我可以通过网络访问 shell 界面,只需远程登录到端口即可。
如何将其整个文件系统转储到设备之外?
我尝试过的事情
- DD:有点不可能,
df -h
说文件系统已使用 48%,而dd
镜像会将其使用到 98%,可能会耗尽空间并使其变砖? - Rsync:这似乎是最好的选择,但据我所知,rsync 在内部使用 ssh,但该设备没有 ssh,您只需打开一个端口,它就会将您带到 shell。像这样的参数
[email protected]:23:/
似乎只是忽略了端口 (ssh: connect to host 192.168.3.10 port 22: Connection refused
)。rsync
设备中不存在二进制文件。
需要考虑的事项
- 文件系统应该保持完全相同,这意味着即使是符号链接也应该指向它们现在指向的位置。
答案1
通过网络获取数据的最简单方法是使用 TCP 连接通过管道传输数据nc
。根据您想要的克隆的精确程度,此处的“数据”可能意味着以下任一内容:
- 整个块设备(文件系统的完整块级映像):
cat /dev/sda |
或cat /dev/mtdblocksomething |
(是的,这是 cat 的无用用途,此处使用只是为了与其他选项保持一致。请随意将其替换为< /dev/sda
。) - 只是文件/目录/链接/等:(
tar -c / |
可能带有--one-file-system
)
管道之后的内容取决于您是否可以建立从设备到计算机的 TCP 连接,反之亦然。例如:
nc -l -p someport > deviceimage.tar
在你的机器上tar -c / | nc yourmachine someport
在设备上
如果您只能与设备建立连接而不能从设备连接,则只需交换nc -l
和nc
即可。
请注意,如果在克隆过程中发生任何写入,则在不首先静默文件系统的情况下克隆这样的正在运行的系统可能会导致快照不一致。当克隆整个块设备时,这可能会更糟(不一致可能会损坏克隆中的文件系统)。如果设备有点忙,请考虑kill -STOP
尽可能停止 ( )。