精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文剖析隱藏shell腳本內容的工具shc

開關電源芯片 ? 來源:Linux開發那些事兒 ? 作者:LinuxThings ? 2021-08-14 10:44 ? 次閱讀

從事 Linux 開發的同學,經常需要編寫 shell 腳本,有時腳本中會涉及到一些敏感內容,比如一些 IP 地址,用戶名以及密碼等,或者腳本中有一些關鍵的代碼, 所有這些內容你都不想別人閱讀或者修改,更進一步,你希望對腳本設置過期時間,超過指定時間時間之后,腳本就無法使用

在不改變腳本內容、功能以及執行方式的情況下,有沒有辦法實現上面的需求呢?

答案是:有的, 在Linux下,我們可以使用 shc 這個工具來實現隱藏shell腳本內容以及設置過期時間的目的

簡介

shc 是一個通用shell腳本編譯器,它將 shell 腳本編譯 可執行的二進制文件,它的功能以及執行方式和原始腳本沒有區別

和 gcc 編譯器不同的是,shc 并沒有把腳本源代碼轉化成機器碼,它只是生成了一份 C 語言代碼,這份 C 語言代碼中包含了加密的原始shell腳本,并為它添加了過期功能,然后,通過gcc編譯器將C代碼編譯成可執行的二進制文件

安裝

目前,大多數的 Linux 發行版的倉庫中都已經包含了 shc, 只需要使用默認的包管理器就可以安裝,具體的安裝命令如下:

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

常用選項

下面是 shc 常用的一些選項以及選項的描述

選項描述

-f待編譯的shell腳本文件

-o指定編譯生成的二進制文件

-e設置過期時間,格式 日/月/年

-m過期之后,執行腳本時的提示信息

-v輸出編譯shell腳本的過程

-r編譯生成可再發行的二進制

編譯腳本

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

新建 func.sh 腳本,往其中添加如下內容:

#!/bin/bash

#是否是有效的密碼

valid_passwd()

{

if [ “$1” == “123” ]; then

echo 1

else

echo 0

fi

}

#獲取最大數量

max_num()

{

echo 100

}

#登錄到遠程機器

login()

{

sshpass -p ‘123456’ ssh test@192.168.70.20

}

#版本號

ver()

{

echo “1.0”

}

