shell指令碼中嵌入二進位制檔案

2021-09-02 22:35:05 字數 1264 閱讀 7711

2023年02月28日 16:39:00 ssmile 閱讀數:3836 標籤: 指令碼

shell

linux

加密 解密

gcc

最近有人問我,乙個集群監控軟體的安裝檔案特別「詭異」,說指令碼裡有「亂碼」卻能執行,是怎麼回事?我看了才發現這個東西原來是典型的指令碼巢狀**的模式,這裡就講講吧。反正好久沒寫東西了。

某些比較「拽」的單位在發布linux軟體時以一種特殊的形式發布,即在shell指令碼中嵌入二進位制字元,從而使指令碼變得極其詭異,讓某些初學者感覺驚奇。其實,這個原理戳穿了非常簡單,就是在執行指令碼時將二進位制**匯出成乙個程式,再執行之就可以。(不過這種行為其實,是違反linux社群的精神的,像我這種人, 看到什麼軟體第一反應都是想搞到其原始碼

1 簡單嵌入程式

原理:通常程式**處在指令碼的最後位置。指令碼執行時,把它寫出來執行即可。

例:下面的這個原始碼:

#include

#include

int main(int argc, char** argv)

這段**可以用來輸出使用者名稱。當然這僅僅是個例子,實際程式設計時用shell就可以得到。現在假設我們想把這段**嵌入乙個名叫dofoo.sh的shell指令碼中。首先編譯之:

gcc -os foo.c -o foo

現在把foo追加到dofoo.sh的末尾:

cat foo >> dofoo.sh   # not > but >> !

開啟dofoo.sh,新增**:

1 #!/bin/sh

23    skip=11

4    prog="/tmp/$0.exe"

5    tail -n +$skip "$0" > $prog

6    chmod u+x $prog

7    $prog

8    rm $prog

9    exit

1011 ^?efl^b

...18 ....amic^@data_start^@__libc_csu_fini^@_sta

(11行以後用vi看都是亂碼)

看明白了吧!這**將指令碼中11行以後的東西匯入到了/tmp/dofoo.exe這個檔案中,新增x許可權,執行,然後刪除該檔案。

2 加密偽裝

有時候乙個shell中的亂碼並不一定是可執行檔案,那些東西可能是某種壓縮格式,如bz2,gz等等,或者其他的某種加密形式,程式會先把他們匯出來解壓在執行然後刪除,道理是一樣的。有時候,這種解壓程式或者解密程式本身就巢狀在shell指令碼裡,通常是商業公司幹的事。

shell 指令碼二進位制安裝mysql

以下指令碼的手動安裝連線 bin bash 指令碼安裝 mysql,上傳安裝包至 root cd root 安裝日誌 mysql log root mysql.log mysql 安裝包名 mysql package mysql 8.0.19 linux glibc2.12 x86 64.tar.x...

在shell指令碼中嵌入二進位制可執行程式

思路 將二進位制可執行程式新增到shell 末尾,執行shell 時,在將該二進位制可執行程式匯出來,然後執行匯出的二進位制程式。先準備shell 指令碼 root liumin 123 cat test.sh bin sh prog name test.exe rm f sed 1,end of ...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...