使用Shell脚本制作Linux自解压文件


prtyaa
prtyaa 2024-02-19 20:41:00 49633 赞同 0 反对 0
分类: 资源 标签: 运维
前几天在使用阿里云时候发现阿里工程师提供的一个脚本里,后面都是乱码加密文件,并且文件只要一更改自解压就会失效,心里是什么技术进行代码加密,仔细查看代码后发现,原来是 .tar.gz 的二进制文件,把打包压缩以后的文件进行直接存进shell脚本后面,从而实现自解压,次篇文件使用 tar 编码进行嵌入存文件。

一、系统环境说明

  • Centos 7 系统
  • shell使用自带bash

二、开始编码测试

1.先来看看阿里工程师编写的部分代码,从代码可以看出后面一连串的乱码是一个 .tar.gz 的打包压缩文件,可以看到是使用 awk 进行获取 .tar.gz
二进制开始行,所以才有那句话 #This line must be the last line of the file 。


#! /bin/bash
#
# Copyright (c) 2009-2015 Aliyun Corporation
# All Rights Reserved
.......
ARCHIVE=`awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' "$0"`
tail -n+$ARCHIVE "$0" | tar -ixzvm -C $tmp_dir > /dev/null 2>&1 3>&1
if [ $? -ne 0 ]
then
    echo "Error: prepare env error, failed create extract xbstream..." >&2
    rm -rf $tmp_dir
    exit 1
fi
......
exit 0

#This line must be the last line of the file
__ARCHIVE_BELOW__
^_^H^@_÷^U^@^CÔ[wX^TW׿à¨Y°!¸5±ÐD¯º(Ø+ö^LÃî,lc^KÅh²vÆÞ0FÑ Á^^RM¢Ñ¬]^TF /dev/null 2>&1 3>&1
if [ $? == 0 ];then
        echo "Success"
else
        echo "Fail"
fi


exit 0
#This line must be the last line of the file
__ARCHIVE_BELOW__

3.创建一个 test 文件夹,里面建两个文件分别是 TestA 和 TestB ,文件里面分别写着 This is TestA 和 This is
TestB

[root@gz--vm-workstation-0001 scripts]# mkdir test
[root@gz--vm-workstation-0001 scripts]# cd test/
[root@gz--vm-workstation-0001 test]# echo "This is TestA" > TestA
[root@gz--vm-workstation-0001 test]# echo "This is TestB" > TestB
[root@gz--vm-workstation-0001 test]# cat TestA 
This is TestA
[root@gz--vm-workstation-0001 test]# cat TestB
This is TestB
[root@gz--vm-workstation-0001 test]#

4.把文件进行打包加压嵌入 shell 脚本(也可以使用cat .tar.gz 文件嵌入 shell 脚本),并且删除 test 文件夹


[root@gz--vm-workstation-0001 scripts]# tar  -zcvm test >> SelfExtracting.sh 
test/
test/TestA
test/TestB
[root@gz--vm-workstation-0001 scripts]# ls
SelfExtracting.sh  test
[root@gz--vm-workstation-0001 scripts]# rm -rf test
[root@gz--vm-workstation-0001 scripts]# ls
SelfExtracting.sh

5.再次查看 SelfExtracting.sh 脚本,发现已经有 .tar.gz 的二进制文件,但注意此时的脚本不能修改和增加任何字符

#!/bin/bash
#Test shell self-extracting
TmpDir=/tmp

ARCHIVE=$(awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' "$0")
tail -n+$ARCHIVE "$0" | tar -xzvm -C $TmpDir > /dev/null 2>&1 3>&1
if [ $? == 0 ];then
        echo "Success"
else
        echo "Fail"
fi


exit 0
#This line must be the last line of the file
__ARCHIVE_BELOW__
^_^H^@^¨Z^@^CíÔM
Â0^Pá¬=En`¦ùéÚ¡^Wp!èªÐÆû;ÍB â"âû^P@^B^Yø2ͧ)ïM]Nµ1Y=Ïe-¾¸^S^W}kl¬Wqòq´ÖÃßû´¿Qyο×Ï¡Þ^]sÀ)×ùKZä/¿Ö^[ëêôðçù÷çËdu'°ûu5XÛ½ÿ»zw|×ÿóÿ_¢nÓÿ+Xö^?Gÿ^C^@^@^@^@^@^@^@^@^@^@°I7^ZÊá^@(^@^@

6.运行脚本 SelfExtracting.sh 测试

[root@gz--vm-workstation-0001 scripts]# ./SelfExtracting.sh
Success
[root@gz--vm-workstation-0001 scripts]# ls
SelfExtracting.sh

7.聪明的你可能发现,运行显示成功,怎么不见原来的的目录呢,哈哈哈,有没有注意我们是把解压目录指向 /tmp
下面,返回去查看上面脚本定义的变量,所以查看如下

[root@gz--vm-workstation-0001 test]# cd /tmp/test
[root@gz--vm-workstation-0001 test]# ls
TestA  TestB
[root@gz--vm-workstation-0001 test]# cat TestA 
This is TestA
[root@gz--vm-workstation-0001 test]# cat TestB
This is TestB
[root@gz--vm-workstation-0001 test]#

8.在深入研究过程中,看到一篇博客[点击这里查看],发现还有专门的命令可以搞定在脚本嵌入二进制文件: uuencode,安装这个工具请在命令行输入yum install sharutils 进行安装,原理和tar一样,具体操作留给各位去探究了咯。

总结: Shell 自解压脚本在很多情况可以使用,比如防止别人进行修改你的文件,把一些必要的文件发给别人时候,如果使用的是 linux
,可以进行嵌入到shell脚本,就发一个脚本给别人,他们一运行就可以得到他们需要的文件或者配置,如果他们自作聪明打开文件进行修改,哈哈哈哈哈哈哈,对不起,脚本直接报错运行不了。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  124
统信桌面专业版【全盘安装UOS系统】介绍  119
银河麒麟桌面操作系统安装佳能打印机驱动方法  110
银河麒麟桌面操作系统 V10-SP1用户密码修改  104
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!