首页
社区
课程
招聘
[推荐]我也学写crackme,第1个作品,大家来玩下。
2007-5-24 16:58 10932

[推荐]我也学写crackme,第1个作品,大家来玩下。

2007-5-24 16:58
10932
第1次写crackme,我是新手,写出来的东西当然也不会太强了。希望高手赐教。 
程序用BCB6 写的,算法不难,没有ANTI也没壳。直接拿刀开始干吧!!

PS:里面的算法是我随意写的,我都不知道会算出什么结果。不知道这算不算违规。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (21)
雪    币: 241
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
haoshuaioo 1 2007-5-24 17:00
2
0
沙发自己坐~~

广告位招租!!
雪    币: 200
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Boneasher 2007-5-24 17:08
3
0
不错啊,有精华了
雪    币: 241
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
haoshuaioo 1 2007-5-24 17:15
4
0
多亏师傅指导,那文章是斑竹给的鼓励哈哈。
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 2007-5-24 18:16
5
0
太简单了,注册机一会写

00401B56  |.  8D5C05 C0     lea     ebx, dword ptr [ebp+eax-40]
00401B5A  |>  8B05 E0914700 /mov     eax, dword ptr [4791E0]
00401B60  |.  8945 DC       |mov     dword ptr [ebp-24], eax
00401B63  |.  8B05 E4914700 |mov     eax, dword ptr [4791E4]
00401B69  |.  8945 E0       |mov     dword ptr [ebp-20], eax
00401B6C  |.  66:8B05 E8914>|mov     ax, word ptr [4791E8]
00401B73  |.  66:8945 E4    |mov     word ptr [ebp-1C], ax
00401B77  |.  8B4D F8       |mov     ecx, dword ptr [ebp-8]          ;  第四位送入 ECX
00401B7A  |.  8B45 FC       |mov     eax, dword ptr [ebp-4]          ;  第三位
00401B7D  |.  0FAF4D F4     |imul    ecx, dword ptr [ebp-C]
00401B81  |.  2BC6          |sub     eax, esi
00401B83  |.  8B55 F8       |mov     edx, dword ptr [ebp-8]
00401B86  |.  2BC8          |sub     ecx, eax
00401B88  |.  2BD6          |sub     edx, esi
00401B8A  |.  03D1          |add     edx, ecx
00401B8C  |.  8BC2          |mov     eax, edx
00401B8E  |.  0FBE13        |movsx   edx, byte ptr [ebx]
00401B91  |.  0BC2          |or      eax, edx
00401B93  |.  2BC6          |sub     eax, esi
00401B95  |.  50            |push    eax                             ; /<%04X>
00401B96  |.  8D45 DC       |lea     eax, dword ptr [ebp-24]         ; |
00401B99  |.  68 EE914700   |push    004791EE                        ; |Format = "%04X"
00401B9E  |.  50            |push    eax                             ; |s
00401B9F  |.  E8 EA680700   |call    <jmp.&USER32.wsprintfA>         ; \wsprintfA
00401BA4  |.  83C4 0C       |add     esp, 0C
00401BA7  |.  8D4D 80       |lea     ecx, dword ptr [ebp-80]
00401BAA  |.  51            |push    ecx
00401BAB  |.  E8 FC8E0500   |call    0045AAAC
00401BB0  |.  59            |pop     ecx
00401BB1  |.  83F8 20       |cmp     eax, 20
00401BB4  |.  73 2D         |jnb     short 00401BE3
00401BB6  |.  8D45 DC       |lea     eax, dword ptr [ebp-24]
00401BB9  |.  50            |push    eax                             ; /Arg2
00401BBA  |.  8D55 80       |lea     edx, dword ptr [ebp-80]         ; |
00401BBD  |.  52            |push    edx                             ; |Arg1
00401BBE  |.  E8 AD8E0500   |call    0045AA70                        ; \CrackMe.0045AA70
00401BC3  |.  83C4 08       |add     esp, 8
00401BC6  |.  4F            |dec     edi
00401BC7  |.  FF45 F0       |inc     dword ptr [ebp-10]
00401BCA  |.  43            |inc     ebx
00401BCB  |.  3B75 F0       |cmp     esi, dword ptr [ebp-10]
00401BCE  |.  75 0A         |jnz     short 00401BDA
00401BD0  |.  837D F0 00    |cmp     dword ptr [ebp-10], 0
00401BD4  |.  0F94C1        |sete    cl
00401BD7  |.  83E1 01       |and     ecx, 1
00401BDA  |>  85FF          |test    edi, edi
00401BDC  |.  7E 05         |jle     short 00401BE3
00401BDE  |.^ E9 77FFFFFF   \jmp     00401B5A
00401BE3  |>  8D55 84       lea     edx, dword ptr [ebp-7C]          ;  (ASCII "FFF5FFFFFFF5FFFFFFFBFFFFFFFB")
00401BE6  |.  8D45 80       lea     eax, dword ptr [ebp-80]
00401BE9  |.  8B0A          mov     ecx, dword ptr [edx]
00401BEB  |.  C1E1 1C       shl     ecx, 1C
00401BEE  |.  0308          add     ecx, dword ptr [eax]
00401BF0  |.  33D2          xor     edx, edx
00401BF2  |.  898D 78FFFFFF mov     dword ptr [ebp-88], ecx
00401BF8  |.  8995 7CFFFFFF mov     dword ptr [ebp-84], edx
00401BFE  |.  DFAD 78FFFFFF fild    qword ptr [ebp-88]
00401C04  |.  DD5D D4       fstp    qword ptr [ebp-2C]
00401C07  |.  6A 20         push    20                               ; /Arg3 = 00000020
00401C09  |.  6A 00         push    0                                ; |Arg2 = 00000000
00401C0B  |.  50            push    eax                              ; |Arg1
00401C0C  |.  E8 BB8D0500   call    0045A9CC                         ; \CrackMe.0045A9CC
00401C11  |.  83C4 0C       add     esp, 0C
00401C14  |.  FF75 D8       push    dword ptr [ebp-28]               ; /Arg4
00401C17  |.  FF75 D4       push    dword ptr [ebp-2C]               ; |Arg3
00401C1A  |.  68 F3914700   push    004791F3                         ; |Arg2 = 004791F3 ASCII "%.0f"
00401C1F  |.  8D4D 80       lea     ecx, dword ptr [ebp-80]          ; |
00401C22  |.  51            push    ecx                              ; |Arg1
00401C23  |.  E8 BCA80500   call    0045C4E4                         ; \这里处理最后结果

