-
-
MGuard(记忆之门) V1.0 注册算法分析
-
发表于: 2005-4-16 15:50 7103
-
MGuard(记忆之门) V1.0 注册算法分析
日期:2005年4月16日 破解人:Baby2008
―――――――――――――――――――――――――――――――――――――――――――
【软件名称】:MGuard(记忆之门) V1.0
【软件大小】:2213 KB
【下载地址】:天空软件站2005.04.15 http://www1.skycn.com/soft/22764.html
或作者老家 http://www.fd-soft.com/
【软件简介】:
MGuard(记忆之门)个人版是一款个人资料库的构建和规划工具。
主要功能:
1.轻松保存自己喜欢网页;不仅可以保存当前正在浏览的整个网页内容,而且可以保存网页中的图片、Flash动画,还可以根据需要保存选
择的部分内容。
2.高效方便的资料管理功能;可以像资源管理器一样针对各种类型的资料文件分类整理,提供对目录和文件进行“新增、删除、重命名、
移动”等基本功能轻松管理自己的学习资料。
3.整合CHM帮助文档,定制自己的“MSDN”;可以将CHM帮助文档按照目录结构完整导入到软件中,使用软件的管理功能可以方便实现多个
CHM格式文档的整合功能,而且查找浏览资料就像使用MSDN一样方便快捷。
4.强大的导入导出功能方便交流;可以将一个目录单独导出为本软件支持的电子书格式,和朋友、同行分享自己的知识资料。得到其他人
分享的电子书后,只需导入到自己的资料库中就可以轻松阅读。另外软件还支持所有文件格式的导入导出,资料搜集整理更方便。
5.集编辑浏览于一身的浏览器;使用软件内部集成的浏览器,可以像IE等浏览器一样网上冲浪,利用编辑功能,可以对保存下来的网页进
行修饰,直到达到自己预期的效果。
6.索引、书签、搜索功能更方便阅读;浏览资料时可以通过索引、书签、搜索等多种方式快速查找自己需要的资料,为您节省更多的宝贵
时间。
【保护方式】:注册码保护
【破解声明】:初学Crack,只是感兴趣,失误之处敬请诸位大侠赐教!
【破解工具】:OllyDbg.V1.10 聆风听雨汉化第二版、PeID 0.93
―――――――――――――――――――――――――――――――――――――――――――
【破解过程】:
先用PEID 0.93汉化增强版查壳,Microsoft Visual C++ 7.0 Method2 [Debug],OD直接载入lover.exe,F9运行,输入注册信息,注册名:
Baby2008,电子邮箱:jw6y8@21cn.com,注册码:1234567890,插件查找参考字符串“注册失败!请查验……”,双击,向上查找来到:
------------------------------------------------------------------------------------------------------
004142B0 . 6A FF push -1
004142B2 . 68 286A4200 push Lover.00426A28 ; SE 句柄安装
004142B7 . 64:A1 00000000 mov eax,dword ptr fs:[0]
004142BD . 50 push eax
004142BE . 64:8925 00000000 mov dword ptr fs:[0],esp
004142C5 . 83EC 64 sub esp,64
004142C8 . A1 B0544300 mov eax,dword ptr ds:[4354B0]
004142CD . 56 push esi
004142CE . 894424 64 mov dword ptr ss:[esp+64],eax
004142D2 . 8BF1 mov esi,ecx
004142D4 . E8 97FDFFFF call Lover.00414070 ; 注册信息完整性校验
004142D9 . 85C0 test eax,eax
004142DB . 0F84 CE000000 je Lover.004143AF
004142E1 . 57 push edi
004142E2 . 33C0 xor eax,eax
004142E4 . B9 16000000 mov ecx,16
004142E9 . 8D7C24 0C lea edi,dword ptr ss:[esp+C]
004142ED . F3:AB rep stos dword ptr es:[edi]
004142EF . 8D4E 74 lea ecx,dword ptr ds:[esi+74]
004142F2 . AA stos byte ptr es:[edi]
004142F3 . FF15 F08A4200 call dword ptr ds:[<&MFC71.#876_ATL::CSimpleSt>; MFC71.7C158BCD
004142F9 . 8D5424 21 lea edx,dword ptr ss:[esp+21]
004142FD . 5F pop edi
004142FE . 8BFF mov edi,edi
00414300 > 8A08 mov cl,byte ptr ds:[eax]
00414302 . 40 inc eax
00414303 . 880A mov byte ptr ds:[edx],cl
00414305 . 42 inc edx
00414306 . 84C9 test cl,cl
00414308 .^ 75 F6 jnz short Lover.00414300
0041430A . 8D4E 7C lea ecx,dword ptr ds:[esi+7C]
0041430D . FF15 F08A4200 call dword ptr ds:[<&MFC71.#876_ATL::CSimpleSt>; MFC71.7C158BCD
00414313 . 8D5424 4F lea edx,dword ptr ss:[esp+4F]
00414317 > 8A08 mov cl,byte ptr ds:[eax]
00414319 . 40 inc eax
0041431A . 880A mov byte ptr ds:[edx],cl
0041431C . 42 inc edx
0041431D . 84C9 test cl,cl
0041431F .^ 75 F6 jnz short Lover.00414317
00414321 . 8D4E 78 lea ecx,dword ptr ds:[esi+78]
00414324 . FF15 F08A4200 call dword ptr ds:[<&MFC71.#876_ATL::CSimpleSt>; MFC71.7C158BCD
0041432A . 8D5424 08 lea edx,dword ptr ss:[esp+8]
0041432E . 8BFF mov edi,edi
00414330 > 8A08 mov cl,byte ptr ds:[eax]
00414332 . 40 inc eax
00414333 . 880A mov byte ptr ds:[edx],cl
00414335 . 42 inc edx
00414336 . 84C9 test cl,cl
00414338 .^ 75 F6 jnz short Lover.00414330
0041433A . 8D4C24 04 lea ecx,dword ptr ss:[esp+4]
0041433E . E8 7D980000 call Lover.0041DBC0
00414343 . 8D4424 08 lea eax,dword ptr ss:[esp+8] ; 用户名
00414347 . 50 push eax
00414348 . 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
0041434C . C74424 74 000000>mov dword ptr ss:[esp+74],0
00414354 . E8 A7E9FEFF call Lover.00402D00 ; 注册校验,关键跟进
00414359 . 85C0 test eax,eax
0041435B . 74 2E je short Lover.0041438B ; 爆破点
0041435D . 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
00414361 . 51 push ecx
00414362 . B9 A45B4300 mov ecx,Lover.00435BA4
00414367 . E8 74BC0000 call Lover.0041FFE0
0041436C . 6A 40 push 40
0041436E . 68 548D4200 push Lover.00428D54
00414373 . 68 B4BA4200 push Lover.0042BAB4
00414378 . 8BCE mov ecx,esi
0041437A . E8 F9FF0000 call <jmp.&MFC71.#4104_CWnd::MessageBoxA>
0041437F . 8B16 mov edx,dword ptr ds:[esi]
00414381 . 8BCE mov ecx,esi
00414383 . FF92 54010000 call dword ptr ds:[edx+154]
00414389 . EB 13 jmp short Lover.0041439E
0041438B > 6A 30 push 30
0041438D . 68 548D4200 push Lover.00428D54
00414392 . 68 94BA4200 push Lover.0042BA94 ; 注册失败!请……
00414397 . 8BCE mov ecx,esi
00414399 . E8 DAFF0000 call <jmp.&MFC71.#4104_CWnd::MessageBoxA>
0041439E > 8D4C24 04 lea ecx,dword ptr ss:[esp+4]
004143A2 . C74424 70 FFFFFF>mov dword ptr ss:[esp+70],-1
004143AA . E8 A1E9FEFF call Lover.00402D50
004143AF > 8B4C24 68 mov ecx,dword ptr ss:[esp+68]
004143B3 . 64:890D 00000000 mov dword ptr fs:[0],ecx
004143BA . 8B4C24 64 mov ecx,dword ptr ss:[esp+64]
004143BE . 5E pop esi
004143BF . E8 2D090100 call Lover.00424CF1
004143C4 . 83C4 70 add esp,70
004143C7 . C3 retn
------------------------------------------------------------------------------------------------------
程序通过call Lover.00414070 校验注册信息的完整性,调用函数call Lover.00402D00 验证注册码,关键,跟进
------------------------------------------------------------------------------------------------------
00402D00 /$ 56 push esi
00402D01 |. 8B7424 08 mov esi,dword ptr ss:[esp+8] ; 用户名
00402D05 |. 57 push edi
00402D06 |. 8D46 15 lea eax,dword ptr ds:[esi+15] ; 电子信箱
00402D09 |. 50 push eax ; /Arg3
00402D0A |. 56 push esi ; |Arg2
00402D0B |. 8D5424 14 lea edx,dword ptr ss:[esp+14] ; |
00402D0F |. 52 push edx ; |Arg1
00402D10 |. 33FF xor edi,edi ; |
00402D12 |. E8 C9FCFFFF call Lover.004029E0 ; \Lover.004029E0
00402D17 |. 83C6 47 add esi,47
00402D1A |. 56 push esi ; 试炼码
00402D1B |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10] ; 真正注册码
00402D1F |. FF15 F48A4200 call dword ptr ds:[<&MFC71.#1482_ATL::CStringT>; _mbscmp 比较函数
00402D25 |. 85C0 test eax,eax
00402D27 |. 75 05 jnz short Lover.00402D2E
00402D29 |. BF 01000000 mov edi,1 ; 置注册成功标志
00402D2E |> 8D4C24 0C lea ecx,dword ptr ss:[esp+C]
00402D32 |. FF15 FC8A4200 call dword ptr ds:[<&MFC71.#578_ATL::CStringT<>; MFC71.7C1771B1
00402D38 |. 8BC7 mov eax,edi ; 函数返回1,注册成功
00402D3A |. 5F pop edi
00402D3B |. 5E pop esi
00402D3C |. C2 0400 retn 4
------------------------------------------------------------------------------------------------------
通过call Lover.004029E0产生注册码,并同试练码明码比较,一致置注册成功标志! 经典^_^
------------------------------------------------------------------------------------------------------
004029E0 /$ 6A FF push -1
004029E2 |. 68 11564200 push Lover.00425611 ; SE 句柄安装
004029E7 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
004029ED |. 50 push eax
004029EE |. 64:8925 00000000 mov dword ptr fs:[0],esp
004029F5 |. 83EC 1C sub esp,1C
004029F8 |. 53 push ebx
004029F9 |. 55 push ebp
004029FA |. 56 push esi
004029FB |. 57 push edi
004029FC |. 33F6 xor esi,esi
004029FE |. 68 C08D4200 push Lover.00428DC0
00402A03 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
00402A07 |. 897424 2C mov dword ptr ss:[esp+2C],esi
00402A0B |. FF15 B88A4200 call dword ptr ds:[<&MFC71.#304_ATL::CStringT<>; MFC71.7C16A59C
00402A11 |. 8B4424 40 mov eax,dword ptr ss:[esp+40] ; 用户名
00402A15 |. 50 push eax
00402A16 |. 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
00402A1A |. 897424 38 mov dword ptr ss:[esp+38],esi
00402A1E |. FF15 B88A4200 call dword ptr ds:[<&MFC71.#304_ATL::CStringT<>; MFC71.7C16A59C
00402A24 |. 8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
00402A28 |. C64424 34 01 mov byte ptr ss:[esp+34],1
00402A2D |. FF15 C48A4200 call dword ptr ds:[<&MFC71.#2902_ATL::CSimpleS>; Length
00402A33 |. 83E8 04 sub eax,4 ; Eax=用户名长度-4
00402A36 |. 50 push eax
00402A37 |. 8D4C24 44 lea ecx,dword ptr ss:[esp+44] ; 用户名
00402A3B |. 51 push ecx
00402A3C |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24] ; 用户名
00402A40 |. FF15 C88A4200 call dword ptr ds:[<&MFC71.#5563_ATL::CStringT>; MFC71.7C188DED
00402A46 |. 50 push eax ; 用户名去前4位
00402A47 |. 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
00402A4B |. C64424 38 02 mov byte ptr ss:[esp+38],2
00402A50 |. FF15 CC8A4200 call dword ptr ds:[<&MFC71.#781_ATL::CStringT<>; MFC71.7C150F15
00402A56 |. 8D4C24 40 lea ecx,dword ptr ss:[esp+40]
00402A5A |. C64424 34 01 mov byte ptr ss:[esp+34],1
00402A5F |. FF15 FC8A4200 call dword ptr ds:[<&MFC71.#578_ATL::CStringT<>; MFC71.7C1771B1
00402A65 |. 8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
00402A69 |. FF15 F08A4200 call dword ptr ds:[<&MFC71.#876_ATL::CSimpleSt>; MFC71.7C158BCD
00402A6F |. 8B2D 6C8B4200 mov ebp,dword ptr ds:[<&MSVCR71.atol>] ; MSVCR71.atol
00402A75 |. 50 push eax ; /s
00402A76 |. FFD5 call ebp ; \atol(注册名去前4位)
00402A78 |. 8B5424 48 mov edx,dword ptr ss:[esp+48] ; Email
00402A7C |. 83C4 04 add esp,4
00402A7F |. 52 push edx ; Email
00402A80 |. 8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
00402A84 |. 894424 2C mov dword ptr ss:[esp+2C],eax
00402A88 |. FF15 B88A4200 call dword ptr ds:[<&MFC71.#304_ATL::CStringT<>; MFC71.7C16A59C
00402A8E |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00402A92 |. C64424 34 03 mov byte ptr ss:[esp+34],3
00402A97 |. FF15 EC8A4200 call dword ptr ds:[<&MFC71.#4081_ATL::CStringT>; MFC71.7C189FC8
00402A9D |. 68 C08D4200 push Lover.00428DC0
00402AA2 |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00402AA6 |. FF15 B88A4200 call dword ptr ds:[<&MFC71.#304_ATL::CStringT<>; MFC71.7C16A59C
00402AAC |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
00402AB0 |. FF15 E48A4200 call dword ptr ds:[<&MFC71.#310_ATL::CStringT<>; MFC71.7C173199
00402AB6 |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18] ; Email
00402ABA |. C64424 34 05 mov byte ptr ss:[esp+34],5
00402ABF |. FF15 C48A4200 call dword ptr ds:[<&MFC71.#2902_ATL::CSimpleS>; Length
00402AC5 |. 85C0 test eax,eax ; Eax=Email长度
00402AC7 |. 7E 47 jle short Lover.00402B10
00402AC9 |. 8DA424 00000000 lea esp,dword ptr ss:[esp]
00402AD0 |> 56 /push esi
00402AD1 |. 8D4C24 1C |lea ecx,dword ptr ss:[esp+1C] ; Email
00402AD5 |. FF15 A48A4200 |call dword ptr ds:[<&MFC71.#865_ATL::CSimpleS>; MFC71.7C1894E7
00402ADB |. 0FBEC0 |movsx eax,al ; 取字符 Email[i]
00402ADE |. 50 |push eax
00402ADF |. 8D4424 28 |lea eax,dword ptr ss:[esp+28]
00402AE3 |. 68 BC904200 |push Lover.004290BC ; ASCII "%d"
00402AE8 |. 50 |push eax
00402AE9 |. FF15 888A4200 |call dword ptr ds:[<&MFC71.#2322_ATL::CString>; MFC71.7C146A9D
00402AEF |. 83C4 0C |add esp,0C
00402AF2 |. 8D4C24 24 |lea ecx,dword ptr ss:[esp+24]
00402AF6 |. 51 |push ecx
00402AF7 |. 8D4C24 18 |lea ecx,dword ptr ss:[esp+18]
00402AFB |. FF15 A88A4200 |call dword ptr ds:[<&MFC71.#907_ATL::CStringT>; MFC71.7C14E599
00402B01 |. 8D4C24 18 |lea ecx,dword ptr ss:[esp+18]
00402B05 |. 46 |inc esi
00402B06 |. FF15 C48A4200 |call dword ptr ds:[<&MFC71.#2902_ATL::CSimple>; MFC71.7C146AB0
00402B0C |. 3BF0 |cmp esi,eax
00402B0E |.^ 7C C0 \jl short Lover.00402AD0 ; 循环将Email转换成10进制字符串,记为Estr
00402B10 |> 6A 09 push 9 ; 9
00402B12 |. 8D5424 14 lea edx,dword ptr ss:[esp+14]
00402B16 |. 52 push edx
00402B17 |. 8D4C24 1C lea ecx,dword ptr ss:[esp+1C] ; Estr
00402B1B |. FF15 D88A4200 call dword ptr ds:[<&MFC71.#3997_ATL::CStringT>; MFC71.7C188E36
00402B21 |. B3 06 mov bl,6
00402B23 |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00402B27 |. 885C24 34 mov byte ptr ss:[esp+34],bl
00402B2B |. FF15 F08A4200 call dword ptr ds:[<&MFC71.#876_ATL::CSimpleSt>; MFC71.7C158BCD
00402B31 |. 50 push eax ; /Estr 前9位
00402B32 |. FFD5 call ebp ; \atol
00402B34 |. 83C4 04 add esp,4
00402B37 |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
00402B3B |. 8BF8 mov edi,eax
00402B3D |. BE 09000000 mov esi,9
00402B42 |. FF15 C48A4200 call dword ptr ds:[<&MFC71.#2902_ATL::CSimpleS>; GetLength
00402B48 |. 3BC6 cmp eax,esi ; Eax=Estr长度 Esi=9
00402B4A |. 7E 70 jle short Lover.00402BBC ; <=9
00402B4C |. 8D6424 00 lea esp,dword ptr ss:[esp]
00402B50 |> 8D4C24 40 /lea ecx,dword ptr ss:[esp+40]
00402B54 |. FF15 E48A4200 |call dword ptr ds:[<&MFC71.#310_ATL::CStringT>; MFC71.7C173199
00402B5A |. 6A 09 |push 9
00402B5C |. 56 |push esi
00402B5D |. 8D4424 4C |lea eax,dword ptr ss:[esp+4C]
00402B61 |. 50 |push eax
00402B62 |. 8D4C24 20 |lea ecx,dword ptr ss:[esp+20]
00402B66 |. C64424 40 07 |mov byte ptr ss:[esp+40],7
00402B6B |. FF15 7C8A4200 |call dword ptr ds:[<&MFC71.#4109_ATL::CString>; MFC71.7C188D88
00402B71 |. 50 |push eax
00402B72 |. 8D4C24 44 |lea ecx,dword ptr ss:[esp+44]
00402B76 |. C64424 38 08 |mov byte ptr ss:[esp+38],8
00402B7B |. FF15 CC8A4200 |call dword ptr ds:[<&MFC71.#781_ATL::CStringT>; MFC71.7C150F15
00402B81 |. 8D4C24 44 |lea ecx,dword ptr ss:[esp+44]
00402B85 |. FF15 FC8A4200 |call dword ptr ds:[<&MFC71.#578_ATL::CStringT>; MFC71.7C1771B1
00402B8B |. 8D4C24 40 |lea ecx,dword ptr ss:[esp+40]
00402B8F |. FF15 F08A4200 |call dword ptr ds:[<&MFC71.#876_ATL::CSimpleS>; MFC71.7C158BCD
00402B95 |. 50 |push eax ; /s
00402B96 |. FFD5 |call ebp ; \atol
00402B98 |. 83C4 04 |add esp,4
00402B9B |. 8D4C24 40 |lea ecx,dword ptr ss:[esp+40]
00402B9F |. 33F8 |xor edi,eax ; xor 上次计算结果
00402BA1 |. 885C24 34 |mov byte ptr ss:[esp+34],bl
00402BA5 |. FF15 FC8A4200 |call dword ptr ds:[<&MFC71.#578_ATL::CStringT>; MFC71.7C1771B1
00402BAB |. 8D4C24 14 |lea ecx,dword ptr ss:[esp+14]
00402BAF |. 83C6 09 |add esi,9
00402BB2 |. FF15 C48A4200 |call dword ptr ds:[<&MFC71.#2902_ATL::CSimple>; MFC71.7C146AB0
00402BB8 |. 3BF0 |cmp esi,eax
00402BBA |.^ 7C 94 \jl short Lover.00402B50
00402BBC |> 337C24 28 xor edi,dword ptr ss:[esp+28] ; xor 用户名去前4位的值
00402BC0 |. 57 push edi
00402BC1 |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14] ; Email计算结果,记为SUM
00402BC5 |. 68 BC904200 push Lover.004290BC ; ASCII "%d"
00402BCA |. 51 push ecx
00402BCB |. FF15 888A4200 call dword ptr ds:[<&MFC71.#2322_ATL::CStringT>; MFC71.7C146A9D
00402BD1 |. 8B1D 688B4200 mov ebx,dword ptr ds:[<&MSVCR71.atoi>] ; MSVCR71.atoi
00402BD7 |. 83C4 0C add esp,0C
00402BDA |. BD 01000000 mov ebp,1
00402BDF |. 33FF xor edi,edi
00402BE1 |> 8D4C24 10 /lea ecx,dword ptr ss:[esp+10]
00402BE5 |. FF15 C48A4200 |call dword ptr ds:[<&MFC71.#2902_ATL::CSimple>; GetLength
00402BEB |. 3BF8 |cmp edi,eax
00402BED |. 7D 61 |jge short Lover.00402C50
00402BEF |. 85ED |test ebp,ebp ; 区分奇偶位
00402BF1 |. 6A 01 |push 1
00402BF3 |. 8D4C24 14 |lea ecx,dword ptr ss:[esp+14] ; 计算结果
00402BF7 |. 57 |push edi
00402BF8 |. 74 2A |je short Lover.00402C24
00402BFA |. 8D5424 48 |lea edx,dword ptr ss:[esp+48] ; 保存注册码
00402BFE |. 52 |push edx
00402BFF |. FF15 7C8A4200 |call dword ptr ds:[<&MFC71.#4109_ATL::CString>; MFC71.7C188D88
00402C05 |. 8BC8 |mov ecx,eax
00402C07 |. FF15 F08A4200 |call dword ptr ds:[<&MFC71.#876_ATL::CSimpleS>; MFC71.7C158BCD
00402C0D |. 50 |push eax ; /s
00402C0E |. FFD3 |call ebx ; \atoi
00402C10 |. 8BF0 |mov esi,eax ; 分别取SUM[i]
00402C12 |. 83C4 04 |add esp,4
00402C15 |. 8D4C24 40 |lea ecx,dword ptr ss:[esp+40]
00402C19 |. 83C6 41 |add esi,41 ; SUM[i]+41
00402C1C |. FF15 FC8A4200 |call dword ptr ds:[<&MFC71.#578_ATL::CStringT>; MFC71.7C1771B1
00402C22 |. EB 38 |jmp short Lover.00402C5C
00402C24 |> 8D4424 4C |lea eax,dword ptr ss:[esp+4C]
00402C28 |. 50 |push eax
00402C29 |. FF15 7C8A4200 |call dword ptr ds:[<&MFC71.#4109_ATL::CString>; MFC71.7C188D88
00402C2F |. 8BC8 |mov ecx,eax
00402C31 |. FF15 F08A4200 |call dword ptr ds:[<&MFC71.#876_ATL::CSimpleS>; MFC71.7C158BCD
00402C37 |. 50 |push eax ; /s
00402C38 |. FFD3 |call ebx ; \atoi
00402C3A |. BE 5A000000 |mov esi,5A ; $5A
00402C3F |. 83C4 04 |add esp,4
00402C42 |. 8D4C24 44 |lea ecx,dword ptr ss:[esp+44]
00402C46 |. 2BF0 |sub esi,eax ; $5A-SUM[i]
00402C48 |. FF15 FC8A4200 |call dword ptr ds:[<&MFC71.#578_ATL::CStringT>; MFC71.7C1771B1
00402C4E |. EB 0C |jmp short Lover.00402C5C
00402C50 |> 8BF5 |mov esi,ebp
00402C52 |. F7DE |neg esi ; 求补指令
00402C54 |. 1BF6 |sbb esi,esi
00402C56 |. 83E6 E7 |and esi,FFFFFFE7
00402C59 |. 83C6 5A |add esi,5A
00402C5C |> 56 |push esi
00402C5D |. 8D4C24 24 |lea ecx,dword ptr ss:[esp+24]
00402C61 |. FF15 808A4200 |call dword ptr ds:[<&MFC71.#908_ATL::CStringT>; MFC71.7C18B24E
00402C67 |. 83FF 03 |cmp edi,3
00402C6A |. 75 0F |jnz short Lover.00402C7B
00402C6C |. 68 B8904200 |push Lover.004290B8
00402C71 |. 8D4C24 24 |lea ecx,dword ptr ss:[esp+24]
00402C75 |. FF15 AC8A4200 |call dword ptr ds:[<&MFC71.#911_ATL::CStringT>; MFC71.7C14E587
00402C7B |> 33C9 |xor ecx,ecx
00402C7D |. 85ED |test ebp,ebp
00402C7F |. 0F94C1 |sete cl
00402C82 |. 47 |inc edi
00402C83 |. 83FF 09 |cmp edi,9 ; *注册码位数*
00402C86 |. 8BE9 |mov ebp,ecx
00402C88 |.^ 0F8C 53FFFFFF \jl Lover.00402BE1 ; 循环产生注册码
00402C8E |. 8B7424 3C mov esi,dword ptr ss:[esp+3C]
00402C92 |. 8D5424 20 lea edx,dword ptr ss:[esp+20]
00402C96 |. 52 push edx
00402C97 |. 8BCE mov ecx,esi
00402C99 |. FF15 B08A4200 call dword ptr ds:[<&MFC71.#297_ATL::CStringT<>; MFC71.7C14E575
00402C9F |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00402CA3 |. FF15 FC8A4200 call dword ptr ds:[<&MFC71.#578_ATL::CStringT<>; MFC71.7C1771B1
00402CA9 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
00402CAD |. FF15 FC8A4200 call dword ptr ds:[<&MFC71.#578_ATL::CStringT<>; MFC71.7C1771B1
00402CB3 |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
00402CB7 |. FF15 FC8A4200 call dword ptr ds:[<&MFC71.#578_ATL::CStringT<>; MFC71.7C1771B1
00402CBD |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00402CC1 |. FF15 FC8A4200 call dword ptr ds:[<&MFC71.#578_ATL::CStringT<>; MFC71.7C1771B1
00402CC7 |. 8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
00402CCB |. FF15 FC8A4200 call dword ptr ds:[<&MFC71.#578_ATL::CStringT<>; MFC71.7C1771B1
00402CD1 |. 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
00402CD5 |. FF15 FC8A4200 call dword ptr ds:[<&MFC71.#578_ATL::CStringT<>; MFC71.7C1771B1
00402CDB |. 8B4C24 2C mov ecx,dword ptr ss:[esp+2C]
00402CDF |. 5F pop edi
00402CE0 |. 8BC6 mov eax,esi
00402CE2 |. 5E pop esi
00402CE3 |. 5D pop ebp
00402CE4 |. 5B pop ebx
00402CE5 |. 64:890D 00000000 mov dword ptr fs:[0],ecx
00402CEC |. 83C4 28 add esp,28
00402CEF \. C2 0C00 retn 0C
------------------------------------------------------------------------------------------------------
这里可是产生注册码的地方哦!
【算法总结】:
1、取用户名后面部分(去除前4位),转换为长整型数Long
2、循环将Email转换为10进制字符串,记为Estr
3、将Estr以长度9为单位,分别转换成long,并相互XOR,计算结果 XOR 用户名计算结果,记为SUM
4、i=1 to 9
假如Sun长度>=9 ,注册码奇数位=Sum[i]+$41,偶数位=$5A-Sum[i]
假如Sun长度<9,注册码奇数位='A',偶数位='Z'
5、注册码第5位固定为'-'。
Delphi 7.0 注册机源代码表示如下:
Procedure TForm1.btn3Click(Sender: TObject);
Var
Name, Email, EStr, SerialNo: String;
i, Sum: Integer;
Begin
//信息不完整
Name := edt1.Text;
Email := edt2.Text;
If (Length(edt1.Text) = 0) Or (Length(edt2.Text) = 0) Then Exit;
Sum := 0;
For i := 1 To Length(Email) Do EStr := EStr + IntToStr(Ord(Email[i]));
For i := 1 To Length(EStr) Div 9 Do Sum := Sum Xor StrToIntDef(Copy(EStr, (i - 1) * 9 + 1, 9), 0);
Sum := Sum Xor StrToIntDef(RightStr(EStr, Length(EStr) Mod 9), 0);
EStr := IntToStr(Sum Xor StrToIntDef(RightStr(Name, Length(Name) - 4), 0));
For i := 1 To 9 Do
Begin
If Length(EStr) >= i Then
Begin
If i Mod 2 = 1 Then
SerialNo := SerialNo + Char(StrToIntDef(EStr[i], 0) + $41)
Else
SerialNo := SerialNo + Char($5A - StrToIntDef(EStr[i], 0));
End
Else
Begin
If i Mod 2 = 1 Then
SerialNo := SerialNo + 'A'
Else
SerialNo := SerialNo + 'Z';
End;
If i = 4 Then SerialNo := SerialNo + '-';
End;
edt3.Text := SerialNo;
End;
用户名:baby2008
电子邮箱:jw6y8@21cn.com
注册码:IWBU-AZFZB
注册信息保存在:HKEY_CURRENT_USER\Software\AYCD\Option ,删除可重新注册。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!