shell 制作自解压文件之tar (一)

前言: 前几天在使用阿里云时候发现阿里工程师提供的一个脚本里,后面都是乱码加密文件,并且文件只要一更改自解压就会失效,心里是什么技术进行代码加密,仔细查看代码后发现,原来是 .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__
^_<8b>^H^@_÷^U^@^CÔ[wX^TW׿à<82><8b>¨Y°!<92>¸<8a>5±ÐD<8c>¯º(Ø+ö<92>^LÃî,<8c>lc^KÅh²v<8c>ÆÞ0FÑ Á^^RM¢Ñ¬]^T<8d>F<

  1. 编写的测试代码如下
#!/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__

  1. 创建一个 test 文件夹,里面建两个文件分别是 TestA 和 TestB ,文件里面分别写着 This is TestAThis 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]# 
  1. 把文件进行打包加压嵌入 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
  1. 再次查看 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__
^_<8b>^H^@^\<8e>¨Z^@^CíÔM
Â0^P<86>á¬=En`¦ùéÚ<9e>¡^Wp!èªÐÆû;ÍB<8b> â"<95>âû^P<9a>@^B^Yø2ͧ)ïM]Nµ1<96>Y=Ïe-¾<89><8d>¸<94><82><9e>^S^W}kl¬\Wq<9d>òq´Ö<8c>Ã<90>ß<9d>û´¿Qyο×Ï¡Þ^]sÀ)<84>×ùKZä/<9a>¿<84>Ö^[ëê<95>ôðçù÷çËdu<94>'°ûu5XÛ½ÿ»zw|×ÿóÿ_¢nÓÿ+Xö^?Gÿ^C^@^@^@^@^@^@^@^@^@^@°I7^Z<8a>Êá^@(^@^@
  1. 运行脚本 SelfExtracting.sh 测试
[root@gz--vm-workstation-0001 scripts]# ./SelfExtracting.sh 
Success
[root@gz--vm-workstation-0001 scripts]# ls
SelfExtracting.sh
  1. 聪明的你可能发现,运行显示成功,怎么不见原来的的目录呢,哈哈哈,有没有注意我们是把解压目录指向 /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]# 
  1. 在深入研究过程中,看到一篇博客[点击这里查看],发现还有专门的命令可以搞定在脚本嵌入二进制文件: uuencode,安装这个工具请在命令行输入
    yum install sharutils 进行安装,原理和tar一样,具体操作留给各位去探究了咯
总结: shell 自解压脚本在很多情况可以使用,比如防止别人进行修改你的文件,把一些必要的文件发给别人时候,如果使用的是 linux ,可以进行嵌入到shell脚本,就发一个脚本给别人,他们一运行就可以得到他们需要的文件或者配置,如果他们自作聪明打开文件进行修改,哈哈哈哈哈哈哈,对不起,脚本直接报错运行不了,哈哈哈哈哈哈哈哈哈哈哈哈哈哈
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容