欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

隱藏shell腳本內(nèi)容的工具?shc詳解

 更新時(shí)間:2021年11月27日 14:24:49   作者:Linux開(kāi)發(fā)那些事兒  
本文主要介紹了隱藏shell腳本內(nèi)容的工具?shc,?雖然它加密的安全性不高,但是我們平??梢园阉鳛橐粋€(gè)shell腳本代碼隱藏和混淆工具來(lái)使用,對(duì)shell腳本隱藏相關(guān)知識(shí)感興趣的朋友一起看看吧

從事 Linux 開(kāi)發(fā)的同學(xué),經(jīng)常需要編寫(xiě) shell 腳本,有時(shí)腳本中會(huì)涉及到一些敏感內(nèi)容,比如一些 IP 地址,用戶(hù)名以及密碼等,或者腳本中有一些關(guān)鍵的代碼, 所有這些內(nèi)容你都不想別人閱讀或者修改,更進(jìn)一步,你希望對(duì)腳本設(shè)置過(guò)期時(shí)間,超過(guò)指定時(shí)間時(shí)間之后,腳本就無(wú)法使用

在不改變腳本內(nèi)容、功能以及執(zhí)行方式的情況下,有沒(méi)有辦法實(shí)現(xiàn)上面的需求呢?

答案是:有的, 在Linux下,我們可以使用 shc 這個(gè)工具來(lái)實(shí)現(xiàn)隱藏shell腳本內(nèi)容以及設(shè)置過(guò)期時(shí)間的目的

簡(jiǎn)介

shc 是一個(gè)通用shell腳本編譯器,它將 shell 腳本編譯 可執(zhí)行的二進(jìn)制文件,它的功能以及執(zhí)行方式和原始腳本沒(méi)有區(qū)別

gcc 編譯器不同的是,shc 并沒(méi)有把腳本源代碼轉(zhuǎn)化成機(jī)器碼,它只是生成了一份 C 語(yǔ)言代碼,這份 C 語(yǔ)言代碼中包含了加密的原始shell腳本,并為它添加了過(guò)期功能,然后,通過(guò)gcc編譯器將C代碼編譯成可執(zhí)行的二進(jìn)制文件

安裝

目前,大多數(shù)的 Linux 發(fā)行版的倉(cāng)庫(kù)中都已經(jīng)包含了 shc, 只需要使用默認(rèn)的包管理器就可以安裝,具體的安裝命令如下:

yum install shc

輸入 shc -v 命令,下面的輸出表示安裝成功

[root@ecs-centos-7 shc_test]# shc -v
shc parse(-f): No source file specified

shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-o outfile] [-rvDSUHCABh] -f script

常用選項(xiàng)

下面是 shc 常用的一些選項(xiàng)以及選項(xiàng)的描述

選項(xiàng) 描述
-f 待編譯的shell腳本文件
-o 指定編譯生成的二進(jìn)制文件
-e 設(shè)置過(guò)期時(shí)間,格式 日/月/年
-m 過(guò)期之后,執(zhí)行腳本時(shí)的提示信息
-v 輸出編譯shell腳本的過(guò)程
-r 編譯生成可再發(fā)行的二進(jìn)制

編譯腳本

sehll 腳本編譯成可執(zhí)行的二進(jìn)制文件之后,只需要把二進(jìn)制文件提供給執(zhí)行者即可,這樣執(zhí)行者就無(wú)法知道原始腳本代碼了,從而實(shí)現(xiàn)別人無(wú)法閱讀和修改代碼的目的

新建 func.sh 腳本,往其中添加如下內(nèi)容:

#!/bin/bash

#是否是有效的密碼
valid_passwd()
{
   if [ "$1" == "123" ]; then
        echo 1
   else
        echo 0
   fi
}

#獲取最大數(shù)量
max_num()
{
  echo 100
}

#登錄到遠(yuǎn)程機(jī)器
login()
{
  sshpass -p '123456' ssh test@192.168.70.20
}

#版本號(hào)
ver()
{
   echo "1.0"
}

