老文章档案 · 2003 年

一个CrackMe的破解以及注册机的制作

破解教程 · 算法分析 · 2003-09-15 · 作者:娃娃 人气: · 出处:赢政天下整理收藏)

自从研究CCG的CrackMe之后 便开始对CrackMe这个东西很感兴趣,所以跑到DDXia前辈的主页上逛了一圈准备借鉴

一下别人的优秀思想,完善一下自己正在酝酿中的CrackMe,太难的破不了,太简单的又没有意思,找了一个中等难度的东西Down了下来,回来一看,正好适合写偏教程给初学者讲讲 ^_^ 说不定以后FCG的考试也要用CrackMe了呢

这个东西的注册方法很普遍 就是Name/SN的格式 先进入注册窗口 输入姓名:NYDoll 注册码:38383838 运行TRW下断点BPX HMEMCPY 然后回到程序点击注册按钮,被TRW栏下,清除断点BC * 输入PMODULE到程序领空 然后要按一阵F10之后来到这里:

:004479A6 837DF400 cmp dword ptr [ebp-0C], 00000000

:004479AA 0F8428020000 je 00447BD8

:004479B0 8BB338030000 mov esi, dword ptr [ebx+00000338]

:004479B6 807E0500 cmp byte ptr [esi+05], 00

:004479BA 0F8420010000 je 00447AE0

//省略一部分代码

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:004479BA(C)

|

:00447AE0 33F6 xor esi, esi

:00447AE2 8D55F4 lea edx, dword ptr [ebp-0C]

:00447AE5 8B83D4020000 mov eax, dword ptr [ebx+000002D4]

:00447AEB E868BDFDFF call 00423858

:00447AF0 8B45F4 mov eax, dword ptr [ebp-0C]

:00447AF3 E83CBFFBFF call 00403A34

:00447AF8 85C0 test eax, eax

:00447AFA 7E4B jle 00447B47

:00447AFC 8D55F4 lea edx, dword ptr [ebp-0C]

:00447AFF 8B83D4020000 mov eax, dword ptr [ebx+000002D4]

:00447B05 E84EBDFDFF call 00423858

:00447B0A 8B45F4 mov eax, dword ptr [ebp-0C] //载入用户名

:00447B0D E822BFFBFF call 00403A34

:00447B12 8BF8 mov edi, eax //得到用户名的字符数

:00447B14 85FF test edi, edi //比较用户名是否为空

:00447B16 7C2F jl 00447B47 //跳走就死翘翘了 :(

:00447B18 47 inc edi

:00447B19 C745F800000000 mov [ebp-08], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00447B45(C)

|

:00447B20 8D55F4 lea edx, dword ptr [ebp-0C]

:00447B23 8B83D4020000 mov eax, dword ptr [ebx+000002D4]

:00447B29 E82ABDFDFF call 00423858

:00447B2E 8B45F4 mov eax, dword ptr [ebp-0C] //载入用户名

:00447B31 8B55F8 mov edx, dword ptr [ebp-08] //记录循环次数

:00447B34 0FB64410FF movzx eax, byte ptr [eax+edx-01] //将用户名的第一位以ASCII码形式存到EAX,第一次循环值为零。

:00447B39 03F0 add esi, eax //与上一次循环后得到的累加值相加

:00447B3B 03B314030000 add esi, dword ptr [ebx+00000314] //当前字符的十进制值加上11111

:00447B41 FF45F8 inc [ebp-08]

:00447B44 4F dec edi //计数器

:00447B45 75D9 jne 00447B20 //用户名全部计算完毕则跳走

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:00447AFA(C), :00447B16(C)

|

:00447B47 8D55FC lea edx, dword ptr [ebp-04]

:00447B4A 8BC6 mov eax, esi //将累加值压入EAX寄存器

:00447B4C E857FBFBFF call 004076A8

:00447B51 FFB30C030000 push dword ptr [ebx+0000030C]

:00447B57 FF75FC push [ebp-04]

:00447B5A FFB310030000 push dword ptr [ebx+00000310]

:00447B60 8D45FC lea eax, dword ptr [ebp-04]

:00447B63 BA03000000 mov edx, 00000003

:00447B68 E887BFFBFF call 00403AF4

:00447B6D 8D55F4 lea edx, dword ptr [ebp-0C]

:00447B70 8B83D8020000 mov eax, dword ptr [ebx+000002D8]

:00447B76 E8DDBCFDFF call 00423858

:00447B7B 8B55F4 mov edx, dword ptr [ebp-0C] //EDX中为我输入的注册码

:00447B7E 8B45FC mov eax, dword ptr [ebp-04] //EAX中为刚才循环完后的累加值

:00447B81 E8BEBFFBFF call 00403B44

:00447B86 7528 jne 00447BB0 //如果不相等就死了 :(

//到此为止,整个CrackMe的算法已经完全弄明白了,为了使大家加深印象我再综合的复诉一边:

//举例说明NYDoll是如何产生出正确的注册码78339的

//(1)依次去NYDoll中的字符,并将它以ASCII码的形式保存

//(2)ASCII码的值加上11111,再保存起来

//(3)若用户名没有取完则循环,第二次ASCII码值加上11111的结果和第一次的累加值相加

//(4)若第一次循环,则累加值为11111

//即注册过程的中间数据为:11111+(78+11111)+(89+11111)+(68+11111)+(111+11111)+(108+11111)+(108+11111)

//结果等于78339即为正确的注册码了

By 娃娃(NYDoll)

今天太困了 明天贴注册机! Bye For Now

标 题:加上一个VB的注册机 (5千字)

发信人:NYDoll

时 间:2001-8-17 10:23:26

详细信息:

一个CrackMe的破解以及注册机的制作

自从研究CCG的CrackMe之后 便开始对CrackMe这个东西很感兴趣,所以跑到DDXia前辈的主页上逛了一圈准备借鉴

一下别人的优秀思想,完善一下自己正在酝酿中的CrackMe,太难的破不了,太简单的又没有意思,找了一个中等难度的东西Down了下来,回来一看,正好适合写偏教程给初学者讲讲 ^_^ 说不定以后FCG的考试也要用CrackMe了呢

这个东西的注册方法很普遍 就是Name/SN的格式 先进入注册窗口 输入姓名:NYDoll 注册码:38383838 运行TRW下断点BPX HMEMCPY 然后回到程序点击注册按钮,被TRW栏下,清除断点BC * 输入PMODULE到程序领空 然后要按一阵F10之后来到这里:

:004479A6 837DF400 cmp dword ptr [ebp-0C], 00000000

:004479AA 0F8428020000 je 00447BD8

:004479B0 8BB338030000 mov esi, dword ptr [ebx+00000338]

:004479B6 807E0500 cmp byte ptr [esi+05], 00

:004479BA 0F8420010000 je 00447AE0

//省略一部分代码

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:004479BA(C)

|

:00447AE0 33F6 xor esi, esi

:00447AE2 8D55F4 lea edx, dword ptr [ebp-0C]

:00447AE5 8B83D4020000 mov eax, dword ptr [ebx+000002D4]

:00447AEB E868BDFDFF call 00423858

:00447AF0 8B45F4 mov eax, dword ptr [ebp-0C]

:00447AF3 E83CBFFBFF call 00403A34

:00447AF8 85C0 test eax, eax

:00447AFA 7E4B jle 00447B47

:00447AFC 8D55F4 lea edx, dword ptr [ebp-0C]

:00447AFF 8B83D4020000 mov eax, dword ptr [ebx+000002D4]

:00447B05 E84EBDFDFF call 00423858

:00447B0A 8B45F4 mov eax, dword ptr [ebp-0C] //载入用户名

:00447B0D E822BFFBFF call 00403A34

:00447B12 8BF8 mov edi, eax //得到用户名的字符数

:00447B14 85FF test edi, edi //比较用户名是否为空

:00447B16 7C2F jl 00447B47 //跳走就死翘翘了 :(

