99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文剖析隱藏shell腳本內(nèi)容的工具shc

開(kāi)關(guān)電源芯片 ? 來(lái)源:Linux開(kāi)發(fā)那些事兒 ? 作者:LinuxThings ? 2021-08-14 10:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

從事 Linux 開(kāi)發(fā)的同學(xué),經(jīng)常需要編寫(xiě) shell 腳本,有時(shí)腳本中會(huì)涉及到一些敏感內(nèi)容,比如一些 IP 地址,用戶名以及密碼等,或者腳本中有一些關(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)行的話,一定要指定 -r 選項(xiàng)

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

72f8698a-fc4d-11eb-9bcf-12bb97331649.png

腳本對(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é)果如下

7322ba6e-fc4d-11eb-9bcf-12bb97331649.png

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

實(shí)例2

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

73405d44-fc4d-11eb-9bcf-12bb97331649.png

當(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用戶 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é)果如下

735acddc-fc4d-11eb-9bcf-12bb97331649.png

從上圖可以看出,腳本設(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é)果如下

7378843a-fc4d-11eb-9bcf-12bb97331649.png

從上圖可以看出,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)該依賴 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)上其他資料

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4379

    瀏覽量

    64805
  • RC4
    RC4
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    7319
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    398

    瀏覽量

    28448

原文標(biāo)題:如何隱藏 shell 腳本內(nèi)容