主要计算代码在这里,等我吃了饭就写注册机
上传的附件:
  • 1.png (6.16kb,180次下载)
雪    币: 241
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
haoshuaioo 1 2007-5-24 18:24
6
0
太厉害了  呵呵  期待你把算法写出来啊。
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
zcg 2007-5-24 19:04
7
0
希望 haoshuaioo 下次写个更有趣味的
雪    币: 241
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
haoshuaioo 1 2007-5-24 19:57
8
0
刚接触这些东西  还不太明白里面的精髓   在学习当中   献丑了
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
riijj 7 2007-5-25 10:19
9
0
算法是没有限制,但有一些基本的原则

1. 算法检查的序号,应该是可以稳定计算出来的,意思是每一次的检查结果也相同,
不存在「随机性」的因素

2. 算法中的注册名字和序号,应该是可以有不同配合的,不会是 100 个名字也是
使用同一个序号

3. 序号可以是数字,英文,混合,长度可长可短,可要求 copy and paste 的,
但序號不可以是不能用鍵盤輸入的 ascii 字元

4. 算法的理念,可以应用在真正共享软件上
雪    币: 241
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
haoshuaioo 1 2007-5-25 14:13
10
0
谢谢 riijj ,学习了。。
这个算法还算正常的   我的意思是说  在没任何思路的情况下 随意发挥写出来的算法  
本来想生成一个长度32的16进制  结果发现那个注册成功几率太大了  所以改了一下

