如何将二进制文件嵌入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


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


版权声明:本文为weixin_42236449原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。