文章出處:【微信號(hào):gh_3980db2283cd,微信公眾號(hào):開(kāi)關(guān)電源芯片】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Shell腳本入門(mén)指南

    Shell塊包裹著系統(tǒng)核心的殼,處于操作系統(tǒng)的最外層,與用戶直接對(duì)話,把用戶的輸入, 解釋給操作系統(tǒng),然后處理操作系統(tǒng)的輸出結(jié)果,輸出到屏幕給與用戶看到結(jié)果。
    的頭像 發(fā)表于 06-03 10:47 ?516次閱讀
    <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>入門(mén)指南

    樹(shù)莓派新手必看!在樹(shù)莓派上編寫(xiě)和運(yùn)行 Shell 腳本!

    執(zhí)行的操作。Shell腳本只是個(gè)文本文件,包含系列按順序執(zhí)行的Shell(命令行)命令,就好像這些命令直接在命令行中輸入
    的頭像 發(fā)表于 03-25 09:28 ?439次閱讀
    樹(shù)莓派新手必看!在樹(shù)莓派上編寫(xiě)和運(yùn)行 <b class='flag-5'>Shell</b> <b class='flag-5'>腳本</b>!

    腳本美化高手之輕松實(shí)現(xiàn)文本顏色和背景定制的酷炫Shell技巧

    shell腳本中 echo 和 printf 都可以輸出內(nèi)容。示例1: echo -e "?33[43;35m david use echo say Hello World ?33[0m
    的頭像 發(fā)表于 12-06 10:38 ?714次閱讀
    <b class='flag-5'>腳本</b>美化高手之輕松實(shí)現(xiàn)文本顏色和背景定制的酷炫<b class='flag-5'>Shell</b>技巧

    Linux從零到精通:最簡(jiǎn)單的Shell腳本入門(mén)教程

    通過(guò)簡(jiǎn)單的命令和腳本,實(shí)現(xiàn)對(duì)系統(tǒng)的靈活控制和自動(dòng)化管理。 shell腳本前言 shell腳本入門(mén) she
    的頭像 發(fā)表于 12-05 09:56 ?1547次閱讀
    Linux從零到精通:最簡(jiǎn)單的<b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>入門(mén)教程

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫(xiě)之test命令

    myshell.sh腳本中加入如下內(nèi)容,將兩個(gè)變量值進(jìn)行比較:執(zhí)行結(jié)果:2、字符串比較參數(shù)舉例,在myshell.sh中添加如下內(nèi)容,進(jìn)行變量值比較:執(zhí)行結(jié)果如下:同時(shí)也可以對(duì)文件進(jìn)行比較。3、文件比較參數(shù)
    發(fā)表于 09-06 10:31

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫(xiě)之test命令

    myshell.sh腳本中加入如下內(nèi)容,將兩個(gè)變量值進(jìn)行比較:執(zhí)行結(jié)果:2、字符串比較參數(shù)舉例,在myshell.sh中添加如下內(nèi)容,進(jìn)行變量值比較:執(zhí)行結(jié)果如下:同時(shí)也可以對(duì)文件進(jìn)行比較。3、文件比較參數(shù)
    發(fā)表于 09-05 09:09

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫(xiě)之四則運(yùn)算

    以下幾點(diǎn)規(guī)則: ()表達(dá)式和運(yùn)算符之間要有空格,例如:2+3進(jìn)行運(yùn)算,必須寫(xiě)成expr 2 + 3; (二)完整的表達(dá)式要被反引號(hào) ` ` 包含; (三)乘號(hào)(*)前邊必須加反斜杠(\)進(jìn)行轉(zhuǎn)義。 舉例,在腳本中使用expr工具
    發(fā)表于 09-04 10:08

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫(xiě)之四則運(yùn)算

    以下幾點(diǎn)規(guī)則: ()表達(dá)式和運(yùn)算符之間要有空格,例如:2+3進(jìn)行運(yùn)算,必須寫(xiě)成expr 2 + 3; (二)完整的表達(dá)式要被反引號(hào) ` ` 包含; (三)乘號(hào)(*)前邊必須加反斜杠()進(jìn)行轉(zhuǎn)義。 舉例,在腳本中使用expr工具
    發(fā)表于 09-03 14:30

    shell腳本執(zhí)行的三種方式及區(qū)別

    在Linux系統(tǒng)中,Shell腳本種非常實(shí)用的工具,用于自動(dòng)化執(zhí)行系列命令。Shell
    的頭像 發(fā)表于 08-30 15:24 ?2202次閱讀

    執(zhí)行shell腳本的方式包括什么

    執(zhí)行Shell腳本的方式有很多種,以下是些常見(jiàn)的方法: 直接運(yùn)行腳本文件 在命令行中,可以直接使用腳本文件的路徑來(lái)運(yùn)行
    的頭像 發(fā)表于 08-30 15:17 ?754次閱讀

    shell具有的功能和特點(diǎn)

    Shell個(gè)命令行解釋器,用于與操作系統(tǒng)進(jìn)行交互。它提供了種方便的方式來(lái)執(zhí)行命令、管理文件和目錄、運(yùn)行程序等。以下是 Shell 的功能和特點(diǎn)的介紹: 命令執(zhí)行
    的頭像 發(fā)表于 08-30 14:48 ?1325次閱讀

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫(xiě)之本地腳本的編寫(xiě)和執(zhí)行

    ,或者/bin/bash myshell.sh:如果使用shell應(yīng)用進(jìn)行執(zhí)行,那么在腳本編寫(xiě)時(shí),可以不用在第行指定shell應(yīng)用程序;此外,使用
    發(fā)表于 08-29 10:51

    shell腳本編寫(xiě)之本地腳本的編寫(xiě)和執(zhí)行

    的使用可以參考下節(jié))將變量值輸出進(jìn)行查看,如下圖,可以看到?jīng)]有輸出var的值;然后再使用source或. 進(jìn)行腳本執(zhí)行,再次查看var變量的值,可以看到成功輸出235,該方式執(zhí)行腳本后的變量,沒(méi)有釋放,所以我們經(jīng)常使用sour
    發(fā)表于 08-28 09:36

    嵌入式學(xué)習(xí)-shell介紹

    輸出執(zhí)行結(jié)果呈現(xiàn)給用戶;同時(shí)Shell也是種解釋性的編程語(yǔ)言或者腳本語(yǔ)言,開(kāi)發(fā)容易可以在短時(shí)間內(nèi)完成功能強(qiáng)大又好用的腳本,可以在不同的系統(tǒng)上移植非常方便。二、
    發(fā)表于 08-16 09:13

    shell基本介紹及常用命令之shell介紹

    輸出執(zhí)行結(jié)果呈現(xiàn)給用戶;同時(shí)Shell也是種解釋性的編程語(yǔ)言或者腳本語(yǔ)言,開(kāi)發(fā)容易可以在短時(shí)間內(nèi)完成功能強(qiáng)大又好用的腳本,可以在不同的系統(tǒng)上移植非常方便。二、
    發(fā)表于 08-15 09:28