:00447B18 47 inc edi

:00447B19 C745F800000000 mov [ebp-08], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00447B45(C)

|

:00447B20 8D55F4 lea edx, dword ptr [ebp-0C]

:00447B23 8B83D4020000 mov eax, dword ptr [ebx+000002D4]

:00447B29 E82ABDFDFF call 00423858

:00447B2E 8B45F4 mov eax, dword ptr [ebp-0C] //载入用户名

:00447B31 8B55F8 mov edx, dword ptr [ebp-08] //记录循环次数

:00447B34 0FB64410FF movzx eax, byte ptr [eax+edx-01] //将用户名的第一位以ASCII码形式存到EAX,第一次循环值为零。

:00447B39 03F0 add esi, eax //与上一次循环后得到的累加值相加

:00447B3B 03B314030000 add esi, dword ptr [ebx+00000314] //当前字符的十进制值加上11111

:00447B41 FF45F8 inc [ebp-08]

:00447B44 4F dec edi //计数器

:00447B45 75D9 jne 00447B20 //用户名全部计算完毕则跳走

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:00447AFA(C), :00447B16(C)

|

:00447B47 8D55FC lea edx, dword ptr [ebp-04]

:00447B4A 8BC6 mov eax, esi //将累加值压入EAX寄存器

:00447B4C E857FBFBFF call 004076A8

:00447B51 FFB30C030000 push dword ptr [ebx+0000030C]

:00447B57 FF75FC push [ebp-04]

:00447B5A FFB310030000 push dword ptr [ebx+00000310]

:00447B60 8D45FC lea eax, dword ptr [ebp-04]

:00447B63 BA03000000 mov edx, 00000003

:00447B68 E887BFFBFF call 00403AF4

:00447B6D 8D55F4 lea edx, dword ptr [ebp-0C]

:00447B70 8B83D8020000 mov eax, dword ptr [ebx+000002D8]

:00447B76 E8DDBCFDFF call 00423858

:00447B7B 8B55F4 mov edx, dword ptr [ebp-0C] //EDX中为我输入的注册码

:00447B7E 8B45FC mov eax, dword ptr [ebp-04] //EAX中为刚才循环完后的累加值

:00447B81 E8BEBFFBFF call 00403B44

:00447B86 7528 jne 00447BB0 //如果不相等就死了 :(

//到此为止,整个CrackMe的算法已经完全弄明白了,为了使大家加深印象我再综合的复诉一边:

//举例说明NYDoll是如何产生出正确的注册码78339的

//(1)依次去NYDoll中的字符,并将它以ASCII码的形式保存

//(2)ASCII码的值加上11111,再保存起来

//(3)若用户名没有取完则循环,第二次ASCII码值加上11111的结果和第一次的累加值相加

//(4)若第一次循环,则累加值为11111

//即注册过程的中间数据为:11111+(78+11111)+(89+11111)+(68+11111)+(111+11111)+(108+11111)+(108+11111)

//结果等于78339即为正确的注册码了

接下来我们来看看要如何编写一个注册机,TC没有图形界面

Private Sub Text1_Change()

Dim c_num, aa, i As Integer '定义变量

Dim a, b, c, d, e '定义变量

c_num = Len(Trim(Text1.Text)) 'c_num指注册名的字符个数

If c_num = 0 Then '若用户名一栏为空则提示

MsgBox ("Enter Your Name First!") '提示信息

Else

For i = 1 To c_num '若填写完毕则开始循环运算

a = Mid(Text1, i, 1) 'a指现在取的一个字符

c = Asc(a) '将用户名依次转换为ASCII码形式

If i = 1 Then

d = c + 11111 + 11111 '第一次循环累计值为11111

Else

d = c + 11111 '用户名的每位的ASCII码值加上11111

End If

e = e + d '将累加值存入变量 E 中

Next i

Text2.Text = e '循环完成后 E中存放的就是真正的注册码了

End If

End Sub (出处:赢政天下整理收藏)

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史