如何将二进制文件嵌入Linux shell 脚本中

 

1.首先对二进制文件进行编码

例如文件: binary.zip

]# base64 binary.zip 
UEsDBAoAAAAAAPVODFWspIpYBQAAAAUAAAAGABwAYmluYXJ5VVQJAAMds/ViHbP1YnV4CwABBAAA
AAAEAAAAAGFiY2QKUEsBAh4DCgAAAAAA9U4MVaykilgFAAAABQAAAAYAGAAAAAAAAQAAAKSBAAAA
AGJpbmFyeVVUBQADHbP1YnV4CwABBAAAAAAEAAAAAFBLBQYAAAAAAQABAEwAAABFAAAAAAA=

2.编写测试脚本

  • test.sh

#! /bin/bash
cpath=$(cd `dirname $0`; pwd)

BinFile="$1"
BinShell="$2"

if [ "A$#" != "A2" ];then
    echo -e "\n\n===> The Script $0 need two parameters.\n"
    echo -e "\t\$1: Binary filename."
    echo -e "\t\$2: output script name."
    echo -e "\n\n"
    exit 200
fi

cd ${cpath};
cat > ${cpath}/${BinShell} << "EOOF"
#! /bin/bash

cpath=$(cd `dirname $0`; pwd)

PAYLOAD_LINE=$(awk '/^__BIN_BEGINS__/ { print NR + 1; exit 0; }' $0)
PAYLOAD_END=$(awk '/^__BIN_END__/ { print NR - 1; exit 0; }' $0)

head -n ${PAYLOAD_END} $0 | tail -n +${PAYLOAD_LINE} | base64 -d &> __MEISBINFILE__
echo -e "\n\n======================================================\n\n"
echo -e "\tBinary File: __MEISBINFILENAME__ is export successed."
echo -e "\texport path: ${cpath}/__MEISBINFILENAME__"
echo -e "\n\n======================================================\n\n"
EOOF

cat >> ${cpath}/${BinShell} << EOF
function BASE64
{
__BIN_BEGINS__
`base64 ${cpath}/${BinFile}`
__BIN_END__
}
EOF

# replace  __MEISBINFILE__
sed -i "s#__MEISBINFILE__#${cpath}/${BinFile}#g" ${cpath}/${BinShell}
sed -i "s#__MEISBINFILENAME__#${BinFile}#g" ${cpath}/${BinShell}

3.执行脚本,生成新的脚本

]# bash test.sh 


===> The Script test.sh need two parameters.

    $1: Binary filename.
    $2: output script name.


  • /bin/bash test.sh binary.zip binary.sh

  • cat binary.sh

  • #! /bin/bash
    
    cpath=$(cd `dirname $0`; pwd)
    
    PAYLOAD_LINE=$(awk '/^__BIN_BEGINS__/ { print NR + 1; exit 0; }' $0)
    PAYLOAD_END=$(awk '/^__BIN_END__/ { print NR - 1; exit 0; }' $0)
    
    head -n ${PAYLOAD_END} $0 | tail -n +${PAYLOAD_LINE} | base64 -d &> /root/binary.zip
    echo -e "\n\n======================================================\n\n"
    echo -e "\tBinary File: binary.zip is export successed."
    echo -e "\texport path: ${cpath}/binary.zip"
    echo -e "\n\n======================================================\n\n"
    function BASE64
    {
    __BIN_BEGINS__
    UEsDBAoAAAAAAPVODFWspIpYBQAAAAUAAAAGABwAYmluYXJ5VVQJAAMds/ViHbP1YnV4CwABBAAA
    AAAEAAAAAGFiY2QKUEsBAh4DCgAAAAAA9U4MVaykilgFAAAABQAAAAYAGAAAAAAAAQAAAKSBAAAA
    AGJpbmFyeVVUBQADHbP1YnV4CwABBAAAAAAEAAAAAFBLBQYAAAAAAQABAEwAAABFAAAAAAA=
    __BIN_END__
    }

4.将嵌入脚本的二进制文件导出

]# bash binary.sh 


======================================================


	Binary File: binary.zip is export successed.
	export path: /root/binary.zip


======================================================

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值