前言
一直以来,写了一些基于Perl的实用脚本,但是会传播扩散,这样子后期如果被随意篡改或者售卖造成一些纠纷,于是需要对一些Perl程序源代码进行编译和加密的处理。
解决方法
现在常用的方法有三个:使用Perl自带的perlcc工具、perl2exe、PAR(Perl Archive Toolkit);
安装上面的这些模块,我一般使用cpanm
进行安装,这是因为cpanm
是安装Perl module
的最方便的方法。自动下载安装依赖包。使用CPAN shell
或下载源码包安装模块,遇到大量依赖关系,非常头痛。
安装cpanm
mkdir -p ~/perl5
wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.bashrc
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.bashrc
echo 'cpanmL="cpanm -v --notest -l ~/perl5"' >> ~/.bashrc
perlcc工具
安装perlcc
:
cpanmL B::C
perlcc只能作用于一个perl文件,但是如果程序中有perl包,就会出现点问题,解决办法是把所有的源代码copy到一个文件,取消所有的package定义,把原来不同package下面同名的函数改名,不同的package里面的同名全局变量也要改名。然后
perlcc -o hello hello.pl
Perlcc
的原理是把perl
程序转换成C程序,然后用GNU C
编译器编译。但是perl
在5.10.0
版本后移除perlcc
。还有就是perlcc
命令可能对perl
代码编译不成功,或成功后不能正常运行(实测)。
perl2exe
perl2exe,据说很好用,但令人沮丧的是要license, 而且据说跨平台还有问题。
我没有试过,这里标记一下先。
PAR
安装pp和PAR
pp 模块用于perl程序源代码的编译和打包:https://metacpan.org/pod/pp
PAR 模块用于perl程序源代码的编译和打包:https://metacpan.org/pod/PAR
cpanmL pp
cpanmL PAR
cpanmL PAR::Filter::Crypto
编译和加密
echo 'ppS=pp -f Crypto -F Crypto -M Filter::Crypto::Decrypt' >> ~/.bashrc
ppS -o hello hello.pl
—— dulunar 后记于 2019.12