首页
社区
课程
招聘
经过几天的思考和设计,我的CrackMe v0.3终于和大家见面了。
发表于: 2005-1-31 12:21 12992

经过几天的思考和设计,我的CrackMe v0.3终于和大家见面了。

2005-1-31 12:21
12992

这次的CrackMe还是和上两个CrackMe一样,没有反跟踪,没有反爆破。但算法有一定的难度(非明码),适合有一些破解基础的人,欢迎大家的对CrackMe的考验和CracK。
名称:CrackME v0.3 by zhanshen[DFCG]
难度:中级
要求:找出自己的注册码,可以做出注册机更好
其它,若找不出注册码的能爆破的也可以(嘿嘿,这次对关键比较点做了一些处理)。
附件:CrackMe03.rar


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (31)
雪    币: 296
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
支持小虾兄。。。不过要破就有些困难了。。。^_^
2005-1-31 12:58
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
加油,没有反跟踪和反爆破,只要找到注册码或找到关键比较点爆破后就可以注册成功:
给个成功的画面:
2005-1-31 13:05
0
雪    币: 97697
活跃值: (200824)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持你...
2005-1-31 13:06
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不会是VB写的吧?

我最讨厌VB的东西了~~~~~~~
2005-1-31 15:39
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
Delphi写的。
2005-1-31 15:42
0
雪    币: 107
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
算法麻烦,爆破失败,等待答案~~~~~
2005-1-31 15:56
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
8
我 Delphi 不太懂 ,无能为力  
2005-1-31 19:26
0
雪    币: 200
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看看能不能爆破,试试我的头像,就这水平什么时候可以进阶。help me please.
2005-1-31 19:45
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
点击“确定”来到这里:

:00451863 E83CF7FFFF              call 00450FA4 <==初始化memory block,为 call 004510B4 做准备,已经reverse出来
:00451868 8D55C4                  lea edx, dword ptr [ebp-3C]
:0045186B 8B83F8020000            mov eax, dword ptr [ebx+000002F8]
:00451871 E88EE8FDFF              call 00430104
:00451876 8B45C4                  mov eax, dword ptr [ebp-3C]
:00451879 E836F8FFFF              call 004510B4  <==根据name算出四个integer,我已经reverse出来
:0045187E A124504500              mov eax, dword ptr [00455024] <== 将四个integer分别保存在全局变量里,非常弱的处理方式
:00451883 8945D8                  mov dword ptr [ebp-28], eax
:00451886 A128504500              mov eax, dword ptr [00455028]<==
:0045188B 8945DC                  mov dword ptr [ebp-24], eax
:0045188E A12C504500              mov eax, dword ptr [0045502C]<==
:00451893 8945E0                  mov dword ptr [ebp-20], eax
:00451896 A130504500              mov eax, dword ptr [00455030]<==
:0045189B 8945E4                  mov dword ptr [ebp-1C], eax
:0045189E A12C504500              mov eax, dword ptr [0045502C]
:004518A3 50                      push eax
:004518A4 A130504500              mov eax, dword ptr [00455030]
:004518A9 50                      push eax
:004518AA 8B0D28504500            mov ecx, dword ptr [00455028]
:004518B0 8B1524504500            mov edx, dword ptr [00455024]
:004518B6 8BC3                    mov eax, ebx
:004518B8 E85BF7FFFF              call 00451018   <==初始化另外一块memory block
:004518BD 8D55C0                  lea edx, dword ptr [ebp-40]
:004518C0 8B83FC020000            mov eax, dword ptr [ebx+000002FC]
:004518C6 E839E8FDFF              call 00430104
:004518CB 8B45C0                  mov eax, dword ptr [ebp-40]
:004518CE E871FCFFFF              call 00451544 <== 将你输入的四个key由十进制string转为Hex值
:004518D3 8BF0                    mov esi, eax
:004518D5 8D55BC                  lea edx, dword ptr [ebp-44]
:004518D8 8B8300030000            mov eax, dword ptr [ebx+00000300]
:004518DE E821E8FDFF              call 00430104
:004518E3 8B45BC                  mov eax, dword ptr [ebp-44]
:004518E6 E859FCFFFF              call 00451544  <==
:004518EB 8BF8                    mov edi, eax
:004518ED 8D55B8                  lea edx, dword ptr [ebp-48]
:004518F0 8B8304030000            mov eax, dword ptr [ebx+00000304]
:004518F6 E809E8FDFF              call 00430104
:004518FB 8B45B8                  mov eax, dword ptr [ebp-48]
:004518FE E841FCFFFF              call 00451544  <==
:00451903 8945FC                  mov dword ptr [ebp-04], eax
:00451906 8D55B4                  lea edx, dword ptr [ebp-4C]
:00451909 8B8308030000            mov eax, dword ptr [ebx+00000308]
:0045190F E8F0E7FDFF              call 00430104
:00451914 8B45B4                  mov eax, dword ptr [ebp-4C]
:00451917 E828FCFFFF              call 00451544   <==
:0045191C 50                      push eax
:0045191D 8B4DFC                  mov ecx, dword ptr [ebp-04]
:00451920 8BD7                    mov edx, edi
:00451922 8BC6                    mov eax, esi
:00451924 E897FCFFFF              call 004515C0 <== 将转为hex的四个key如果正确通过一定的演算倒推回 name 计算得到的四个对应的key
                                                    我卡在这里了,是自己的算法还是现成的算法,肯定不是密码学的算法?
