信息来源:neeao's blog

writer: demonalex[at]hackermail[dot]com

前言:写本文的主旨是为了演示如何编译一个perl程序。

流程
安装解释器/编译器-》测试源码可行性-》制作图标-》编译程序-》加壳

所需工具
Perl解释器: http://demonalex.3322.org/download/development/ActivePerl-5.8.7.815-MSWin32-x86-211909.msi
PDK开发包: http://demonalex.3322.org/download/development/PDK-Pro-6.0.2.203380.rar
ICON图标编辑器: http://demonalex.3322.org/download/development/pic2icon.rar
北斗加壳工具: http://demonalex.3322.org/download/development/Nspack3.7.rar

测试时使用的工具
PEID壳查看工具: http://demonalex.3322.org/download/development/peid.rar

安装PERL解释、编译器
注意次序,首先安装ActivePerl-5.8.7.815,然后在安装PDK开发包。为什么ActivePerl我要选择这个版本呢?
因为我从官网上下载了最新的解释器后发现PPM的使用方法与原来的不相同,因此推崇使用原来的版本。安装完
成后:
C:/>path
PATH=C:/Program Files/ActiveState Perl Dev Kit 6.0/bin/;C:/Perl/bin/;C:/WINNT/sy
stem32;C:/WINNT;C:/WINNT/System32/Wbem;C:/Program Files/SecureCRT/;C:/Program Fi
les/Support Tools/;e:/usr/bin;e:/Program Files/NetIQ/Chariot
注意到path输出内容的下划线部分。第一条是PDK的路径,第二条是PERL解释器的路径。

测试源码的可行性
测试可行性这个步骤主要是为了确定程序有没有什么错误与保证该程序所使用的包都已经‘凑齐’。首先在源
码的标识‘#!/bin/perl’后加入参数‘-w’确认程序没有语法上的错误。接下来是确认我们要编译的程序所需
的包是不是都‘凑齐’了,用perlapp编译一次,看看错误就知道了:
------------------------------------
C:/>perlapp -f gzpia_special.pl
PerlApp 6.0.2 build 203380
Copyright (C) 1998-2005 ActiveState Corp. All rights reserved.
ActiveState is a division of Sophos Plc.
Commercial license for Name 〈demonalex@hackermail.com〉

Can't locate DBI.pm in @INC (@INC contains: C:/Program Files/ActiveState Perl De
v Kit 6.0/lib/ C:/Perl/lib C:/Perl/site/lib . C:/Perl/lib C:/Perl/site/lib .) at
gzpia_special.pl line 3.
BEGIN failed--compilation aborted at gzpia_special.pl line 3.
'gzpia_special.pl' had compilation errors.
------------------------------------
提示少了DBI这个库。在cmd下输入ppm进入ppm command模式,输入‘install DBI’,安装完成后再编译一次:
++++++++++++++++++++++++++++++++++++
C:/>perlapp -f gzpia_special.pl
PerlApp 6.0.2 build 203380
Copyright (C) 1998-2005 ActiveState Corp. All rights reserved.
ActiveState is a division of Sophos Plc.
Commercial license for Name 〈demonalex@hackermail.com〉

MLDBM.pm:
error: Can't locate MLDBM.pm
refby: C:/Perl/site/lib/DBD/DBM.pm line 323
SQL/Statement.pm:
error: Can't locate SQL/Statement.pm
refby: C:/Perl/site/lib/DBI/SQL/Nano.pm line 27

Created 'gzpia_special.exe'
++++++++++++++++++++++++++++++++++++
提示少了MLDBM与SQL-Statement这两个包,重新进入ppm command模式,相继输入‘install MLDBM’与‘insta
ll SQL-Statement’,‘exit’退出ppm command,重新编译一次:
************************************
C:/>perlapp -f gzpia_special.pl
PerlApp 6.0.2 build 203380
Copyright (C) 1998-2005 ActiveState Corp. All rights reserved.
ActiveState is a division of Sophos Plc.
Commercial license for Name 〈demonalex@hackermail.com〉

Created 'gzpia_special.exe'
************************************
确认源码没问题,而且所有包都‘到齐’了,把gzpia_special.exe删到吧,因为现在的EXE文件的图标还没弄
好,嘿嘿。

生成图标
打开ICON图标编辑器--Pic2Icon绿色破解版:

点击“载入图标”按钮,在弹出的文件选择对话框中找到你要使用的图片...

将图片的长宽度设置为32,“确定”...

选定“是”回到Pic2Icon主界面,点击“保存图标”...

在“另存为”对话框中选定保存ICON文件的路径,“保存”,退出Pic2Icon程序,图标生成过程完成。

编译程序
重新编译一次,不过需要添加“--icon ICON文件路径”:
------------------------------------
C:/>perlapp -f --icon C:/编译PERL/gzpia.ico gzpia_special.pl
PerlApp 6.0.2 build 203380
Copyright (C) 1998-2005 ActiveState Corp. All rights reserved.
ActiveState is a division of Sophos Plc.
Commercial license for Name 〈demonalex@hackermail.com〉

Created 'gzpia_special.exe'
------------------------------------

加壳
之所以选择使用北斗壳的原因是因为它操作起来比较方便:),打开PEID看看我们现在编译的程序:

嘿嘿,显示是VC6.0编译的程序哦:P。打开北斗加壳程序:

点击主界面右下角的“打开”按钮,在弹出的文件选择对话框中选定我们在上面操作中编译好的EXE程序,然后
点击“打开”按钮...回到北斗主界面,点击左下角的“压缩”按钮...

嘿嘿,搞定了,退出北斗加壳程序,现在再用PEID来看看: