或者是其他形式的可執行文件,只要無法查看程序內容就行. 但是,如果你僅僅是看不見內容就行了的話,不妨用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.sha.out 為 C 的編譯產物,而 a.sh 是 shell 程序。 它們都有執行位,但是 a.out 能被執行,但是 a.sh 則不行!原因就是 a.sh 缺了 -r 位。三、在不能保證安全的情況下,敏感口令還是不要出現在shell程序中為好。很多程序為了安全,不但不出現在程序中,還不准出現在命令行中,特意做成交互式的。因為在命令行中,通過 history 或其它類似手段重現歷史命令,非常不安全。四、如果只是出於防范不太高手的內部用戶,執行gzexec a.sh後,a.sh 中源碼會看不見了。原來的文件被更名為 a.sh~ ,並且不需要了,你可以刪除或存在其它地方。這只是個變通的方式(只能稱之為變通,不能稱這為加密,因為學過一點shell編程的人就能很輕松地還原它),也許對不太 geek 的用戶群中可以湊合用用。希望以上解釋對你和眾多想加密shell的人有點幫助。