:00451929 A138504500              mov eax, dword ptr [00455038] <== 又一次非常弱地将四个integer分别保存在全局变量里
:0045192E 8945C8                  mov dword ptr [ebp-38], eax
:00451931 A13C504500              mov eax, dword ptr [0045503C]
:00451936 8945CC                  mov dword ptr [ebp-34], eax
:00451939 A140504500              mov eax, dword ptr [00455040]
:0045193E 8945D0                  mov dword ptr [ebp-30], eax
:00451941 A144504500              mov eax, dword ptr [00455044]
:00451946 8945D4                  mov dword ptr [ebp-2C], eax
:00451949 B904000000              mov ecx, 00000004
:0045194E 8D45D8                  lea eax, dword ptr [ebp-28] <==指向由name算出的四个key
:00451951 8D55C8                  lea edx, dword ptr [ebp-38] <==指向由输入值演算出的四个key

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00451961(C)
|
:00451954 8B1A                    mov ebx, dword ptr [edx] <==开始比较,
:00451956 3B18                    cmp ebx, dword ptr [eax]
:00451958 751E                    jne 00451978 <==不对就跳转,可以nop掉
:0045195A 83C204                  add edx, 00000004
:0045195D 83C004                  add eax, 00000004
:00451960 49                      dec ecx
:00451961 75F1                    jne 00451954
:00451963 8D45B0                  lea eax, dword ptr [ebp-50]
:00451966 E869FDFFFF              call 004516D4  <==解密加密的字符串“恭喜你,注册成功”
:0045196B 8B55B0                  mov edx, dword ptr [ebp-50]
:0045196E B8CC504500              mov eax, 004550CC
:00451973 E8E828FBFF              call 00404260 <==将“恭喜你,注册成功”的指针赋值到004550CC这个全局变量,又是很弱的表现

程序安装了timer,时间间隔为1S,不停地检验下面的代码,又以一次无聊的方式检查全局变量

004519B8   53                     push    ebx
004519B9   56                     push    esi
004519BA   8BF0                   mov     esi, eax
004519BC   B88946DF25             mov     eax, $25DF4689
004519C1   33DB                   xor     ebx, ebx
004519C3   3B0534504500           cmp     eax, [$00455034]
004519C9   7527                   jnz     004519F2 <==nop掉

|
004519CB   E810F6FFFF             call    00450FE0  
004519D0   3BD8                   cmp     ebx, eax  <==nop掉
004519D2   751E                   jnz     004519F2
004519D4   8B15CC504500           mov     edx, [$004550CC]
004519DA   8B8618030000           mov     eax, [esi+$0318]

004519E0   E84FE7FDFF             call    00430134  <==将“恭喜你,注册成功”设置给TLabel
004519E5   33D2                   xor     edx, edx
004519E7   8B860C030000           mov     eax, [esi+$030C]
004519ED   8B08                   mov     ecx, [eax]
004519EF   FF5164                 call    dword ptr [ecx+$64]
004519F2   5E                     pop     esi
004519F3   5B                     pop     ebx
004519F4   C3                     ret

