网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 山东在线 >> 信息中心 >> 网络学院 >> linux发烧友 >> 正文
  把一个shell程序编译成二进制可执行文件           
把一个shell程序编译成二进制可执行文件
作者:linux专家 文章来源:山东在线更新时间:2007-6-30 0:42:58

   
  或者是其他形式的可执行文件,只要无法查看程序内容就行.

但是,如果你仅仅是看不见内容就行了的话,不妨用

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的人有点帮助。

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    山东在线 Copyright@2006-2007 鲁ICP备07018514号 中国网通集团公司山东省分公司:日照信息港