if [ $# -ne 0 ]; then
        name="$1"
        shift 1
        ${name} "$@"
fi

執(zhí)行下面的命令,編譯 func.sh 腳本

shc -rf func.sh -o func.bin

編譯完之后,當(dāng)前目錄下會(huì)出現(xiàn)三個(gè)文件

[root@ecs-centos-7 shc_test]# ll
-rwxrwxr-x 1 root root 11640 7月   1 00:24 func.bin
-rw-r--r-- 1 root root   373 7月   1 00:19 func.sh
-rw-r--r-- 1 root root 19811 7月   1 00:24 func.sh.x.c

func.sh 是原始的腳本文件,func.sh.x.c 是生成的 c語(yǔ)言代碼, func.bin 是生成可執(zhí)行的二進(jìn)制文件,它的使用方法和原始腳本是一樣的

注意: 編譯出來(lái)的二進(jìn)制文件func.bin,如果想讓它在其他機(jī)器也能運(yùn)行的話(huà),一定要指定 -r 選項(xiàng)

使用 file 命令分別查看 func.bin 、func.sh.x.c,結(jié)果如下:

腳本對(duì)外提供 valid_passwd、 max_num、 login、 ver 這四個(gè)接口,腳本中已經(jīng)注明了每個(gè)接口的作用,使用方法是 ./func.bin 接口名 接口參數(shù)列表,下面的兩個(gè)實(shí)例說(shuō)明了如何使用腳本

實(shí)例1

分別執(zhí)行 ./func.bin ver./func.sh ver 命令,結(jié)果如下

從上圖可以看出,無(wú)論是用腳本還是二進(jìn)制,最終的結(jié)果都是一樣的

實(shí)例2

執(zhí)行 ./func.bin login 命令,結(jié)果如下

當(dāng)傳入 login 參數(shù)時(shí),就會(huì)執(zhí)行func.sh腳本中的 login 函數(shù),該函數(shù)的作用是使用 SSH 登錄到遠(yuǎn)程機(jī)器, 函數(shù)體中的 sshpass 是一個(gè)自動(dòng)填充SSH登錄密碼的工具

從結(jié)果可以知道,執(zhí)行 ./func.bin login 命令之后,就登錄到 ip 為 192.168.70.20 機(jī)器的 /home/test 目錄,后面再輸入 exit 從遠(yuǎn)程機(jī)器退回到當(dāng)前機(jī)器的目錄

我們把 func.sh 腳本編譯成 func.bin 二進(jìn)制文件的目的就是要隱藏腳本文件中一些敏感信息,比如:腳本中的SSH用戶(hù) test , IP地址 192.168.70.20 以及密碼 123456

設(shè)置過(guò)期時(shí)間

shc 除了將把腳本編譯成二進(jìn)制,還能為二進(jìn)制設(shè)置過(guò)期時(shí)間,下面還是以 func.sh 腳本為例來(lái)說(shuō)明

執(zhí)行 shc -e 25/6/2021 -m "The script is expired, Please contact test@qq.com" -rf func.sh -o func.bin 命令把腳本的過(guò)期時(shí)間設(shè)置為 2021年6月25日,執(zhí)行過(guò)期后的腳本提示語(yǔ)設(shè)置為 "The script is expired, Please contact test@qq.com"

然后,執(zhí)行 ./func.bin ver 命令進(jìn)行測(cè)試,結(jié)果如下

從上圖可以看出,腳本設(shè)置過(guò)期時(shí)間之后,再次執(zhí)行腳本會(huì)提示已經(jīng)過(guò)期了

如何引用二進(jìn)制腳本

func.sh 編譯成了二進(jìn)制后,其他腳本引用它的方式也要調(diào)整下,原來(lái)以 source ./func.sh 的使用方式都需要修改,因?yàn)?fun.sh 已經(jīng)由原來(lái)的 ASICII 文件變成了 二進(jìn)制文件了,下面給出一個(gè)shell腳本引用二進(jìn)制腳本 func.bin 的實(shí)例

新建 test_func.sh 腳本,腳本內(nèi)容如下:

#!/bin/bash

#調(diào)用 valid_passwd 函數(shù)
ret=$(./func.bin valid_passwd 123)
if [ $ret -eq 1 ]; then
   echo "passwd ok"
fi

#調(diào)用 valid_passwd 函數(shù)
ret=$(./func.bin valid_passwd 124)
if [ $ret -eq 1 ]; then
   echo "passwd ok"
else
   echo "passwd fail"
fi

#調(diào)用 max_num 函數(shù)
ret=$(./func.bin max_num)
echo "max_num:"$ret

#調(diào)用 ver 函數(shù)
ret=$(./func.bin ver)
echo "version:"$ret

執(zhí)行 ./test_func.sh 命令,結(jié)果如下

從上圖可以看出,test_func.sh 腳本分別調(diào)用了二進(jìn)制文件 fun.bin 中的 valid_passwd、max_num、 ver 函數(shù),根據(jù) func.sh 腳本內(nèi)容,可以確定結(jié)果輸出都是正確的

從這個(gè)實(shí)例可以得出,普通腳本也可以正常使用二進(jìn)制的腳本

安全性

shc 使用的加密類(lèi)型是叫做 RC4流密碼的一個(gè)變體,目前它已經(jīng)被證實(shí)存在弱點(diǎn),存在被破解的可能,
尤其在 shc 中,密鑰被攜帶到加密腳本本身中,所以,是存在 通過(guò)反匯編破解出密鑰,進(jìn)而通過(guò)密鑰還原原始腳本的可能性