if [ $# -ne 0 ]; then

name=“$1”

shift 1

${name} “$@”

fi

執行下面的命令,編譯 func.sh 腳本

shc -rf func.sh -o func.bin

編譯完之后,當前目錄下會出現三個文件

[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語言代碼, func.bin 是生成可執行的二進制文件,它的使用方法和原始腳本是一樣的

注意: 編譯出來的二進制文件func.bin,如果想讓它在其他機器也能運行的話,一定要指定 -r 選項

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

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

腳本對外提供 valid_passwd、 max_num、 login、 ver 這四個接口,腳本中已經注明了每個接口的作用,使用方法是 。/func.bin 接口名 接口參數列表,下面的兩個實例說明了如何使用腳本

實例1

分別執行 。/func.bin ver 和 。/func.sh ver 命令,結果如下

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

從上圖可以看出,無論是用腳本還是二進制,最終的結果都是一樣的

實例2

執行 。/func.bin login 命令,結果如下

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

當傳入 login 參數時,就會執行func.sh腳本中的 login 函數,該函數的作用是使用 SSH 登錄到遠程機器, 函數體中的 sshpass 是一個自動填充SSH登錄密碼的工具

從結果可以知道,執行 。/func.bin login 命令之后,就登錄到 ip 為 192.168.70.20 機器的 /home/test 目錄,后面再輸入 exit 從遠程機器退回到當前機器的目錄

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

設置過期時間

shc 除了將把腳本編譯成二進制,還能為二進制設置過期時間,下面還是以 func.sh 腳本為例來說明

執行 shc -e 25/6/2021 -m “The script is expired, Please contact test@qq.com” -rf func.sh -o func.bin 命令把腳本的過期時間設置為 2021年6月25日,執行過期后的腳本提示語設置為 “The script is expired, Please contact test@qq.com”

然后,執行 。/func.bin ver 命令進行測試,結果如下

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

從上圖可以看出,腳本設置過期時間之后,再次執行腳本會提示已經過期了

如何引用二進制腳本

func.sh 編譯成了二進制后,其他腳本引用它的方式也要調整下,原來以 source 。/func.sh 的使用方式都需要修改,因為 fun.sh 已經由原來的 ASICII 文件變成了 二進制文件了,下面給出一個shell腳本引用二進制腳本 func.bin 的實例

新建 test_func.sh 腳本,腳本內容如下:

#!/bin/bash

#調用 valid_passwd 函數

ret=$(。/func.bin valid_passwd 123)

if [ $ret -eq 1 ]; then

echo “passwd ok”

fi

#調用 valid_passwd 函數

ret=$(。/func.bin valid_passwd 124)

if [ $ret -eq 1 ]; then

echo “passwd ok”

else

echo “passwd fail”

fi

#調用 max_num 函數

ret=$(。/func.bin max_num)

echo “max_num:”$ret

#調用 ver 函數

ret=$(。/func.bin ver)

echo “version:”$ret

執行 。/test_func.sh 命令,結果如下

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

從上圖可以看出,test_func.sh 腳本分別調用了二進制文件 fun.bin 中的 valid_passwd、max_num、 ver 函數,根據 func.sh 腳本內容,可以確定結果輸出都是正確的

從這個實例可以得出,普通腳本也可以正常使用二進制的腳本

安全性

shc 使用的加密類型是叫做 RC4流密碼的一個變體,目前它已經被證實存在弱點,存在被破解的可能, 尤其在 shc 中,密鑰被攜帶到加密腳本本身中,所以,是存在 通過反匯編破解出密鑰,進而通過密鑰還原原始腳本的可能性

因此,我們不應該依賴 shc 加密的安全性,而是更多的把它當作是shell腳本內容的隱藏或者混淆工具

小結

本文主要介紹了隱藏shell腳本內容的工具 shc, 雖然它加密的安全性不高,但是我們平常可以把它作為一個shell腳本代碼隱藏和混淆工具來使用,也能達到我們的目的, 更多關于 shc 的相關知識請參考網上其他資料

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4308

    瀏覽量

    62445
  • RC4
    RC4
    +關注

    關注

    0

    文章

    4

    瀏覽量

    7229
  • 腳本
    +關注

    關注

    1

    文章

    387

    瀏覽量

    14834

原文標題:如何隱藏 shell 腳本內容

文章出處:【微信號:gh_3980db2283cd,微信公眾號:開關電源芯片】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之test命令

    myshell.sh腳本中加入如下內容,將兩個變量值進行比較:執行結果:2、字符串比較參數舉例,在myshell.sh中添加如下內容,進行變量值比較:執行結果如下:同時也可以對文件進行比較。3、文件比較參數
    發表于 09-06 10:31

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

    myshell.sh腳本中加入如下內容,將兩個變量值進行比較:執行結果:2、字符串比較參數舉例,在myshell.sh中添加如下內容,進行變量值比較:執行結果如下:同時也可以對文件進行比較。3、文件比較參數
    發表于 09-05 09:09

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之四則運算

    以下幾點規則: ()表達式和運算符之間要有空格,例如:2+3進行運算,必須寫成expr 2 + 3; (二)完整的表達式要被反引號 ` ` 包含; (三)乘號(*)前邊必須加反斜杠(\)進行轉義。 舉例,在腳本中使用expr工具
    發表于 09-04 10:08

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之四則運算

    以下幾點規則: ()表達式和運算符之間要有空格,例如:2+3進行運算,必須寫成expr 2 + 3; (二)完整的表達式要被反引號 ` ` 包含; (三)乘號(*)前邊必須加反斜杠()進行轉義。 舉例,在腳本中使用expr工具
    發表于 09-03 14:30

    shell腳本執行的三種方式及區別

    在Linux系統中,Shell腳本種非常實用的工具,用于自動化執行系列命令。Shell
    的頭像 發表于 08-30 15:24 ?798次閱讀

    執行shell腳本的方式包括什么

    執行Shell腳本的方式有很多種,以下是些常見的方法: 直接運行腳本文件 在命令行中,可以直接使用腳本文件的路徑來運行
    的頭像 發表于 08-30 15:17 ?274次閱讀

    shell具有的功能和特點

    Shell個命令行解釋器,用于與操作系統進行交互。它提供了種方便的方式來執行命令、管理文件和目錄、運行程序等。以下是 Shell 的功能和特點的介紹: 命令執行
    的頭像 發表于 08-30 14:48 ?397次閱讀

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之本地腳本的編寫和執行

    ,或者/bin/bash myshell.sh:如果使用shell應用進行執行,那么在腳本編寫時,可以不用在第行指定shell應用程序;此外,使用
    發表于 08-29 10:51

    shell腳本編寫之本地腳本的編寫和執行

    的使用可以參考下節)將變量值輸出進行查看,如下圖,可以看到沒有輸出var的值;然后再使用source或. 進行腳本執行,再次查看var變量的值,可以看到成功輸出235,該方式執行腳本后的變量,沒有釋放,所以我們經常使用sour
    發表于 08-28 09:36

    嵌入式學習-shell介紹

    輸出執行結果呈現給用戶;同時Shell也是種解釋性的編程語言或者腳本語言,開發容易可以在短時間內完成功能強大又好用的腳本,可以在不同的系統上移植非常方便。二、
    發表于 08-16 09:13

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

    輸出執行結果呈現給用戶;同時Shell也是種解釋性的編程語言或者腳本語言,開發容易可以在短時間內完成功能強大又好用的腳本,可以在不同的系統上移植非常方便。二、
    發表于 08-15 09:28

    shell腳本調試技巧

    ]scripts.sh-n不會執行該腳本,僅查詢腳本語法是否有問題,并給出錯誤提示。-v在執行腳本時,先將腳本內容輸 出到屏幕上然后執行
    發表于 12-28 16:57

    Shell腳本檢查工具ShellCheck介紹

    ShellCheck是個用于bash/sh shell腳本的靜態分析工具,可以輔助檢查腳本語法錯誤,給出建議增強
    的頭像 發表于 12-27 13:43 ?2020次閱讀
    <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>檢查<b class='flag-5'>工具</b>ShellCheck介紹

    100個Linux Shell腳本總結

    不知道大家有沒有發現,會編寫shell腳本的運維,工資不會低,并且他的工作會很輕松!今天浩道跟大家分享每個Linux運維應知必會的100個shell
    的頭像 發表于 12-05 09:28 ?1214次閱讀

    腳本調試工具有哪些?腳本調試工具怎么用?

    腳本調試是軟件開發過程中非常重要的環,它能幫助開發者快速定位并解決代碼中的錯誤。大多數編程語言都提供了各種各樣的腳本調試工具,本文將介紹
    的頭像 發表于 12-01 14:40 ?829次閱讀