把乙個shell程式編譯成二進位制可執行檔案

2021-06-16 08:02:24 字數 1047 閱讀 9628

或者是其他形式的可執行檔案,只要無法檢視程式內容就行.

但是,如果你僅僅是看不見內容就行了的話,不妨用

gzexe a.sh

原來的 a.sh 就被存為 a.sh~,新的 a.sh 是亂碼,但是可以用 sh 的方式執行。

一、 如果在 c 程式用 system() 來執行,就一點意義都沒有了,

因為 system 就是就是又開了乙個shell程序,然後其內容也是shell -c "" 中的引數。你可以在命令列中測試:

system("ls -l") 就相當於

sh -c 'ls -l'

這應該能夠解釋為什麼在c中會暴露所有原始碼的問題。

二、如果是用shell,就一定不可能存在保險的加密方法!

因為shell是一種解釋性的語言,它必須能被讀,被逐行被直譯器讀入,所以不管用了何種方式,最後都逃不掉必須還原為明文,明文還能被讀這一過程,這就決定了shell原始碼不可能有有效加密方式的宿命。

比如有做同樣一件事的兩個程式

---x--x--x 1 jingyi stud 806 jan 14 03:02 a.out

---x--x--x 1 jingyi stud 94 dec 20 15:49 a.sh

a.out 為 c 的編譯產物,而 a.sh 是 shell 程式。 它們都有執行位,但是 a.out 能被執行,但是 a.sh 則不行!原因就是 a.sh 缺了 -r 位。

三、在不能保證安全的情況下,敏感口令還是不要出現在shell程式中為好。很多程式為了安全,不但不出現在程式中,還不准出現在命令列中,特意做成互動式的。因為在命令列中,通過 history 或其它類似手段重現歷史命令,非常不安全。

四、如果只是出於防範不太高手的內部使用者,執行

gzexec a.sh

後,a.sh 中原始碼會看不見了。原來的檔案被更名為 a.sh~ ,並且不需要了,你可以刪除或存在其它地方。

這只是個變通的方式(只能稱之為變通,不能稱這為加密,因為學過一點shell程式設計的人就能很輕鬆地還原它),也許對不太 geek 的使用者群中可以湊合用用。

希望以上解釋對你和眾多想加密shell的人有點幫助。

編譯器怎麼把多個原始檔編譯成乙個程式

預處理 修改 用 include指令新增相關的標頭檔案,編譯器可能還需要根據實際情況跳過程式中的某些 或補充一些 可以用 define和 ifdef來實現。編譯 轉換成彙編 計算機只能理解更低層的機器 指令。而生成機器 的第一步就是把c語言源 轉化為組合語言 彙編 生成目標 編譯器把這些彙編 都是些...

關於C語言多個原始檔編譯成乙個程式

第一次用csdn的部落格,慕名而來,決定好好經營下自己的技術部落格。今天看 c和指標 中第二章程式設計訓練的第一題,就是關於c語言多個原始檔編譯成乙個程式的問題。之前自己一直都不太搞得懂這個,不過之前寫的程式都是簡單的,乙個原始檔就能搞定的那種,所以也一直懶了沒有去學怎麼,心裡隱隱的對學習心的東西感...

將多個原始檔編譯成乙個ko

有三個檔案,分別是proc rw.c test.c和test.h,現在把這三個檔案編譯成proc.ko 1 proc rw.c include include include include copy to from user include test.h 在str中儲存使用者態write到檔案的字...