P4超线程的cpuid怎么会变化啊?(100分)

  • 主题发起人 主题发起人 qdlover
  • 开始时间 开始时间
Q

qdlover

Unregistered / Unconfirmed
GUEST, unregistred user!
本来想做个机器码注册模块
网卡不能用,因为有的机器没有网卡
硬盘id不能用,因为有的硬盘没有id
GetVolumeInformation不能用,因为重新分区就变了
bios id不能用,因为笔记本电脑的取不出来

试到最后就剩下cpuid了

结果不幸的是,在p4 超线程的cpu(就是那种任务管理器里面能看到两颗cpu的)cpuid竟然是变化的2个值,更倒霉的是,不一定每次取出来的是哪一个

晕倒了,除了用加密狗,还有什么好办法能确定机器的唯一标识码啊??

有p4超线程cpu的可以测试以下程序,取100次,2个id不定什么时候取出来哪个
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TCPUID = array[1..4] of Longint;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }

public
{ Public declarations }
end;

var
Form1: TForm1;


implementation

{$R *.dfm}
function GetCPUID: TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Resukt}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,k:integer;
r:TCPUID;
str:string;
begin
memo1.Clear;
for k:=0 to 100 do
begin
r:=getcpuid;
str:='';

for i:=1 to 4 do
begin
str:=str+'-'+inttostr(abs(r));
end;
memo1.lines.add(str);
end;

end;

end.
 
GetVolumeInformation不能用,因为重新分区就变了

用户更换了cpu,id也变了。
其实,用户重新分区比用户更换cpu的概率高不了多少吧。
而且,可以取d盘的卷标号,这样即使经常格式化c盘重装系统也没关系。
另外,同一批次的cpu的id是相同的。
 
to:ufo!,
我用电脑10年了,重新分区不知道多少次了

换cpu除了升级电脑或者换机器也就是2,3次而已
D盘啊,其实很多人的电脑就一个分区C

至于同一批次的cpu,没碰到过,不知道是不是一样的

我现在在想,去机器码我就取100次cpuid,把两个都取出来当作机器码好了
 
突然发现
这些超线程的cpuid都是一样的。。。。。。。。。
晕倒了
 
楼主可以取CPU的SerialNumber嘛。
去下载一个MiTeC System Information Component Suite 10.2.0,安装好了后将它的组件之一MiTeC_CPU拖到FORM上,然后:
for k:=0 to 100 do
begin
MiTeC_CPU1.RefreshData;
memo1.lines.add(MiTeC_CPU1.SerialNumber);
end;
你看看是否超线程的P4也只有一个序列号了?我这里试过了,只有一个。
 
目前测试情况
A
-3905-16910336-17437-1075053569
-3905-133120-17437-1075053569
B
-3881-16910345-17408-1075053569
-3881-133129-17408-1075053569
C
-3892-133120-17437-1075053569
-3892-16910336-17437-1075053569
其中A,B是同一个牌子同样配置的机器,cpu是不是同一批次的不知道怎么看
三个cpu最后一位都一样
前三位,对同一个cpu来说,只有第二位不一样


也许只需要1,3,4就可以构造机器码了
xp,2k,2k3底下都通过

我的分,能收回吗。。。。。。。。。。
 
to weiliu,

我试试看

另外,听说现在usb加密狗很容易破解,是不是真的啊?

我本来就想用个usb加密狗算了
 
to weiliu,
我还是用那三台超线程的cpu测试,序列号就一个
a
0000-0F41-BFEB-FBFF-0000-441D
b
0000-0F29-BFEB-FBFF-0000-4400
c
0000-0F34-BFEB-FBFF-0000-441D

这个控件组真不错,不过没有for d7的crack啊
 
本身就是破解的,我的下载地址:
http://www.fixdown.com/soft/24572.asp?fixdown.com=gdteldowns
也适用于D7
 
我下的也是这个阿
在运行demo4,5,8的时候,就有他的网站弹出对话框的,其他的都没问题,破解不完全吧
 
这个问题已经困扰我很久, 不过现在已经解决了, 需要用到线程技术
 
楼主还可以根据其他的硬件信息来加密。
 
出差才回来,继续讨论
除了我在顶楼罗列的那些,还有什么硬件有特别的id
 
我在3台联想的机器上测试过
c 1G的cpu,序列号都是一样的
 
MiTeC System Information Component Suite就是这么干的了,下面是从里面复制出来的代码:

type
TCPUIDResult = packed record
EAX: Cardinal;
EBX: Cardinal;
ECX: Cardinal;
EDX: Cardinal;
end;
const
CPUID_CPUSIGNATURE : DWORD = $1;
var
CPUID_Level: DWORD;

function ExecuteCPUID: TCPUIDResult; assembler;
asm
PUSH EBX
PUSH EDI
MOV EDI, EAX
MOV EAX, CPUID_LEVEL
DW $A20F
STOSD
MOV EAX, EBX
STOSD
MOV EAX, ECX
STOSD
MOV EAX, EDX
STOSD
POP EDI
POP EBX
end;

function GetCPUSerialNumber: String;

function SplitToNibble(ANumber: String): String;
begin
Result:=Copy(ANumber,0,4)+'-'+Copy(ANumber,5,4);
end;

var
SerialNumber: TCPUIDResult;
begin
Result:='';
CPUID_Level:=CPUID_CPUSIGNATURE;
SerialNumber:=ExecuteCPUID;
Result:=SplitToNibble(IntToHex(SerialNumber.EAX,8))+'-';
CPUID_Level:=CPUID_CPUSIGNATURE;
SerialNumber:=ExecuteCPUID;
Result:=Result+SplitToNibble(IntToHex(SerialNumber.EDX,8))+'-';
Result:=Result+SplitToNibble(IntToHex(SerialNumber.ECX,8));
end;
 

Similar threads

I
回复
0
查看
788
import
I
I
回复
0
查看
641
import
I
I
回复
0
查看
550
import
I
I
回复
0
查看
819
import
I
I
回复
0
查看
733
import
I
后退
顶部