文章目录
- 背景
- 原理
- 步骤
- 获取待上传文件的十六进制数据
- 格式转换
- 输出
背景
某次误删了环境上的C库之后想到的
什么都不可用了,但当前的ssh连接还在,echo命令和重定向符还可以使用
这就催生了我的想法:直接用echo -en “\xab\xcd” > file这样直接把C库给恢复回来
原理
当前的ssh连接已经被加载到了内存中运行,所以当前连接还在
echo命令不是一般的可执行文件,是bash的内建命令,当前bash也被加载到了内存中,所以当前bash还可用
echo -en “\xab\xcd” > file 输出二进制形式的数据再重定向到文件
步骤
获取待上传文件的十六进制数据
首先把待上传文件以十六进制打印出来,比如我要恢复C库,就去其他一样的环境上找一个C库
od -xvAn file > origin.bin,-x 以 16进制打印, -v verbose 不省略全0行, -An 不打印偏移量
这样就输出了全部的二进制数据到origin.bin文件
格式转换
上一步输出的十六进制数据还需要转换,需要每个字节前插入一个\x转义符,按内存序重排、移除空格和换行符
这个字符插入+顺序重排写个代码随便就搞定了,我的源代码不在这台电脑上,有空了补一下
输出
用本地环境的文本编辑器打开重排后的文件,全选 复制
然后在目标环境上打印出echo -en “” > target_file,粘贴到引号中间
静静等待复制完成
因为一个字节会被扩展为两个16进制数且插入了\x符号,所以原本2~3MB大小的文件会被扩大到约10MB大小,但是不用担心,剪贴板是很可靠的,即使10兆个字符它也一样不会有一个误码
10MB字节我复制约需5分钟,时间长短可能和本地电脑、目标主机性能、网速有关