因此,我們不應(yīng)該依賴(lài) shc 加密的安全性,而是更多的把它當(dāng)作是shell腳本內(nèi)容的隱藏或者混淆工具

小結(jié)

本文主要介紹了隱藏shell腳本內(nèi)容的工具 shc, 雖然它加密的安全性不高,但是我們平??梢园阉鳛橐粋€(gè)shell腳本代碼隱藏和混淆工具來(lái)使用,也能達(dá)到我們的目的, 更多關(guān)于 shc 的相關(guān)知識(shí)請(qǐng)參考網(wǎng)上其他資料

到此這篇關(guān)于隱藏shell腳本內(nèi)容的工具 shc詳解的文章就介紹到這了,更多相關(guān)shell腳本隱藏內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux中的Syslog命令

    Linux中的Syslog命令

    syslog是Linux系統(tǒng)默認(rèn)的日志守護(hù)進(jìn)程,默認(rèn)的syslog配置文件是/etc/syslog.conf文件。接下來(lái)通過(guò)本文給大家分享Linux中的Syslog命令,感興趣的朋友一起看看吧
    2017-09-09
  • shell實(shí)現(xiàn)Fisher–Yates shuffle洗牌算法介紹

    shell實(shí)現(xiàn)Fisher–Yates shuffle洗牌算法介紹

    大家好,本篇文章主要講的是shell實(shí)現(xiàn)Fisher–Yates shuffle洗牌算法介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下哦
    2021-11-11
  • shell 中數(shù)學(xué)計(jì)算總結(jié)

    shell 中數(shù)學(xué)計(jì)算總結(jié)

    shell中的賦值和操作默認(rèn)都是字符串處理,在此記下shell中進(jìn)行數(shù)學(xué)運(yùn)算的幾個(gè)特殊方法,以后用到的時(shí)候可以來(lái)看,呵呵
    2012-09-09
  • Git 創(chuàng)建分支提交遠(yuǎn)程分支詳解

    Git 創(chuàng)建分支提交遠(yuǎn)程分支詳解

    這篇文章主要介紹了Git 創(chuàng)建分支提交遠(yuǎn)程分支詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 使用shell腳本快速登錄容器的實(shí)現(xiàn)步驟

    使用shell腳本快速登錄容器的實(shí)現(xiàn)步驟

    本文主要介紹了使用shell腳本快速登錄容器的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Linux中cat命令的使用詳解

    Linux中cat命令的使用詳解

    cat?命令的用途不僅僅是顯示文件內(nèi)容,還可以打印文本文件的文件內(nèi)容,下面就為大家詳細(xì)介紹一下Linux中cat命令的具體用法,需要的小伙伴可以了解一下
    2023-08-08
  • 利用shell獲取指定日期前N天的日期

    利用shell獲取指定日期前N天的日期

    最近因?yàn)轫?xiàng)目的需要對(duì)比2015年10月的數(shù)據(jù),因?yàn)橐荒陙?lái)的數(shù)據(jù)經(jīng)過(guò)了很多次調(diào)整和處理,遇到的最直接的問(wèn)題是很多數(shù)據(jù)需要重新計(jì)算。只好寫(xiě)腳本刷數(shù)據(jù)。在準(zhǔn)備腳本的過(guò)程中,就需要根據(jù)給定的日期處理數(shù)據(jù),所以就有了這篇文章,下面有需要的朋友們一起學(xué)習(xí)學(xué)習(xí)。
    2016-11-11
  • Linux命令行和shell腳本編程寶典 Richard Blum

    Linux命令行和shell腳本編程寶典 Richard Blum

    Linux命令行和shell腳本編程寶典,主要介紹了linux一些命令的使用
    2012-09-09
  • 在 Shell 提示符中顯示 Git 分支名稱(chēng)的方法

    在 Shell 提示符中顯示 Git 分支名稱(chēng)的方法

    這篇文章主要介紹了在 Shell 提示符中顯示 Git 分支名稱(chēng)的方法,本文詳細(xì)的講解了解決這個(gè)需求的過(guò)程,需要的朋友可以參考下
    2015-04-04
  • 深入淺出Shell編程 Shell變量介紹

    深入淺出Shell編程 Shell變量介紹

    先不要管Shell的版本,來(lái)看看Shell 變量,在Shell中有三種變量:系統(tǒng)變量,環(huán)境變量,用戶(hù)變量。其中用戶(hù)變量在編程過(guò)程中使用最多,系統(tǒng)變量在對(duì)參數(shù)判斷和命令返回值判斷會(huì)使用,環(huán)境變量主要是在程序運(yùn)行的時(shí)候需要設(shè)置。
    2013-01-01

最新評(píng)論