总结:非常差的程序框架设计,主要体现在
1.滥用全局变量,是一个最差的程序设计习惯,在reversing方面很容易让人家找到线索
2.滥用timer,是一种占用系统资源并且非常弱的方法

亮点:1.隐藏了onbottonclick和ontimer事件

如果不是故意安排的,作者在写程序方面可能功力较差,代码罗嗦,在key的算法上我没有完全通读,可能加入了部分混人视线的垃圾代码,但很容易reverse出来,我只有通过输入的key反推回根据name算出的key这步没看懂,我不知道是什么算法,期待作者给予正解。

必须声明的是,我对crack不是很擅长,只是对保护部分感兴趣,可惜还没有看到什么好的保护方式,搞不定是因为自己功力弱
2005-1-31 23:25
0
雪    币: 211
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
哈哈,楼上的利害!

不过timer控件的作用不太明白;由name计算出的key倒推注册码不太可行,因为不是可以简单逆运算的,等待详细解答。
2005-1-31 23:32
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
作为有心人,我只希望作者给提示一下我不明白的地方,也许那个位置再多读一会就看懂了
2005-1-31 23:43
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
13
最初由 dREAMtHEATER 发布
点击“确定”来到这里:

:00451863 E83CF7FFFF call 00450FA4 <==初始化memory block,为 call 004510B4 做准备,已经reverse出来
:00451868 8D55C4 lea edx, dword ptr [ebp-3C]
:0045186B 8B83F8020000 mov eax, dword ptr [ebx+000002F8]
........

老大历害,我的确新学Delphi编程不久,隐藏OnClick事件还是从你文章中学来的。希望以后能得到老大的指点。要至于对用户名和注册码的算法是我自己从密码学理论中自己演变过来的。还有一部分垃圾代码则是混乱视线的,不过对于用全局变量是一个很弱的保护方式倒没想到,呵呵。本来我想利用消息来进行第二次检测注册码的正确,不想使用Timer时间来检测的后来暂时先放弃。
2005-1-31 23:50
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
14
这个CrackMe没有在隐藏方面下功夫(原因是自己功力弱,不懂得如何更好的隐藏) ,只是在比较正确注册码时用了Timer时间作第二次检测。主要的方面还是在算法上,我想看看这个算法容易不容易解密。
2005-2-1 00:25
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最初由 小虾 发布

老大历害,我的确新学Delphi编程不久,隐藏OnClick事件还是从你文章中学来的。希望以后能得到老大的指点。要至于对用户名和注册码的算法是我自己从密码学理论中自己演变过来的。还有一部分垃圾代码则是混乱视线的,不过对于用全局变量是一个很弱的保护方式倒没想到,呵呵。本来我想利用消息来进行第二次检测注册码的正确,不想使用Timer时间来检测的后来暂时先放弃。


这与是否新学delphi无关,我想你用c/C++写的话,估计还是这样写,直白地说,就是程序设计经验非常不足,在帖子题目你说,经过几天的思考和设计,我的CrackMe v0.3终于和大家见面了,其实几天能有什么提高,编程通常是数年甚至十年以上的功夫。
2005-2-1 09:19
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
16
嘿嘿,老大说的是。 我说的经过几天的思考的设计,说的是算法的设计,不是程序上的设计。
2005-2-1 09:23
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
最初由 小虾 发布
这个CrackMe没有在隐藏方面下功夫(原因是自己功力弱,不懂得如何更好的隐藏) ,只是在比较正确注册码时用了Timer时间作第二次检测。主要的方面还是在算法上,我想看看这个算法容易不容易解密。


请楼主解释一下如何由输入的key转为name算出的四个key, 即这段代码,我感兴趣:
:00451920 8BD7                    mov edx, edi
:00451922 8BC6                    mov eax, esi
:00451924 E897FCFFFF              call 004515C0 <== 将转为hex的四个key如果正确通过一定的演算倒推回 name 计算得到的四个对应的key
                                                    我卡在这里了,是自己的算法还是现成的算法,肯定不是密码学的算法?

