支持
楼主功力蛮高的啊!!!!顶一下,
值是学习啊!!
只不过偶是菜鸟 学习,收藏!!支持!!!! 老大,我用你的算法在VB里写了一个注册机,但是无法注册成功,这是为什么呀? 关于楼主所说的机器码,其实是有用的
要写出通用注册机就要用到它,
它是将硬盘序列号转换为机器码的,具体实现是在
004F7343|.E8 346EFAFF call spa_u.0049E17C ;计算出机器码
因此可以逆向通过机器码计算出硬盘序列号~ 多谢14楼的这位兄弟! 原帖由 风间仁 于 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;
unsigned char const1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
unsigned result1,result2,result3,result4;
unsigned k,len;
unsigned char temp="";unsigned char sn="";
unsigned char s;
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)) {
result2=i>>6;
result2=result2&0x3F;
if (result2==getpos(const1,mac)) temp2=i;
}
if (result3==getpos(const1,mac)) {
result4=i>>6;
result4=result4&0x3F;
if (result4==getpos(const1,mac)) temp1=i;
}
}
temp1=(temp1<<12)|temp2;
s=temp1&0x0FF;
s=(temp1&0x0FF00)>>8;
s=(temp1&0x0FF0000)>>16;
s='\0';
strcat(temp,s);
}
if (len==2) {
for (i=0;i<0xFF;i++){
result1=i&0x3F;
if (result1==getpos(const1,mac)) {
result2=i>>6;
result2=result2&0x3F;
if (result2==getpos(const1,mac)) temp2=i;
}
}
s=temp2;
s='\0';
strcat(temp,s);
}
if (len==3) {
for (i=0;i<0xfff;i++) {
result1=i&0x3F;
if (result1==getpos(const1,mac)) {
result2=i>>6;
result2=result2&0x3F;
if (result2==getpos(const1,mac)) temp2=i;
}
}
for (i=0;i<0x10;i++) {
result3=i&0x3F;
if(result3==getpos(const1,mac)) temp1=i;
}
s=temp2&0x0FF;
s=(temp2>>8)|(temp1<<4);
s='\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 编辑 ] 不知道为什么会变成斜的了,真奇怪:L 能不能提供一下算法分析?你的程序偶看不懂,不好意思,水平太低 比较有功底 学习下先,刚来,看得不是很懂。