首页
社区
课程
招聘
找来一个简单的crackme,给初学者练习用
发表于: 2008-6-17 09:32 32814

找来一个简单的crackme,给初学者练习用

2008-6-17 09:32
32814
简单的,入门用,要求最好能写个注册机。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (64)
雪    币: 170
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
401237

............
2008-6-17 10:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
401237 EAX
2008-6-17 10:41
0
雪    币: 150
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哈,都是点到为止的。还得更上一层楼啊。
2008-6-18 16:58
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
test
HNT-7440-1347-3820-GP
2008-6-18 17:20
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
zdcrack
HNT-8156-9334-4552-KI
2008-6-18 21:24
0
雪    币: 150
活跃值: (22)
能力值: ( 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();
}
2008-6-19 09:26
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
pussy

HNT-8480-0321-8336-ID
太容易就找到注册码了,但对於我不懂看代码有啥方法能够完全看得明你的作品呢..
请给一个好的方法作学习了解你的代码...
2008-6-21 23:20
0
雪    币: 150
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
第一,需要知道汇编
第二,是windows的程序,需要有windows API参考
第三,是windows的程序,需要知道它的标准编程格式。对于这个每个想学解密的,最好能编一次windows程序,用C或ASM,找个最简单的,或抄一下也行,但要自已亲自编译通过、执行。这样你能理解它的运行顺序。通过后你可以DEBUG它。断一下断点,看看为什么先停在这个断点后停在那个。
第四,多动手,不管能不能通过crackme,从简单开始,到复杂了你需要有点数学功底了。
2008-6-23 09:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
破了。但不会写注册机。算法没看的懂
2008-6-23 20:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习了,谢谢楼主
lwyqh1
HNT-7996-7669-0188-QP
2008-6-24 03:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
12345
HNT-2447-6640-8038-VE
2008-6-24 17:42
0
雪    币: 314
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
phpbb3
HNT-9776-1282-0208-DK
2008-6-24 18:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
自动出明码了
xuandm
HNT-8800-6997-5776-DP
却不知怎么得
2008-6-26 00:26
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
大哥..

如你所说我一定不能学到写注册机...

能否教我呀.......... 感谢!!
2008-6-29 20:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
yue

HNT-9857-1029-4422

好象跟电脑的注册名有关
2008-6-30 15:59
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
wolf
HNT-0904-1285-7799-YN
2008-6-30 17:21
0
雪    币: 351
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
kun
HNT-7090-1026-8953-WI
2008-6-30 22:41
0
雪    币: 423
活跃值: (11)
能力值: ( 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]错误。
2008-7-1 11:11
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
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
2008-7-2 14:16
0
雪    币: 150
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
很好,根据这分析写注册机就很容易了,注:第四步的值并没有用上。因此机器名是没关系的。
2008-7-2 17:17
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
22
是啊机器名是没用上的 ^_^
2008-7-2 18:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
晕 我试试 的还真是那个注册码啊

我也就会 这种的了 出明码的了其他 都不会
上传的附件:
  • 1.jpg (30.08kb,170次下载)
2008-7-10 18:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
拿来练练手!!!
2008-7-10 20:03
0
雪    币: 317
活跃值: (93)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
25
范范love
hnt616407682774yq
2008-7-11 01:46
0
游客
登录 | 注册 方可回帖
返回
//