前言
一直以來(lái),寫(xiě)了一些基于Perl的實(shí)用腳本,但是會(huì)傳播擴(kuò)散,這樣子后期如果被隨意篡改或者售賣造成一些糾紛,于是需要對(duì)一些Perl程序源代碼進(jìn)行編譯和加密的處理。
解決方法
現(xiàn)在常用的方法有三個(gè):使用Perl自帶的perlcc工具、perl2exe、PAR(Perl Archive Toolkit);
安裝上面的這些模塊,我一般使用cpanm進(jìn)行安裝,這是因?yàn)?code>cpanm是安裝Perl module的最方便的方法。自動(dòng)下載安裝依賴包。使用CPAN shell或下載源碼包安裝模塊,遇到大量依賴關(guān)系,非常頭痛。
安裝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只能作用于一個(gè)perl文件,但是如果程序中有perl包,就會(huì)出現(xiàn)點(diǎn)問(wèn)題,解決辦法是把所有的源代碼copy到一個(gè)文件,取消所有的package定義,把原來(lái)不同package下面同名的函數(shù)改名,不同的package里面的同名全局變量也要改名。然后
perlcc -o hello hello.pl
Perlcc的原理是把perl程序轉(zhuǎn)換成C程序,然后用GNU C編譯器編譯。但是perl在5.10.0版本后移除perlcc。還有就是perlcc命令可能對(duì)perl代碼編譯不成功,或成功后不能正常運(yùn)行(實(shí)測(cè))。
perl2exe
perl2exe,據(jù)說(shuō)很好用,但令人沮喪的是要license, 而且據(jù)說(shuō)跨平臺(tái)還有問(wèn)題。
我沒(méi)有試過(guò),這里標(biāo)記一下先。
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