将二进制文件打包到shell脚本
之前因为要用支付宝更新浏览器插件,直接下载了一个aliedit.sh脚本,直接执行脚本,便搞定了插件的安装,正要称赞阿里的开发人员人性化了,转念一下,一个shell脚本就能搞定的安装,岂不是可以直接cat脚本就可得知支付宝监控工具的代码啦.
直接cat结果如下:

shell脚本后面跟了一些乱码,莫非是直接加密了shell,通过阅读代码可以看出脚本后的乱码其实一个tar.gz的二进制:

首先是用awk获取脚本代码的开始行号,使用tail获取所有二进制码(所以脚本才会有如此注释:#This line must be the last line of the file),通过管道传给tar命令解压到制定目录.

如上可以看到,真正执行是通过解压到临时目录的install.sh 实现的,同时真正玄机在libaliedit64下,是看不到了.

不得不说的一个偶然出现的问题:脚本执行完成之后会把临时目录删除,通过vim注释掉删除语句,结果提示包错误,但是怀疑是难道是有脚本校验,但脚本包错误提示是因为tar失败发出的,原来是二进制的乱码通过vi编辑后保存,二进制便彻底变成乱码了,所以tar解包失败.
具体使用方式如下:

其实这个脚本就是一个自解压包,同理你可以把很多文件的二进制搞出来,脚本中找个命令接受转义即可.

当然还有专门的命令可以搞定在脚本嵌入二进制文件: uuencode

将 oenhan.com.1.tar编码到 oenhan.com.txt,将来解码到 oenhan.com.2.tar.
具体实现:
首先需要写一个脚本example.sh的头:

然后将自解压代码编码到脚本中

如此一个自解压脚本做成了, uuencode和tar解压没有本质区别,uudecode 自己完成了tar找寻二进制代码的过程,看似很自动化却需要用户安装一个包sharutils,从简易度上得不偿失,不如用tar的方式搞定shell的二进制代码嵌入.


在shell中嵌入二进制文件来自于OenHan

链接为:http://oenhan.com/shell-pack-bin

发表评论