首页
社区
课程
招聘
一个简单的Delphi CRACKME的算法分析(算法很典型,适合新手)[讨论]
发表于: 2006-2-6 21:24 10159

一个简单的Delphi CRACKME的算法分析(算法很典型,适合新手)[讨论]

2006-2-6 21:24
10159

1)PEID检查,Borland Delphi 6.0 - 7.0。无壳
2)试运行,任意输入注册信息后。出现提示:加油。把它当作突破口。
3)OD载入程序,用超级字符串查找:找到
Ultra String Reference, 条目 303
Address=00453884
Disassembly=mov     eax, 004538E4
Text String=加油!
4)双击来到00453884,向上找,找注册过程开始的地方。
  来到这里:
004537FD  |.  55            push    ebp
004537FE  |.  68 BE384500   push    004538BE
00453803  |.  64:FF30       push    dword ptr fs:[eax]
00453806  |.  64:8920       mov     fs:[eax], esp
00453809  |.  8D55 F8       lea     edx, [ebp-8]
0045380C  |.  8B83 00030000 mov     eax, [ebx+300]
00453812  |.  E8 35F2FDFF   call    00432A4C                                           取注册名位数
00453817  |.  8B45 F8       mov     eax, [ebp-8]                                           EBP-8=注册名
0045381A  |.  0FB600        movzx   eax, byte ptr [eax]                                取注册名第一位的ASCII值设为甲
0045381D  |.  83F0 0E       xor     eax, 0E                                                   将甲与0E进XOR运算,结果设为乙
00453820  |.  8945 FC       mov     [ebp-4], eax                                           结果乙进EAX
00453823  |.  8D75 FC       lea     esi, [ebp-4]                                              EBP-4=结果乙
00453826  |.  8D55 F4       lea     edx, [ebp-C]
00453829  |.  8B83 F8020000 mov     eax, [ebx+2F8]
0045382F  |.  E8 18F2FDFF   call    00432A4C                                          取假码位数
00453834  |.  8B45 F4       mov     eax, [ebp-C]                                          EBP-C=假码
00453837  |.  50            push    eax                                                            假码进EAX
00453838  |.  8D55 F0       lea     edx, [ebp-10]
0045383B  |.  8B06          mov     eax, [esi]
0045383D  |.  E8 9E44FBFF   call    00407CE0                                          注意!这个CALL的作用是将上面计算的结果乙转化成十进制设为丙
00453842  |.  8D45 F0       lea     eax, [ebp-10]
00453845  |.  50            push    eax
00453846  |.  8D55 E8       lea     edx, [ebp-18]
00453849  |.  8B83 00030000 mov     eax, [ebx+300]
0045384F  |.  E8 F8F1FDFF   call    00432A4C
00453854  |.  8B45 E8       mov     eax, [ebp-18]
00453857  |.  E8 B008FBFF   call    0040410C
0045385C  |.  8D55 EC       lea     edx, [ebp-14]
0045385F  |.  E8 7C44FBFF   call    00407CE0
00453864  |.  8B55 EC       mov     edx, [ebp-14]
00453867  |.  58            pop     eax
00453868  |.  E8 A708FBFF   call    00404114                    这个CALL的作用是把并与注册名的位数合并成一个字符串
0045386D  |.  8B55 F0       mov     edx, [ebp-10]
00453870  |.  58            pop     eax
00453871  |.  E8 E209FBFF   call    00404258                     真假注册码比较。相等则成功
00453876  |.  75 0C         jnz     short 00453884
00453878  |.  B8 D4384500   mov     eax, 004538D4         ;  恭喜你!
0045387D  |.  E8 EA3AFDFF   call    0042736C
00453882  |.  EB 0A         jmp     short 0045388E
00453884  |>  B8 E4384500   mov     eax, 004538E4         ;  加油!

------------------------------------------------------------------------BY 逍遥风
算法很简单:
1)取注册名第一位的ASCII值,设为甲。
2)将甲与0E做XOR运算,结果设为乙。
3)将乙转化成相应的十进制数。设转换后的结果为丙
4)将丙与注册名的位数相合并,得到的结果既为注册码
例:注册名tcxb
1)取t的ASCII值74
2)74与0E做XOR运算等于7A
3)把7A转化成相应的十进制数等于122
4)在122后面合并上注册名的位数4等于1224
所以:
注册名:tcxb
注册码:1224
*******注意********
也可以用bp GetWindowTextA命令下断
------------------------------------------------------------------------
有疏漏或错误的地方请大家指出,谢谢!