即这段代码?难道是密码学?什么方法?请说得详细点:
* Referenced by a CALL at Address:
|:00451924   
|
:004515C0 55                      push ebp
:004515C1 8BEC                    mov ebp, esp
:004515C3 83C4F8                  add esp, FFFFFFF8
:004515C6 53                      push ebx
:004515C7 56                      push esi
:004515C8 57                      push edi
:004515C9 8955FC                  mov dword ptr [ebp-04], edx
:004515CC 8BF8                    mov edi, eax
:004515CE C745F88946DF25          mov [ebp-08], 25DF4689
:004515D5 BE01000000              mov esi, 00000001
:004515DA BB48504500              mov ebx, 00455048

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00451672(C)
|
:004515DF 333B                    xor edi, dword ptr [ebx]
:004515E1 81F783547698            xor edi, 98765483
:004515E7 8BC7                    mov eax, edi
:004515E9 3556486598              xor eax, 98654856
:004515EE 0D54934658              or eax, 58469354
:004515F3 C1E005                  shl eax, 05
:004515F6 8BD6                    mov edx, esi
:004515F8 0FAFD6                  imul edx, esi
:004515FB 81C26884C5EB            add edx, EBC58468
:00451601 C1E203                  shl edx, 03
:00451604 33C2                    xor eax, edx
:00451606 51                      push ecx
:00451607 B968000000              mov ecx, 00000068
:0045160C 33D2                    xor edx, edx
:0045160E F7F1                    div ecx
:00451610 59                      pop ecx
:00451611 8BC2                    mov eax, edx
:00451613 8B0485002C4500          mov eax, dword ptr [4*eax+00452C00]
:0045161A 3145FC                  xor dword ptr [ebp-04], eax
:0045161D 330B                    xor ecx, dword ptr [ebx]
:0045161F 81F13884B6ED            xor ecx, EDB68438
:00451625 8BC1                    mov eax, ecx
:00451627 3548893545              xor eax, 45358948
:0045162C 0D64253884              or eax, 84382564
:00451631 C1E003                  shl eax, 03
:00451634 8BD6                    mov edx, esi
:00451636 0FAFD6                  imul edx, esi
:00451639 81C285369845            add edx, 45983685
:0045163F C1E205                  shl edx, 05
:00451642 33C2                    xor eax, edx
:00451644 51                      push ecx
:00451645 B998000000              mov ecx, 00000098
:0045164A 33D2                    xor edx, edx
:0045164C F7F1                    div ecx
:0045164E 59                      pop ecx
:0045164F 8BC2                    mov eax, edx
:00451651 8B0485002C4500          mov eax, dword ptr [4*eax+00452C00]
:00451658 314508                  xor dword ptr [ebp+08], eax
:0045165B 8BC7                    mov eax, edi
:0045165D 8B7DFC                  mov edi, dword ptr [ebp-04]
:00451660 8945FC                  mov dword ptr [ebp-04], eax
:00451663 8BC1                    mov eax, ecx
:00451665 8B4D08                  mov ecx, dword ptr [ebp+08]
:00451668 894508                  mov dword ptr [ebp+08], eax
:0045166B 46                      inc esi
:0045166C 83C304                  add ebx, 00000004
:0045166F 83FE21                  cmp esi, 00000021
:00451672 0F8567FFFFFF            jne 004515DF
:00451678 A124504500              mov eax, dword ptr [00455024]
:0045167D 33C7                    xor eax, edi
:0045167F 0345F8                  add eax, dword ptr [ebp-08]
:00451682 8B1528504500            mov edx, dword ptr [00455028]
:00451688 3355FC                  xor edx, dword ptr [ebp-04]
:0045168B 03C2                    add eax, edx
:0045168D 8B152C504500            mov edx, dword ptr [0045502C]
:00451693 33D1                    xor edx, ecx
:00451695 03C2                    add eax, edx
:00451697 8B1530504500            mov edx, dword ptr [00455030]
:0045169D 335508                  xor edx, dword ptr [ebp+08]
:004516A0 03C2                    add eax, edx
:004516A2 8945F8                  mov dword ptr [ebp-08], eax
:004516A5 8B45F8                  mov eax, dword ptr [ebp-08]
:004516A8 A334504500              mov dword ptr [00455034], eax
:004516AD 893D38504500            mov dword ptr [00455038], edi
:004516B3 8B45FC                  mov eax, dword ptr [ebp-04]
:004516B6 A33C504500              mov dword ptr [0045503C], eax
:004516BB 890D40504500            mov dword ptr [00455040], ecx
:004516C1 8B4508                  mov eax, dword ptr [ebp+08]
:004516C4 A344504500              mov dword ptr [00455044], eax
:004516C9 5F                      pop edi
:004516CA 5E                      pop esi
:004516CB 5B                      pop ebx
:004516CC 59                      pop ecx
:004516CD 59                      pop ecx
:004516CE 5D                      pop ebp
:004516CF C20400                  ret 0004
2005-2-1 09:23
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
如果我搞清楚了,可以马上写出注册机,你得我这次机会,呵呵,记住,只回答我不清楚的地方,我看看到底由多难
2005-2-1 09:25
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
19
呵呵,我将源码你看吧:
Procedure RegSnEn(d1,d2,d3,d4:DWORD);
var tmp, i, j, iCmp:DWORD;
begin
  iCmp := $25df4689;
  For i := 1 to $20 do
  begin
    d1 := d1 xor Key1[i] xor $98765483;
    j := ((d1 xor $98654856 or $58469354) shl 5 xor ((i * i + $ebc58468) shl 3)) mod $68;
    d2 := d2 xor Vod[j];
    d3 := d3 xor Key1[i] xor $edb68438;
    j := ((d3 xor $45358948 or $84382564) shl 3 xor ((i * i + $45983685) shl 5)) mod $98;
    d4 := d4 xor Vod[j];
    tmp := d1;
    d1 := d2;
    d2 := tmp;
    tmp := d3;
    d3 := d4;
    d4 := tmp;
  end;
  iCmp := iCmp + (A xor d1) + (B xor d2) + (C xor d3) + (D xor d4);
  ii := iCmp;
  S1 := d1;
  S2 := d2;
  S3 := d3;
  S4 := d4;
