能力值:
( LV2,RANK:10 )
|
-
-
2 楼
401237
............
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
401237 EAX
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
哈,都是点到为止的。还得更上一层楼啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
test
HNT-7440-1347-3820-GP
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
zdcrack
HNT-8156-9334-4552-KI
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
从简单开始,最好还能看懂加密部分,也是很简单的。
现在就把注册机源码放贴在这里
#include "stdio.h"
#include "string.h"
unsigned int key1(char *n)
{
int len;
unsigned int t=0,x;
int i;
len=strlen(n);
x=len;
for(i=len;len>0;len--)
{
t=(t&0xffffff00|n[--i])*len;
x=x+t;
}
return x;
}
void getNo1(char *s,char *n)
{
int len;
int x;
len=strlen(n);
x=n[0]*n[len-1]*n[len/2]%10000;
sprintf(s,"%04u",x);
}
void getNo2(char *s,char *n)
{
unsigned int x;
unsigned int b;
x=key1(n);
asm volatile ("xor %%eax,%%eax;cpuid;movl %%ebx,%0":"=m"(b));
x=(x & b)%100000;
sprintf(s,"%04u",x);
}
void getNo3(char *s,char *n)
{
int x=0;
int len;
unsigned int d;
unsigned int c;
len=strlen(n);
len--;
for(;len>=0;len--)
{
x=x+n[len];
}
asm volatile ("xor %%eax,%%eax;cpuid;movl %%edx,%0;movl %%ecx,%1":"=m"(d),"=m"(c));
x=(x ^ d | c) * n[0] *n[1] % 10000;
sprintf(s,"%04u",x);
}
void getNo4(char *s,char *n)
{
int len;
int x=0;
len=strlen(n);
for(;len>=0;len--)
{
x=x+n[len];
}
x=x%26+0x41;
s[0]=(char)x;
s[1]=key1(n)%26+0x41;
s[2]=0;
}
main()
{
char name[255];
char key[22];
char str[10];
do {
printf("Name: ");
scanf("%s",name);
}while(strlen(name)==0);
strcpy(key,"HNT-");
getNo1(str,name);
strcat(key,str);
strcat(key,"-");
getNo2(str,name);
strcat(key,str);
strcat(key,"-");
getNo3(str,name);
strcat(key,str);
strcat(key,"-");
getNo4(str,name);
strcat(key,str);
printf("Key: %s",key);
getchar();
getchar();
}
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
pussy
HNT-8480-0321-8336-ID
太容易就找到注册码了,但对於我不懂看代码有啥方法能够完全看得明你的作品呢..
请给一个好的方法作学习了解你的代码...
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
第一,需要知道汇编
第二,是windows的程序,需要有windows API参考
第三,是windows的程序,需要知道它的标准编程格式。对于这个每个想学解密的,最好能编一次windows程序,用C或ASM,找个最简单的,或抄一下也行,但要自已亲自编译通过、执行。这样你能理解它的运行顺序。通过后你可以DEBUG它。断一下断点,看看为什么先停在这个断点后停在那个。
第四,多动手,不管能不能通过crackme,从简单开始,到复杂了你需要有点数学功底了。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
破了。但不会写注册机。算法没看的懂
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
学习了,谢谢楼主
lwyqh1
HNT-7996-7669-0188-QP
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
12345
HNT-2447-6640-8038-VE
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
phpbb3
HNT-9776-1282-0208-DK
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
自动出明码了
xuandm
HNT-8800-6997-5776-DP
却不知怎么得
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
大哥..
如你所说我一定不能学到写注册机...
能否教我呀.......... 感谢!!
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
yue
HNT-9857-1029-4422
好象跟电脑的注册名有关
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
wolf
HNT-0904-1285-7799-YN
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
kun
HNT-7090-1026-8953-WI
|
能力值:
( LV9,RANK:230 )
|
-
-
19 楼
可以利用CRACK ME自身做注册机。
将下句的JNZ改为JMP:
0040110A /0F85 01000000 jnz 00401111
将0040200C改为004020B8:
004012CE 68 0C204000 push 0040200C
保存修改为可执行文件即可。
另:此CRACK ME有缺陷,XP中打开窗口多时,会偶尔当机。
换在WIN 2000中,不能正常运行。在下面出错:
77E08CE8 F643 >test byte ptr [ebx+2B], 0C0
77E08CEC 0F85 >jnz 77E093BD
77E08CF2 83FF >cmp edi, 2F
77E08CF5 B9 10>mov ecx, 110
访问[B40A03F2]错误。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
本人是菜鸟,在这里献丑了 ^_^
key的值分为5段,开头部分固定为HNT-
假设
user=123
key=456
\---------------------------------key第二段值计算--------------------------------/
1、user的第一个字符的asc值乘以user最后一个字节的asc值
【在这里就是31*33=9C3】
2、user的长度除以2得到商,这个商用A表示,用第一步的计算结果乘以user的第(A+1)个字
符的asc值
【在这里就是,9C3*32 = 1E816】
3、将计算结果除以0A得到余数B,将B加上30,即B = B+30,将B存入内存中,所得商
继续除以0A,所得商加30保存内存中,依此类推,总共要做四次循环除法
【在这里就是,1E816%0A+30 = 30,30CF%0A+30 = 35,4E1%0A+30 = 39,
7C%0A+30 = 34,所以最终结果是34393530即4950】
\---------------------------以上就是key第二段值计算过程------------------------/
经过上述的计算,真正的key=HNT-4950
\---------------------------------key第三段值计算--------------------------------/
4、获取本机的计算机名称,并累加名称每个字符的asc值
5、假设user长度为N,则把N赋给eax,然后user最后一个字符的asc值乘以N,用eax加上所得
结果,user倒数第二个字符乘以(N-1),用eax加上所得结果,依此类推,直到把user所
有字符运算一次。
【在这里就是,eax=3,33*3=99,eax=eax+99=9C,32*2=64,eax=eax+64=100,31*1=31,eax=eax+
31=131】
6、通过CPUID命令获取cpu信息,如果是intel的cpu则ecx=6C65746E,edx=49656E69,
ebx = 756E6547,其中ecx,edx先入栈,后面会用到,这里用第5步的计算结果和ebx做与
运算,结果保存到eax
【在这里就是,eax=131,and eax,ebx,最后eax等于101】
7、将第6步获得的eax的值,按照第3步的方式存入内存,即30323537
\---------------------------以上就是key第三段值计算过程------------------------/
经过上述的计算,真正的key=HNT-4950-0257
\---------------------------------key第四段值计算--------------------------------/
8、将user每个字符的asc值依次累加,结果存入eax
【在这里就是:31+32+33=96】
9、将第8步的计算结果与第6步中cpu的另外两个参数做或运算
【在这里就是:eax=96,or eax,49656E69;or eax,6C65746E;最后eax=6D657EFF】
10、分别取user的前两个字符的asc值做乘法,所得结果再与第9步的eax相乘
【在这里就是:31*32=992,992*6D657EFF=416F559646E,其中只取F559646E】
11、将第10步获得的结果即F559646E按照第3步的方式存入内存,即36333334
\---------------------------以上就是key第四段值计算过程------------------------/
经过上述的计算,真正的key=HNT-4950-0257-6334
\---------------------------------key第五段值计算--------------------------------/
12、将user每个字符的asc值依次累加,结果存入eax,然后eax除以1A,所得余数加41,结果存
入eax
【在这里就是:31+32+33=96,eax=96%1A+41=55】
13、重复第5步,运算结果存入eax,即eax=131
14、将第13步的eax值除以1A,所得余数加41,结果存入edx
【在这里就是:edx=131%1A+41=54】
15、eax的第一个字节,edx第一个字节合起来即为key第五段值
【在这里就是:5554,换成字符就是UT】
\---------------------------以上就是key第五段值计算过程------------------------/
经过上述的计算,真正的key=HNT-4950-0257-6334-UT
所以
user=123
key=HNT-4950-0257-6334-UT
错漏之处请多多包含~
感谢楼主提供此Crackme
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
很好,根据这分析写注册机就很容易了,注:第四步的值并没有用上。因此机器名是没关系的。
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
是啊机器名是没用上的 ^_^
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
晕 我试试 的还真是那个注册码啊
我也就会 这种的了 出明码的了其他 都不会
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
拿来练练手!!!
|
能力值:
( LV9,RANK:140 )
|
-
-
25 楼
范范love
hnt616407682774yq
|
|
|