Nisy 发表于 2008-10-26 09:58:05

【SDK完全接触----之Obsidium篇】

转自:http://www.unpack.cn/viewthread.php?tid=29563
作者:xingyuwanwan


....前言....
可能你发现,Unpack甚至网上,关于sdk的用法,是很少的,甚至没有,你可能遗憾的,这样一个壳的天下,竟然没有sdk教程可学习,缺少sdk,壳的强壮要大大降低.
我想可能有几个原因,
1,高手不屑写,或不愿写,
2.菜鸟不会.
我亦菜鸟,所以菜鸟一起飞.近期打算写个系列分享给大家.
系列结束了,如果看了三个,你还不会照瓢画,还不会用其他壳的SDK,那是不好的.对不?
仅以此系列,弥补UnPack无sdk教程,因特网无sdk教程,的空白,让人们无遗憾的.
--------------------------------------------------------------------
Obsidium这个壳,破解版是很少的,以前高手说过它很强度还不错,不知现在如何.
如果你要用它设计一个注册壳,你会发现让它显示机器码是不容易做,所以研究其SDK的使用,是要的.
演示用的Obsidium是1.3.0.4,如果你用高的版本,注意SetShortKey函数是不相同的,高的版本中是
SetLincenseShort.
我发现用源码来说明一件事情,远远比只是说要好的多.
依然来看源码,常用的SDK都包括在其中,你将很快能学会的:
这次,是不是已经注册的验证代码是在主窗体的FormCreate中.

主程序:

unit Unit1;
inteface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses unit2,Obsidium; //注意USES.
procedure TForm1.FormCreate(Sender: TObject); //在主窗体创建时检查是否注册.
begin
{$I pattern_vm_start.inc} //虚拟代码标志开始,其间的代码将被虚拟机化,以更强壮的保护它.
if not(isRegistered) then //检测是否注册.如果没有.(如果是注册的,isRegistered返回真)
   begin
   Form2:=Tform2.Create(application); //创建注册窗体.
   Form2.ShowModal; //并显示.
   end;
{$I pattern_vm_end.inc} //虚拟代码标志结束
{$I pattern_reg_Start.inc} //pattern_reg其间的代码只有在程序注册后才运行.
label1.Caption:='这个程序是已经注册!';
{$I pattern_reg_End.inc}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
end.


注册窗体:

unit Unit2;
inteface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label3: TLabel;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Obsidium;
procedure TForm2.Button1Click(Sender: TObject);
begin
application.Terminate;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
if (edit1.GetTextLen>0) and (edit2.gettextlen>0) then //如果不是点着玩的.
    begin
    {$I pattern_enc_start.inc} //代码加密标志开始.其间的代码将被加密.需要运行时再解密.以强壮的保护.
    if SetShortKey(PChar(Edit1.Text), PChar(Edit2.Text)) then //检查注册信息正确吗.如果正确自动存储.存储方式和位置是你在界面中设置.
       begin
       ShowMessage('正确的注册码.请重新启动程序!');
       application.Terminate; //强制关闭.重启验证.为了更保密的,上面的信息框应该去掉是更好的.
       end
    else
       begin
       ShowMessage('不正确的注册码!');
       application.Terminate;
       end;
    {$I pattern_enc_end.inc} //代码加密标志结束.
    end;
end;
procedure TForm2.FormCreate(Sender: TObject);
var computerid:pchar; //用来保存机器码
begin
getSystemID(computerid); //取机器码
Edit3.Text:=strpas(computerid); //显示.
end;
end.



你看,一切使用都很简单.

加壳选项你看下面:





如果有错误在文章中,请指正.

孤漂江湖狼 发表于 2008-10-26 10:20:01

先顶了,以后准有用

xie83544109 发表于 2009-2-17 14:01:49

多谢楼主分享
收下了

zoujian_bull 发表于 2009-2-28 19:34:42

谢楼主分享
以后准有用

ybx2008 发表于 2009-3-2 09:03:39

这个要收藏了

kkr 发表于 2009-4-23 17:37:37

多谢楼主分享
先收藏,以后可能有用。

kir 发表于 2010-9-13 16:38:41

谢谢分享啦!!1先下了,以后会用到的
页: [1]
查看完整版本: 【SDK完全接触----之Obsidium篇】