- UID
- 26707
注册时间2007-1-2
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
发表于 2007-1-3 04:01:44
|
显示全部楼层
原帖由 风间仁 于 2007-1-2 18:42 发表
关于楼主所说的机器码,其实是有用的
要写出通用注册机就要用到它,
它是将硬盘序列号转换为机器码的,具体实现是在
004F7343 |. E8 346EFAFF call spa_u.0049E17C ; 计算出机 ...
回去研究了一下,把机器码转为硬盘序列号的那部分代码传上来,大家共同学习一下~
#include<stdio.h>
#include<string.h>
unsigned getpos(unsigned char const1[],unsigned char ch)
{ int i;
for (i=0;i<strlen(const1);i++)
if (const1==ch) break;
return i;
}
main()
{ unsigned char mac[30];
unsigned char const1[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
unsigned result1,result2,result3,result4;
unsigned k,len;
unsigned char temp[30]=""; unsigned char sn[30]="";
unsigned char s[4];
unsigned long temp1,temp2,i;
char dl,cl;
int ax,di;
long ecx,eax,edi; unsigned long tmp;
printf("Input machine code:\n");
gets(mac);
len=strlen(mac)%4;
for (k=0;k<strlen(mac)-len;k=k+4) {
for (i=0;i<0xfff;i++) {
result1=i&0x3F;
result3=i&0x3F;
if (result1==getpos(const1,mac[k])) {
result2=i>>6;
result2=result2&0x3F;
if (result2==getpos(const1,mac[k+1])) temp2=i;
}
if (result3==getpos(const1,mac[k+2])) {
result4=i>>6;
result4=result4&0x3F;
if (result4==getpos(const1,mac[k+3])) temp1=i;
}
}
temp1=(temp1<<12)|temp2;
s[0]=temp1&0x0FF;
s[1]=(temp1&0x0FF00)>>8;
s[2]=(temp1&0x0FF0000)>>16;
s[3]='\0';
strcat(temp,s);
}
if (len==2) {
for (i=0;i<0xFF;i++){
result1=i&0x3F;
if (result1==getpos(const1,mac[k])) {
result2=i>>6;
result2=result2&0x3F;
if (result2==getpos(const1,mac[k+1])) temp2=i;
}
}
s[0]=temp2;
s[1]='\0';
strcat(temp,s);
}
if (len==3) {
for (i=0;i<0xfff;i++) {
result1=i&0x3F;
if (result1==getpos(const1,mac[k])) {
result2=i>>6;
result2=result2&0x3F;
if (result2==getpos(const1,mac[k+1])) temp2=i;
}
}
for (i=0;i<0x10;i++) {
result3=i&0x3F;
if(result3==getpos(const1,mac[k+2])) temp1=i;
}
s[0]=temp2&0x0FF;
s[1]=(temp2>>8)|(temp1<<4);
s[2]='\0';
strcat(temp,s);
}
tmp=0x8A5; edi=0x8A5;
tmp=tmp>>8;
cl=tmp&0x0FF;
for (i=0;i<strlen(temp);i++) {
sn=temp^cl;
edi=edi+temp;
eax=edi*0x0CE6D;
eax=eax+0x58BF;
edi=eax;
tmp=edi; tmp=tmp>>8; cl=tmp&0x0FF;
}
printf("\nDiskSN:%s\n",sn);
}
经测试,用这个计算出硬盘序列号后再用13楼提供的注册机可以注册成功~
[ 本帖最后由 风间仁 于 2007-1-3 04:04 编辑 ] |
|