作者:少唇_200 | 来源:互联网 | 2017-06-26 11:48
文章标题:把一个shell程序编译成二进制可执行文件。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
或者是其他形式的可执行文件,只要无法查看程序内容就行.
但是,如果你仅仅是看不见内容就行了的话,不妨用
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的人有点帮助。