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

前言: 前幾天在使用阿里云時(shí)候發(fā)現(xiàn)阿里工程師提供的一個(gè)腳本里寇壳,后面都是亂碼加密文件瓷耙,并且文件只要一更改自解壓就會(huì)失效朱躺,心里是什么技術(shù)進(jìn)行代碼加密,仔細(xì)查看代碼后發(fā)現(xiàn)搁痛,原來是 .tar.gz 的二進(jìn)制文件长搀,把打包壓縮以后的文件進(jìn)行直接存進(jìn)shell腳本后面,從而實(shí)現(xiàn)自解壓鸡典,次篇文件 使用 tar 編碼進(jìn)行嵌入存文件

一源请、系統(tǒng)環(huán)境說明

  • Centos 7 系統(tǒng)
  • shell使用自帶bash

二、開始編碼測試

  1. 先來看看阿里工程師編寫的部分代碼轿钠,從代碼可以看出后面一連串的亂碼是一個(gè) .tar.gz 的打包壓縮文件巢钓,可以看到是使用 awk 進(jìn)行獲取 .tar.gz 二進(jìn)制開始行,所以才有那句話 #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±DD<8c>ˉo(?+?<92>^L??,<8c>lc^K?h2v<8c>?T0F? á^^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. 創(chuàng)建一個(gè) test 文件夾症汹,里面建兩個(gè)文件分別是 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. 把文件進(jìn)行打包加壓嵌入 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 腳本背镇,發(fā)現(xiàn)已經(jīng)有 .tar.gz 的二進(jìn)制文件,但注意此時(shí)的腳本不能修改和增加任何字符
#!/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!èaD??;íB<8b> a"<95>a?^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??×??T^]sà)<84>×ùKZ?/<9a>?<84>?^[?ê<95>?e?ù÷??du<94>'°?u5X????zw|×?ó?_¢nó?+X?^?G?^C^@^@^@^@^@^@^@^@^@^@°I7^Z<8a>êá^@(^@^@
  1. 運(yùn)行腳本 SelfExtracting.sh 測試
[root@gz--vm-workstation-0001 scripts]# ./SelfExtracting.sh 
Success
[root@gz--vm-workstation-0001 scripts]# ls
SelfExtracting.sh
  1. 聰明的你可能發(fā)現(xiàn)泽裳,運(yùn)行顯示成功瞒斩,怎么不見原來的的目錄呢,哈哈哈涮总,有沒有注意我們是把解壓目錄指向 /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. 在深入研究過程中瀑梗,看到一篇博客[點(diǎn)擊這里查看]烹笔,發(fā)現(xiàn)還有專門的命令可以搞定在腳本嵌入二進(jìn)制文件: uuencode,安裝這個(gè)工具請?jiān)诿钚休斎?br> yum install sharutils 進(jìn)行安裝抛丽,原理和tar一樣谤职,具體操作留給各位去探究了咯
總結(jié): shell 自解壓腳本在很多情況可以使用,比如防止別人進(jìn)行修改你的文件亿鲜,把一些必要的文件發(fā)給別人時(shí)候允蜈,如果使用的是 linux ,可以進(jìn)行嵌入到shell腳本,就發(fā)一個(gè)腳本給別人饶套,他們一運(yùn)行就可以得到他們需要的文件或者配置漩蟆,如果他們自作聰明打開文件進(jìn)行修改,哈哈哈哈哈哈哈凤跑,對不起爆安,腳本直接報(bào)錯(cuò)運(yùn)行不了,哈哈哈哈哈哈哈哈哈哈哈哈哈哈
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仔引,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子褐奥,更是在濱河造成了極大的恐慌咖耘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撬码,死亡現(xiàn)場離奇詭異儿倒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)呜笑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門夫否,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叫胁,你說我怎么就攤上這事凰慈。” “怎么了驼鹅?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵微谓,是天一觀的道長。 經(jīng)常有香客問我输钩,道長豺型,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任买乃,我火速辦了婚禮姻氨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剪验。我一直安慰自己肴焊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布碉咆。 她就那樣靜靜地躺著抖韩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疫铜。 梳的紋絲不亂的頭發(fā)上茂浮,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼席揽。 笑死顽馋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幌羞。 我是一名探鬼主播寸谜,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼属桦!你這毒婦竟也來了熊痴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤聂宾,失蹤者是張志新(化名)和其女友劉穎果善,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體系谐,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巾陕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纪他。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鄙煤。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茶袒,靈堂內(nèi)的尸體忽然破棺而出梯刚,到底是詐尸還是另有隱情,我是刑警寧澤弹谁,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布乾巧,位于F島的核電站,受9級特大地震影響预愤,放射性物質(zhì)發(fā)生泄漏沟于。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一植康、第九天 我趴在偏房一處隱蔽的房頂上張望旷太。 院中可真熱鬧,春花似錦销睁、人聲如沸供璧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睡毒。三九已至,卻和暖如春冗栗,著一層夾襖步出監(jiān)牢的瞬間演顾,已是汗流浹背供搀。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钠至,地道東北人葛虐。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像棉钧,于是被迫代替她去往敵國和親屿脐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容