算法过程已经被 yingyue 帖出来啦  期待哪位有时间的朋友可以写出C的算法  和我的对比下   也顺便学习学习代码规范  呵呵
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ahublue 2007-5-25 14:54
11
0
太精彩了,看来我要抓紧时间学习!

雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 2007-5-25 16:22
12
0
就这样吧,出门了

00401B5A  |>  8B05 E0914700 /mov     eax, dword ptr [4791E0]        ; 循环开始
00401B60  |.  8945 DC       |mov     dword ptr [ebp-24], eax
00401B63  |.  8B05 E4914700 |mov     eax, dword ptr [4791E4]
00401B69  |.  8945 E0       |mov     dword ptr [ebp-20], eax
00401B6C  |.  66:8B05 E8914>|mov     ax, word ptr [4791E8]
00401B73  |.  66:8945 E4    |mov     word ptr [ebp-1C], ax
00401B77  |.  8B4D F8       |mov     ecx, dword ptr [ebp-8]          ;  第四位送入 ECX
00401B7A  |.  8B45 FC       |mov     eax, dword ptr [ebp-4]          ;  第三位送入 EAX
00401B7D  |.  0FAF4D F4     |imul    ecx, dword ptr [ebp-C]     
00401B81  |.  2BC6          |sub     eax, esi                   第三位减去用户名长度        
00401B83  |.  8B55 F8       |mov     edx, dword ptr [ebp-8]    edx 获取第四位的数值
00401B86  |.  2BC8          |sub     ecx, eax                   ECX - 上面结果
00401B88  |.  2BD6          |sub     edx, esi                  第三位 - 用户名长度
00401B8A  |.  03D1          |add     edx, ecx                   上面两次的结果相加得 SUM
00401B8C  |.  8BC2          |mov     eax, edx
00401B8E  |.  0FBE13        |movsx   edx, byte ptr [ebx]      整个循环里变得就只有这一步
00401B91  |.  0BC2          |or      eax, edx                 SUM OR name[i]
00401B93  |.  2BC6          |sub     eax, esi                 SUM - len (用户名长度)
00401B95  |.  50            |push    eax                      保存   
00401B96  |.  8D45 DC       |lea     eax, dword ptr [ebp-24]      
00401B99  |.  68 EE914700   |push    004791EE                       
00401B9E  |.  50            |push    eax                           
00401B9F  |.  E8 EA680700   |call    <jmp.&USER32.wsprintfA>      
00401BA4  |.  83C4 0C       |add     esp, 0C
00401BA7  |.  8D4D 80       |lea     ecx, dword ptr [ebp-80]
00401BAA  |.  51            |push    ecx
00401BAB  |.  E8 FC8E0500   |call    0045AAAC
00401BB0  |.  59            |pop     ecx
00401BB1  |.  83F8 20       |cmp     eax, 20
00401BB4  |.  73 2D         |jnb     short 00401BE3
00401BB6  |.  8D45 DC       |lea     eax, dword ptr [ebp-24]
00401BB9  |.  50            |push    eax                           
00401BBA  |.  8D55 80       |lea     edx, dword ptr [ebp-80]        
00401BBD  |.  52            |push    edx                           
00401BBE  |.  E8 AD8E0500   |call    0045AA70                       
00401BC3  |.  83C4 08       |add     esp, 8
00401BC6  |.  4F            |dec     edi           // 这里是把用户名第二位的ASCII值每次减去 1
00401BC7  |.  FF45 F0       |inc     dword ptr [ebp-10]
00401BCA  |.  43            |inc     ebx
00401BCB  |.  3B75 F0       |cmp     esi, dword ptr [ebp-10]
00401BCE  |.  75 0A         |jnz     short 00401BDA
00401BD0  |.  837D F0 00    |cmp     dword ptr [ebp-10], 0
00401BD4  |.  0F94C1        |sete    cl
00401BD7  |.  83E1 01       |and     ecx, 1
00401BDA  |>  85FF          |test    edi, edi
00401BDC  |.  7E 05         |jle     short 00401BE3
00401BDE  |.^ E9 77FFFFFF   \jmp     00401B5A

