wyh1983 发表于 2006-12-10 22:03:38

支持

楼主功力蛮高的啊!!!!
顶一下,
值是学习啊!!
只不过偶是菜鸟

ZHOU2X 发表于 2006-12-11 15:27:24

学习,收藏!!支持!!!!

nieufo 发表于 2007-1-2 03:00:31

老大,我用你的算法在VB里写了一个注册机,但是无法注册成功,这是为什么呀?

风间仁 发表于 2007-1-2 18:42:26

关于楼主所说的机器码,其实是有用的
要写出通用注册机就要用到它,
它是将硬盘序列号转换为机器码的,具体实现是在
004F7343|.E8 346EFAFF      call spa_u.0049E17C                     ;计算出机器码
因此可以逆向通过机器码计算出硬盘序列号~

nieufo 发表于 2007-1-3 00:12:56

多谢14楼的这位兄弟!

风间仁 发表于 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;
   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 编辑 ]

风间仁 发表于 2007-1-3 04:05:02

不知道为什么会变成斜的了,真奇怪:L

nieufo 发表于 2007-1-3 16:16:10

能不能提供一下算法分析?你的程序偶看不懂,不好意思,水平太低

xuhw 发表于 2007-1-3 20:30:43

比较有功底

月之精灵 发表于 2007-1-5 18:17:46

学习下先,刚来,看得不是很懂。
页: 1 [2] 3
查看完整版本: 阳光个人助理 1.30注册算法