[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
鼓励,适合我等菜鸟
2006-2-9 20:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多学习,就会有进步
2006-2-9 20:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
公务员之路5。1爆破(无限制版本)

【破解作者】 兔八哥(孔子后裔)
【使用工具】 w32dasm,hiew
【破解平台】 Win9x/NT/2000/XP
【软件名称】 公务员之路5。1
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】

最近工作不顺,于是报考公务员的心情有浓厚起来。手头虽然有这方面软件的破解,但是版本比较低,看到新的有见异思迁了。
当然先是看看有没有现成的,后又想研究算法,无奈心浮气躁。现破了在研究吧。
1、用peid检查,有壳,用UnAspack杀掉。
2、w32dasm反汇编,检查没有发现关键跳。倒是找到了没有注册,功能不全等的说明。这里有许多call
:0052ECCC E87BB0F8FF              call 004B9D4C

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0052EB8B(C), :0052EBED(U), :0052EC2F(U), :0052EC41(U), :0052EC83(U)|:0052ECC2(U)            将这些jne全部nop掉                                                                                         
|
:0052ECD1 8D83FC020000            lea eax, dword ptr [ebx+000002FC]
:0052ECD7 BAB8ED5200              mov edx, 0052EDB8
:0052ECDC E8E751EDFF              call 00403EC8

* Possible StringData Ref from Code Obj ->"    本模拟考试部分将从本软件的
考试题库中随机?
                                        ->"槿】际蕴猓?峁?用户测试。

  "
                                        ->"  本模块是兼顾目前中央、地方
各级公务员考试大?
                                        ->"俣??凶酆仙?计的,试卷结构、题型分布、试题
?
                                        ->"谌荨⑻饽渴?考澳岩壮潭染?咏?实际考卷,具有一"
                                        ->"定的参考作用。

    共享版中仅少量试题可供模拟"
                                        ->"
考试,注册版则无此限制。"
                                  |
:0052ECE1 BAC4ED5200              mov edx, 0052EDC4
:0052ECE6 8B83F8020000            mov eax, dword ptr [ebx+000002F8]
:0052ECEC E89F97F0FF              call 00438490
:0052ECF1 33C0                    xor eax, eax
:0052ECF3 5A                      pop edx
:0052ECF4 59                      pop ecx
:0052ECF5 59                      pop ecx
:0052ECF6 648910                  mov dword ptr fs:[eax], edx
:0052ECF9 6813ED5200              push 0052ED13

3、使它显示为注册版。
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00561463(U)
|
:0056147D 8D8518FFFFFF            lea eax, dword ptr [ebp+FFFFFF18]
:00561483 50                      push eax
:00561484 8B45FC                  mov eax, dword ptr [ebp-04]
:00561487 8B8018030000            mov eax, dword ptr [eax+00000318]
:0056148D E8622CEAFF              call 004040F4
:00561492 8BC8                    mov ecx, eax
:00561494 49                      dec ecx
:00561495 8B45FC                  mov eax, dword ptr [ebp-04]
:00561498 8B801C030000            mov eax, dword ptr [eax+0000031C]
:0056149E BA0A000000              mov edx, 0000000A
:005614A3 E8542EEAFF              call 004042FC
:005614A8 8B8518FFFFFF            mov eax, dword ptr [ebp+FFFFFF18]
:005614AE 50                      push eax
:005614AF 8D8514FFFFFF            lea eax, dword ptr [ebp+FFFFFF14]
:005614B5 50                      push eax
:005614B6 8B45FC                  mov eax, dword ptr [ebp-04]
:005614B9 8B8018030000            mov eax, dword ptr [eax+00000318]
:005614BF E8302CEAFF              call 004040F4
:005614C4 8BC8                    mov ecx, eax
:005614C6 49                      dec ecx
:005614C7 8B45FC                  mov eax, dword ptr [ebp-04]
:005614CA 8B8018030000            mov eax, dword ptr [eax+00000318]
:005614D0 BA01000000              mov edx, 00000001
:005614D5 E8222EEAFF              call 004042FC
:005614DA 8B9514FFFFFF            mov edx, dword ptr [ebp+FFFFFF14]
:005614E0 58                      pop eax
:005614E1 E81E2DEAFF              call 00404204
:005614E6 7515                    jne 005614FD   ********************注意这里,修改为nop,就可以了
:005614E8 8B45FC                  mov eax, dword ptr [ebp-04]
:005614EB 8B80D0020000            mov eax, dword ptr [eax+000002D0]

* Possible StringData Ref from Code Obj ->"公务员之路 5.1  注册版"
                                  |
:005614F1 BA441B5600              mov edx, 00561B44
:005614F6 E81D6CF5FF              call 004B8118
:005614FB EB13                    jmp 00561510
4、完成测试,可以,但是还有注册按钮,这个我不知道怎么去掉,反正能用了,就这样吧
--------------------------------------------------------------------------------
【破解总结】
还是爆破速度快!效率高!!!!!

条条大陆通罗马,即使没有传统的关键跳转,照样可以取消程序的限制,要动脑子。我就是懒惰。在这里捶胸顿足发誓,研究算法。
2006-2-9 22:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我要顶的呵呵
2006-2-13 00:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习学习学习!
2006-2-13 23:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我是菜鸟,适合我啊
2006-2-14 16:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好帖子啊
2006-2-14 17:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好..好帖啊.
2006-2-14 18:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
好贴子,学习中
2006-6-25 13:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
T的ASCII  怎么会是74呢。 这个是怎么转换的?  
我查了ASCII   74是J 而不是T啊?
2006-6-25 16:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
表那里旁边还有个没注意到 呵呵。
谢谢你的算法 ,   现在可以了
2006-6-25 17:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
snk
13
哈, 比较适合我们新手啊,谢谢了!
2006-6-26 10:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
snk
14
哈, 比较适合我们新手啊,谢谢了!
2006-6-26 10:16
0
雪    币: 241
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
下载下来,试试
2006-6-26 18:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
算法还看得懂
2006-6-28 14:11
0
雪    币: 205
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
算法我是看不懂,要么爆,要么动态跟,我怎么才能提高啊?
NAME :  zjxte75
SERRAL: 1167
2006-7-5 21:52
0
游客
登录 | 注册 方可回帖
返回
//