能力值:
(RANK:520 )
|
-
-
5 楼
向 bxm大侠学习.上面分析有不正确的还希望指点批评!
能看到crackme代码就更好了 呵呵.
因为注册码允许负数,那么可以直接指定用户名,然后根据方程 1,2 可解得注册码前四部分,方程3,4可解得注册码后四部分.直接手工算还简单,写下面代码,可能画蛇添足了,只当练习.
本人不才,代码编码水平实在差劲,对算法认识也太少
做了个注册算法的的c代码,实际上也就是解方程的代码,
希望能起到抛专引玉的效果.
代码如下:
代码以netwind 为用户名 计算注册码
#include <stdio.h>
#include <string.h>
/*typedef struct res{
int a[1000];
int b[1000];
int c[1000];
int d[1000];
}result;
*/
void main()
{
char name[]="netwind";
int i=0;
long num=0,num1=0;
//result r1,r2; //分别放注册码前四部分和后四部分;
for(i;i<strlen(name);i+=2)
{
if(!name[i])break;
num+=name[i];
if(!name[i+1])break;
num1+=name[i+1];
}
int x=num/256,y=(num/16)&0x00F,z=num&0x00F;
int x1=num1/256,y1=(num1/16)&0x00F,z1=num1&0x00F;
int a,b,c,d;
int done1=0,done2=0;
int j=0,k=0;
a=b=c=d-100;
for(i=0;i<2;i++)
{
for(;a<101;a++)
{
b=-100;
for(;b<101;b++)
{
c=-100;
if(b==0)continue;
for(;c<101;c++)
{
d=-100;
for(;d<101;d++)
{
if(d==0)continue;
if(done1==0)
{
if(b*d==c*z1*b+d*y1*a)
{
if(c*z*b+d*y*a==0)
{
// r1.a[j++]=a;
// r1.b[j++]=b;
// r1.c[j++]=c;
// r1.d[j++]=d;
printf("%d,%d,%d,%d\n",a,b,c,d); //注册码前四部分
done1=1;
break;
}
else continue;
}
else continue;
}
if(done1==1)
{
if(b*d==c*z*b+d*y*a)
{
if(c*z1*b+d*y1*a==0)
{
// r2.a[k++]=a;
// r2.b[k++]=b;
// r2.c[k++]=c;
// r2.d[k++]=d;
printf("%d,%d,%d,%d\n",a,b,c,d); //注册码后四部分
done2=1;
break;
}
else continue;
}
else continue;
}
if(done1==1&&done2==1)break;
}
}
if(done1==1&&done2==1)break;
}
if(done1==1&&done2==1)break;
}
}
//printf("%x,%x,%x\n%x,%x,%x\n",x,y,z,x1,y1,z1);
}
运行结果如下:
-36,96,-25,-100 //注册码前四部分
-25,-100,-10,100 //以下是注册码后四部分 任一组 配合前四部分都可用
-25,-100,-9,90
-25,-100,-8,80
-25,-100,-7,70
-25,-100,-6,60
-25,-100,-5,50
-25,-100,-4,40
-25,-100,-3,30
-25,-100,-2,20
-25,-100,-1,10
-25,-100,1,-10
-25,-100,2,-20
-25,-100,3,-30
-25,-100,4,-40
-25,-100,5,-50
-25,-100,6,-60
-25,-100,7,-70
-25,-100,8,-80
-25,-100,9,-90
-25,-100,10,-100
-25,-100,-10,100
-25,-100,-9,90
-25,-100,-8,80
-25,-100,-7,70
-25,-100,-6,60
-25,-100,-5,50
-25,-100,-4,40
-25,-100,-3,30
-25,-100,-2,20
-25,-100,-1,10
-25,-100,1,-10
-25,-100,2,-20
-25,-100,3,-30
-25,-100,4,-40
-25,-100,5,-50
-25,-100,6,-60
-25,-100,7,-70
-25,-100,8,-80
-25,-100,9,-90
-25,-100,10,-100
Press any key to continue
代码写得实在很差劲,n个 for 以消耗时间为代价,高手见笑了,望高手指点一二,给出最好的破解方法和注册机代码,谢谢!
|