飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3132|回复: 5

[分享] 【SDK完全接触----之EXECryptor篇】

[复制链接]

该用户从未签到

发表于 2008-10-26 10:04:42 | 显示全部楼层 |阅读模式
转自:http://www.unpack.cn/viewthread.php?tid=29551
作者:xingyuwanwan


....前言....
可能你发现,Unpack甚至网上,关于sdk的用法,是很少的,甚至没有,你可能遗憾的,这样一个壳的天下,竟然没有sdk教程可学习,缺少sdk,壳的强壮要大大降低.
我想可能有几个原因,
1,高手不屑写,或不愿写,
2.菜鸟不会.
我亦菜鸟,所以菜鸟一起飞.近期打算写个系列教程分享给大家.
--------------------------------------------------------------------
EXECryptor是一个不错的壳,我原来很喜欢使用,不过后来它的注册框出现了那个可以直接关闭的BUG,所以现在使用它的时候,我都是用SDK来实现注册框.
EXECryptor的帮助,条理还是很清晰的,比Asprtoect的要好理解,不过,不知什么原因,对于注册信息的存储和读取,帮助中竟然没有提,无耐之中,我看见了SecureRead和SecureWrite,测试N次后才发现原来是这样用法.只能说,好好另类.本以为它是读写文件来.
我将用一个完整的源码例子来教会你如何使用它的SDK:
好,马上开始.
1.工程
program Project1;

uses
  Forms,EXECryptor,SysUtils, //uses相关单元.
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
var
Name,Key:string; //用来暂存获取的用户名和KEY.

RegInfo:TSerialNumberInfo; //EXECryptor定义的一个结构,可以详细获取KEY的类型,到期日期等.
begin
  Application.Initialize;

  SecureRead('RegistrationName',Name);  //读取当前系统中的注册信息--用户名.  

  SecureRead('SerialNumber',Key); //读取当前系统中的注册信息--KEY.  
  VerifySerialNumberEx(name,key,RegInfo,IntToStr(GetHardwareID));
  //和机器码一同进行验证.结果存放于RegInfo结构中.同时该函数返回一个TVerifyResult值.
  //下面的crypt_reg或crypt_unreg可以根据TVerifyResult来判断程序的运行状态.

  {$I crypt_reg.inc} //crypt_reg和crypt_end之间的代码,仅仅在程序注册后才能解码并运行.
  Application.CreateForm(TForm1, Form1); //如果是注册的,则创建主窗体.
  {$I crypt_end.inc}
  
  {$I crypt_unreg.inc} //这个标志内的代码仅仅在未注册状态运行,如果程序已注册,则会跳过.
  Form2:=Tform2.Create(Application); //未注册时,创建注册窗体.
  Form2.ShowModal; //显示注册窗体.
  {$I crypt_end.inc} //标志结束.
  Application.Run;
end.


2.注册窗体
unit Unit2;

inte**ce

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation
uses EXECryptor; //uses
{$R *.dfm}

procedure TForm2.BitBtn2Click(Sender: TObject);
begin
close;
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
var RegInfo:TSerialNumberInfo; //定义结构体.
begin
if VerifySerialNumberEx(edit2.Text,edit3.Text,RegInfo,IntToStr(GetHardwareID))=vrOK then
//用户名,KEY及硬件码三者进行验证是否合法,如果合法,返回vrok.即上面说的TVerifyResult.
   begin
   {$I crypt_reg.inc} //仅在注册状态下运行代码.如果上面返回vrOK,那么这时程序是已注册.代码运行.
   SafeMessageBox(0,'注册成功!感谢支持!','提示',0);
   //SafeMessageBox用法和MessageBoxA一样用,EXECryptor说这个函数好处在于可以避免被调试器下断点.
   SecureWrite('RegistrationName',edit2.Text); //保存用户名
   SecureWrite('SerialNumber',edit3.Text); //保存KEY.
   {$I crypt_end.inc} //结束标志.
   end
else //如果注册信息不合法.
   begin
   SafeMessageBox(0,'注册码错误!!','提示',0);
   end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
edit1.Text:=IntToStr(GetHardwareID); //取机器码的函数.返回值Dword型.
end;

end.


3.主窗体
unit Unit1;

inte**ce

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    BitBtn1: TBitBtn;
    Label2: TLabel;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses EXECryptor;
{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCreate(Sender: TObject); //窗体载入时.
begin
if (IsAppProtected) then //IsAppProtected壳验证,如果程序已经被加壳保护.
   begin
   label1.Caption:='程序已经注册!';
   label2.Caption:='当你看到这个界面,说明本程序已经注册!';
   end
else //否则程序未加壳.或者已经被人脱壳.此时你也可以干一些不好的事情,比如用一阵大洪水,毁灭硬碟上的所有生命.
   begin
   label1.Caption:='未加壳!';
   label2.Caption:='';
   end
end;

end.

4.另外,EXECryptor还有个代码保护标记,使用是简单的:
{$I crypt_start.inc}
  if Registered then
    SaveFile(FileName);
{$I crypt_end.inc}

标记之间的代码将会被变形保护.标记之间,禁止使用try/finally/except.你也不要再丢些crypt_reg之类的在里面,我测试是不允许的.
5.加壳啦.唯一注意的选择你看下面的图.

1.GIF

同样如果你发现文章有什么错误,请指教,不要笑我.

source.rar

7.04 KB, 下载次数: 9, 下载积分: 飘云币 -2 枚

PYG19周年生日快乐!

该用户从未签到

发表于 2008-10-27 13:27:35 | 显示全部楼层
对SDK完全不懂,不过还是要支持楼主的作品
PYG19周年生日快乐!

该用户从未签到

发表于 2008-10-27 13:32:13 | 显示全部楼层
不懂DELPHI  是不是应该拿VC来讲/:002 /:001
PYG19周年生日快乐!

该用户从未签到

发表于 2009-2-16 09:10:16 | 显示全部楼层
还是要支持楼主的作品
PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2020-6-16 23:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-3-2 09:34:24 | 显示全部楼层
    多谢了,研究研究
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-4-23 17:38:21 | 显示全部楼层
    多谢楼主分享
    收下了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表