讨论读取硬盘的物理序列号,来进行软件加密

dreamgoal 2002-03-19 05:36:30
加精
1。GetVolumeInformation读取的不是物理序列号,格式化后改变。所以不行

2. 写DLL可以读出正确的序列号。但是在Win2000下需要管理员权限才行,似乎也不可行。

那到底有什么办法能对Win9x/2000/XP都能正确读出物理序列号呢?

还有其他的办法来来唯一识别一台电脑吗?
...全文
77 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamgoal 2002-03-19
  • 打赏
  • 举报
回复
我想关键是无法保证在Win9x/2000下都能正常读取。

没有序列号的硬盘倒是次要的。找一个三星的硬盘也不是件容易事。
ElephantNose 2002-03-19
  • 打赏
  • 举报
回复
这个方法不可行,因为有的硬盘就没有内部序列号,如三星的。
dreamgoal 2002-03-19
  • 打赏
  • 举报
回复
找了这么久关于读取硬盘序列号的程序。看来最后结论是不可行。只好想别的办法了。
torble 2002-03-19
  • 打赏
  • 举报
回复
唉~要是有完美的解决方案的话,盗版就不会这么猖獗了,取个折中吧~
dreamgoal 2002-03-19
  • 打赏
  • 举报
回复
不少网吧管理软件用的是网卡的地址来加密。但对于其他类型的软件就不行了
dreamgoal 2002-03-19
  • 打赏
  • 举报
回复
To ChipHead(满脑袋芯片和程序的人)
如果用P4的序列号的话局限性太大

<例子: http://www.applevb.com/lib/diskio.rar
这个例子也不可行,对于Win2000要求Admin权限。
tanqth 2002-03-19
  • 打赏
  • 举报
回复
是网卡号,少写了一个字
tanqth 2002-03-19
  • 打赏
  • 举报
回复
用网号
type
ASTAT =record
adapt:TADAPTERSTATUS ;
NameBuff:array[0..30] of TNameBuffer;
end;
New_byte=array[0..5] of byte;
var

NewByte:New_Byte;
procedure TfrmMain.GetNetCardAddress;
var
ncb:^TNCB;
AdapterList:^TLanaEnum;
ret:Char;
i,K:integer;
Adapter:^ASTAT;
textt:string;
// pAdd:string;
// m_byteAddressMySelf:string;
// m_ctrlThisNetCard:TStrings;
begin
// m_ctrlThisNetCard:=TStringList.Create;
getMem(ncb,sizeof(TNCB));
getMem(AdapterList,sizeof(TLanaEnum));
ncb^.ncb_command:=char(NCBENUM);
Ncb^.ncb_buffer := pchar(AdapterList);
Ncb^.ncb_length := sizeof(AdapterList);
// ret :=Netbios(PNCB(ncb));
Netbios(PNCB(ncb));
if (Ncb^.ncb_retcode<>char(NRC_GOODRET)) then exit;
For I:=0 to ord(AdapterList^.Length) do
begin
getmem(ncb,sizeof(TNCB));
Ncb^.ncb_command := char(NCBRESET);
Ncb^.ncb_lana_num := AdapterList.lana[i];
if (Netbios(PNCB(Ncb)) <> char(NRC_GOODRET)) then exit;

getmem(ncb,sizeof(TNCB));
Ncb^.ncb_command := char(NCBASTAT);
Ncb^.ncb_lana_num := AdapterList.lana[i];
ncb^.ncb_callname:='*';

getMem(Adapter,sizeof(Adapter^));
Ncb^.ncb_buffer := pchar(Adapter);
Ncb^.ncb_length := sizeof(Adapter^);

ret:=Netbios(PNCB(Ncb));

if (ret<> #0) then exit;
for K:=0 to 5 do
if(Adapter^.adapt.adapter_address[K]<>#0)then break;
if(K>=6)then continue;
textt:=format('%.02X %.02X %.02X %.02X %.02X %.02X',
[ord(Adapter^.adapt.adapter_address[0]),
ord(Adapter^.adapt.adapter_address[1]),
ord(Adapter^.adapt.adapter_address[2]),
ord(Adapter^.adapt.adapter_address[3]),
ord(Adapter^.adapt.adapter_address[4]),
ord(Adapter^.adapt.adapter_address[5])]);
if(m_ctrlThisNetCard.items.IndexOf(textt)=LB_ERR)then
m_ctrlThisNetCard.items.Add(textt);
end;

end;

function TfrmMain.HextoDec(const Hex: string): integer;
var
I:integer;
C:char;
Value:integer;
begin
value:=0;
For I:=1 to Length(Hex) do
begin
C:=Hex[I];
if(C>='A') and (C<='F')then
value:=Value*10+(ord(C)-ord('A')+10)
else
Value:=Value*10+(ord(C)-ord('0'));
end;
result:=Value;
end;
function TfrmMain.SetStringtobyte(var NewByte: New_byte;
const SourceStr: string): boolean;
var
str,tmp:string;
start,I:integer;
begin
try
For I:=0 to 5 do
NewByte[I]:=0;
tmp:=Uppercase(SourceStr+' ');
for I:=0 to 5 do
begin
start:=pos(' ',tmp);
inc(start,-1);
str:=copy(tmp,0,start);
NewByte[I]:=HextoDec(str);
tmp:=copy(tmp,start+1,length(tmp)-start);
tmp:=trimLeft(tmp);
end;
result:=True;
except
result:=False;
end;
end;
torble 2002-03-19
  • 打赏
  • 举报
回复
例子: http://www.applevb.com/lib/diskio.rar

相关帖子:http://www.csdn.net/Expert/forum.asp?typenum=8&searchKeys=%D3%B2%C5%CC%D0%F2%C1%D0%BA%C5&roomid=3&author=&tabletype=now
bigban 2002-03-19
  • 打赏
  • 举报
回复
gz
ChipHead 2002-03-19
  • 打赏
  • 举报
回复
前一阵子批判的很热烈的关于P4的序列号的问题,不知道是不是可以达到这个目的?但具体怎么做就不知道了,可能需要查一查P4的指令集?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