上面这个循环可以这样描述

  for(i=0;i<len;i++)         // len 为用户名长度
    {
        ecx=0;
        edx=name[3];      // 给定位了
        eax=name[2];      // 给定位了
        eax-=len;         // 第三位减去用户名长度
        ecx-=eax;         // ECX为 0 减去 上面结果
        edx-=len;         // 第四位减去用户名长度
        ecx+=edx;         // 上面两个结果相加
        edx=name[i];      // 在循环里上面的都不变,变化的就只有这步
        ecx|=edx;         // 循环把用户名的每位送入 EDX 然后把刚才计算的结果进行 OR 运算
        ecx-=len;         // 最后就把这个结果再减去用户名长度
        temp[i]=ecx;      // 送入内存保留
    }
_____________________________________________________________________

  输入用户名 ying 后经上面的结果得到这样  ASCII "FFF5FFFFFFF5FFFFFFFBFFFFFFFB"
  
  如果用户名的第一位计算的结果小于 0 的话就不使用到第二位的用户名,比喻上面这个
  
  第一位的计算结果是     FFF5FFFF  ,程序就把它变成了 FFFFFFF5
  
  有现提取 FFF5 出来把每位变成了对应的 ASCII 值 :35464646

00401BE3  |>  8D55 84       lea     edx, dword ptr [ebp-7C]         
00401BE6  |.  8D45 80       lea     eax, dword ptr [ebp-80]
00401BE9  |.  8B0A          mov     ecx, dword ptr [edx]
00401BEB  |.  C1E1 1C       shl     ecx, 1C                // 把 35464646 左移 28 次

                                                // 然后把左边的 FFFF 也变为对应的 46464646
                                                  
00401BEE  |.  0308          add     ecx, dword ptr [eax]   // 结果=(35464646<28) + 46464646

看的冲忙,可能有说不到的地方

我也在写 CM ,所以没时间继续看了,见谅
雪    币: 241
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
haoshuaioo 1 2007-5-25 18:01
13
0
太厉害  太强  太精彩了!!!!  学习了
yingyue有没有MSN,学习学习。
我MSN是:haoshuaioo@hotmail.com
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 2007-5-25 23:47
14
0
哦,我的 MSN 好久没用了有

TOM8147@HOTMAIL.COM

这几天会安装一下 MSN 的,我的水平很菜,你有空多指教一下我
雪    币: 241
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
haoshuaioo 1 2007-5-26 09:27
15
0
MSN没有用什么啊,QQ?? 反正有什么留什么啦。。
雪    币: 211
活跃值: (32)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
个人兴趣 1 2007-5-26 17:03
16
0
谢谢LZ啦,我一定要分析出算法,貌似不是很难
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙龙love 2007-5-29 16:35
17
0
这年代牛人多啊,学习中啊
雪    币: 697
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
月之精灵 2007-5-29 23:28
18
0
[QUOTE=yingyue;314199]就这样吧,出门了

00401B5A  |>  8B05 E0914700 /mov     eax, dword ptr [4791E0]        ; 循环开始
00401B60  |.  8945 DC       |mov     dword ptr [ebp-24...[/QUOTE]

分析得不错,我也来一个,
yinguilin
1412908594
雪    币: 209
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
y129104 2007-5-30 00:11
19
0
y129104
843465008
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hske 2007-5-30 01:43
20
0
哥哥  我怎么断不下去啊
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LinkHu 2007-5-31 17:23
21
0
新人初到,忽然发现太多的东西不懂了
纯顶一下
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
abowan 2007-6-1 13:38
22
0
我也是新人,学习下 。。
游客
登录 | 注册 方可回帖
返回