end;
2005-2-1 09:29
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
20
这是解密的一部分:
Procedure RegSnDn(d1,d2,d3,d4:DWORD);
var i, j, tmp:DWORD;
begin
  For i := $20 downto 1 do
  begin
    tmp := d1;
    d1 := d2;
    d2 := tmp;
    tmp := d3;
    d3 := d4;
    d4 := tmp;
    j := ((d3 xor $45358948 or $84382564) shl 3 xor ((i * i + $45983685) shl 5)) mod $98;
    d4 := d4 xor Vod[j];
    d3 := d3 xor $edb68438 xor Key1[i];
    j := ((d1 xor $98654856 or $58469354) shl 5 xor ((i * i + $ebc58468) shl 3)) mod $68;
    d2 := d2 xor Vod[j];
    d1 := d1 xor $98765483 xor Key1[i];
  end;
  b1 := d1;
  b2 := d2;
  b3 := d3;
  b4 := d4;
end;
2005-2-1 09:30
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
告诉我是什么算法,我查一下资料去,因为我查你用的常数,在常用密码学算法里没有!
2005-2-1 09:38
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
22
没什么算法,是我自己想的,这些常数是我自己随便写上去的。这个算法是由从BlowFish算法的原理上来的。
2005-2-1 09:41
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
23
最好把四个注册码框合并成一个,四个框输入很不方便
2005-2-1 09:41
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
24
最初由 hswanfang 发布
最好把四个注册码框合并成一个,四个框输入很不方便
0没办法,这个算法必须使用四个框。
2005-2-1 09:44
0
雪    币: 107
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
我看了半天,算法确实忒多,实在没时间分析了,而且加密用到的常数俺也没见过。于是想爆破,以为nop掉
00451958 751E                    jne 00451978 这句就OK,没想到后边还有一个OnTimer...功亏一篑~~~~

个人觉得要写出注册机确实比较麻烦。

dREAMtHEATER老大是不是很喜欢Dream Theater呢,那得跟你握握手了,能在破解论坛遇到喜欢Progressive Metal的兄弟实在不容易:)
2005-2-1 09:59
0
游客
登录 | 注册 方可回帖
返回
//