或者是其他形式的可執行檔案,只要無法檢視程式內容就行.
但是,如果你僅僅是看不見內容就行了的話,不妨用
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到檔案的字...