Perl 程序源码怎么加密
我见到很多人有一些需求。就是想给自己的程序加密。比如商业程序和一些记录着关键信息的程序。这样让自己的源代码不可读,但又不想对程序的性能靠成什么大的影响。
当然在 Perl 中也有一堆的方法来实现这个功能。因为我写的跳板程序直接给 Key 写到程序本身,所以我不希望别人能见到我的 SSH 的 Key 。所以我对整个程序进行一定程度上的加密是很有必要的。在 PHP 中有一个很出名的东西叫 Zend,给整个程序加密成不可见的,我们现在自己来实现一个简化的 Zend。在 Perl 中我们有各种好用的模块帮我们实现这种功能。我现在给大家来介绍一个使用 Filter 模块来实现的这个源代码加密功能。
想详细了解这种东西是怎么工作的,可以看我的一处有关 Perl 的过滤器的译文 perlfilter. 简单来讲,就是在 Perl 最开始 use 一个模块,然后以后的东西都是加密过的代码。这些代码会使用这个模块来解码,解码完了然后才会读到 Perl 的解析器中。
使用方法,我们要先在代码加密程序中来定制一个自己的加密字符。并给修改过的 Filter 的模块安装到解码的服务器上。
1. 我们先下载并解压 Filter 模块
wget http://www.cpan.org/authors/id/R/RU/RURBAN/Filter-1.49.tar.gz tar zxvf Filter-1.49.tar.gz cd Filter-1.49
这时我们进入了这个模块。这个包中有一些文件,是我们要用到的。我们先修改和定制加密的字符。
2. 定制加密的字符
对于定制这个地方,需要修改二个文件,一个解密的 C 文件( decrypt/decrypt.xs ),一个是加密的程序。之所以要修改解密的 C 程序是因为解密的时候会调用这个 C 编译以后的 so 文件来解码。所以这也要求,对方的机器上的 Filter::decrypt 中引用的 so 是我们修改过以后。不用担心。因为是 so 文件,所以你定制的 key 别人并不知道,所以这样安全. 我们先打开这个文件。修改下面红线的部分.
3. 加密我们自己的程序
在 decrypt 目录下有个 encrypt 的文件,我们也照样,打开并修改这个文件第 12 行也和上面的一样
修改完以后,对我们真实的程序,使用这个来加密。注意这个会删除原文件,你要保留好。比如我们原来的程序叫 test.pl.
#perl decrypt/encrypt test.pl
这时生成的新文件,还是 test.pl 不过你打开看时都会是象下面这样。但是还是能正常的执行。
4. 在目标主机上安装上面定制过 decrypt.xs 的 Filter 的模块
标准的模块安装方式,记得要替换 descypt.xs 的你上面的加密程序相配。不然不能执行。替换 so 的文件也行。
在目标主机上
perl Makefile && make && make install
好了,这时给你上面加密过的 test.pl 复制过来,在这台机器上就能执行了。因为其它人并不知道你的加密字符(so 文件是编译后的)所以相对安全。注意保管好你的 Key 不要让其它人知道。
FQA: 自己加密的程序,没有原来的文件了,只有加密后的,怎么通过 key 来还原.下面提供一个反解程序
#!/usr/bin/perl require5.002; usevars qw ( $XOR $BLOCKSIZE $HEADERSIZE $CRYPT_MAGIC_1 $CRYPT_MAGIC_2 $size $mode $line ); $XOR = '你定制的 key'; $BLOCKSIZE = length$XOR; $HEADERSIZE = 2; $CRYPT_MAGIC_1= 0xff; $CRYPT_MAGIC_2= 0x00; foreach$file(@ARGV) { open(F, "<$file") or die"Cannot open $file: $!\n"; open(O, ">${file}.ne") or die"Cannot open ${file}.ne: $!\n"; seek(F,0,0); $line= <F>; $block= ''; read(F, $block, 24); while($size= read(F, $block, $BLOCKSIZE) ) { printO ($block^ substr($XOR, 0, length$block)) ; } closeF; closeO; }
如果你想做自己的解码和加密过滤器,请看这个文章:一次用C语言写source filter的成功尝试
建议继续学习:
- 网址加密(URL加密)(RC4、PHP、密钥长度可变) (阅读:6885)
- 在浏览器中加密Cookie (阅读:4533)
- 代理的加密部分 (阅读:4492)
- 使用bcompiler对PHP文件进行加密 (阅读:4316)
- 使用系统命令实现文件的压缩与加密 (阅读:4002)
- 公钥私钥加密解密数字证书数字签名详解 (阅读:3978)
- 可逆的加密方法(Mcrypt Encryption Functions) (阅读:3676)
- 加密你的shell (阅读:3583)
- 如何“加密”你的email地址 (阅读:3134)
- 具有时效性的PHP字符串加密解密函数 (阅读:3088)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:扶 凯 来源: 扶凯
- 标签: 加密
- 发布时间:2013-05-28 22:20:58
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成