- UID
- 59317
注册时间2009-1-28
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 无聊 2024-1-15 22:57 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
【破文标题】Ez-Architect 5.0算法分析及算法注册机【初级】
【破文作者】zaas[PYG]
【破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【更新时间】2010-8-29
【软件类别】国外软件/CAD
【软件语言】英文
【应用平台】WinXP/2000/2003/Vista
【软件性质】共享(收费)软件
【软件大小】13.88MB
【保护方式】注册码
【软件简介】家居设计软件已趋于复杂,有时候我们只是想设计平面。这个二维的家居设计和平面布置图软件,可以很方便的设计住宅、室内平面图。
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享
【破解说明】算法很简单,初级。。
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
查壳:peid查不出。但OD载入发现其实就是VC++的程序
**************************************************************
很久没分析算法了。手有点生。这是一个相对专业的软件。国内基本没有人使用。。
把注意力防在算法上吧。运行软件,点注册。需要输入5组注册码。输入假码1234-1234-1234-1234-1234。
下断不必说了,搜字符串就可以。直接来到关键call。- 004A4B40 /> \55 push ebp
- 004A4B41 |. 8BEC mov ebp, esp
- 004A4B43 |. 81EC 3C020000 sub esp, 23C
- 004A4B49 |. 56 push esi
- 004A4B4A |. 57 push edi
- 004A4B4B |. 51 push ecx
- 004A4B4C |. 8DBD C4FDFFFF lea edi, dword ptr [ebp-23C]
- 004A4B52 |. B9 8F000000 mov ecx, 8F
- 004A4B57 |. B8 CCCCCCCC mov eax, CCCCCCCC
- 004A4B5C |. F3:AB rep stos dword ptr es:[edi]
- 004A4B5E |. 59 pop ecx
- 004A4B5F |. A1 C8115300 mov eax, dword ptr [5311C8]
- 004A4B64 |. 33C5 xor eax, ebp
- 004A4B66 |. 8945 FC mov dword ptr [ebp-4], eax
- 004A4B69 |. 894D F8 mov dword ptr [ebp-8], ecx
- 004A4B6C |. 6A 01 push 1
- 004A4B6E |. 8B4D F8 mov ecx, dword ptr [ebp-8]
- 004A4B71 |. E8 487F0100 call <jmp.&MFC80UD.#8622>
- 004A4B76 |. 8B45 F8 mov eax, dword ptr [ebp-8]
- 004A4B79 |. 83C0 74 add eax, 74
- 004A4B7C |. 8BF4 mov esi, esp
- 004A4B7E |. 50 push eax
- 004A4B7F |. FF15 4C825300 call dword ptr [<&MSVCR80D._wtoi>] ; MSVCR80D._wtoi
- 004A4B85 |. 83C4 04 add esp, 4 ; 第一组
- 004A4B88 |. 3BF4 cmp esi, esp
- 004A4B8A |. E8 E18F0100 call 004BDB70
- 004A4B8F |. 8985 ECFDFFFF mov dword ptr [ebp-214], eax
- 004A4B95 |. 8B4D F8 mov ecx, dword ptr [ebp-8]
- 004A4B98 |. 83C1 7C add ecx, 7C
- 004A4B9B |. 8BF4 mov esi, esp
- 004A4B9D |. 51 push ecx
- 004A4B9E |. FF15 4C825300 call dword ptr [<&MSVCR80D._wtoi>] ; MSVCR80D._wtoi
- 004A4BA4 |. 83C4 04 add esp, 4 ; 第二组
- 004A4BA7 |. 3BF4 cmp esi, esp
- 004A4BA9 |. E8 C28F0100 call 004BDB70
- 004A4BAE |. 8985 E8FDFFFF mov dword ptr [ebp-218], eax
- 004A4BB4 |. 8B55 F8 mov edx, dword ptr [ebp-8]
- 004A4BB7 |. 81C2 84000000 add edx, 84
- 004A4BBD |. 8BF4 mov esi, esp
- 004A4BBF |. 52 push edx
- 004A4BC0 |. FF15 4C825300 call dword ptr [<&MSVCR80D._wtoi>] ; MSVCR80D._wtoi
- 004A4BC6 |. 83C4 04 add esp, 4 ; 第三组
- 004A4BC9 |. 3BF4 cmp esi, esp
- 004A4BCB |. E8 A08F0100 call 004BDB70
- 004A4BD0 |. 8985 E4FDFFFF mov dword ptr [ebp-21C], eax
- 004A4BD6 |. 8B45 F8 mov eax, dword ptr [ebp-8]
- 004A4BD9 |. 05 8C000000 add eax, 8C
- 004A4BDE |. 8BF4 mov esi, esp
- 004A4BE0 |. 50 push eax
- 004A4BE1 |. FF15 4C825300 call dword ptr [<&MSVCR80D._wtoi>] ; MSVCR80D._wtoi
- 004A4BE7 |. 83C4 04 add esp, 4 ; 第四组
- 004A4BEA |. 3BF4 cmp esi, esp
- 004A4BEC |. E8 7F8F0100 call 004BDB70
- 004A4BF1 |. 8985 E0FDFFFF mov dword ptr [ebp-220], eax
- 004A4BF7 |. 8B4D F8 mov ecx, dword ptr [ebp-8]
- 004A4BFA |. 81C1 94000000 add ecx, 94
- 004A4C00 |. 8BF4 mov esi, esp
- 004A4C02 |. 51 push ecx
- 004A4C03 |. FF15 4C825300 call dword ptr [<&MSVCR80D._wtoi>] ; MSVCR80D._wtoi
- 004A4C09 |. 83C4 04 add esp, 4 ; 第5组
- 004A4C0C |. 3BF4 cmp esi, esp
- 004A4C0E |. E8 5D8F0100 call 004BDB70
- 004A4C13 |. 8985 DCFDFFFF mov dword ptr [ebp-224], eax
复制代码 _wtoi函数,这个函数的参数是wchar_t* 把宽字符转为数值。跟踪发现,每组实际上只取了3个字符,修正假码为123-123-123-123-123继续;
- 004A4C19 |. 8BF4 mov esi, esp
- 004A4C1B |. 68 00010000 push 100 ; /Count = 100 (256.)
- 004A4C20 |. 8D95 F4FDFFFF lea edx, dword ptr [ebp-20C] ; |
- 004A4C26 |. 52 push edx ; |Buffer
- 004A4C27 |. 68 AA000000 push 0AA ; |RsrcID = STRING "962"
- 004A4C2C |. 6A 00 push 0 ; |hInst = NULL
- 004A4C2E |. FF15 14845300 call dword ptr [<&USER32.LoadStringW>>; \LoadStringW
- 004A4C34 |. 3BF4 cmp esi, esp ; 资源中取字符串
- 004A4C36 |. E8 358F0100 call 004BDB70
- 004A4C3B |. 66:C785 FAFDF>mov word ptr [ebp-206], 0
- 004A4C44 |. 8BF4 mov esi, esp
- 004A4C46 |. 8D85 F4FDFFFF lea eax, dword ptr [ebp-20C]
- 004A4C4C |. 50 push eax
- 004A4C4D |. FF15 4C825300 call dword ptr [<&MSVCR80D._wtoi>] ; MSVCR80D._wtoi
- 004A4C53 |. 83C4 04 add esp, 4 ; 转数值
- 004A4C56 |. 3BF4 cmp esi, esp
- 004A4C58 |. E8 138F0100 call 004BDB70
- 004A4C5D |. 8985 D8FDFFFF mov dword ptr [ebp-228], eax
- 004A4C63 |. 8B8D D8FDFFFF mov ecx, dword ptr [ebp-228]
- 004A4C69 |. 3B8D ECFDFFFF cmp ecx, dword ptr [ebp-214] ; 第一组应=962
- 004A4C6F |. 74 3A je short 004A4CAB
- 004A4C71 |. 8BF4 mov esi, esp
- 004A4C73 |. 68 00010000 push 100 ; /Count = 100 (256.)
- 004A4C78 |. 8D95 F4FDFFFF lea edx, dword ptr [ebp-20C] ; |
- 004A4C7E |. 52 push edx ; |Buffer
- 004A4C7F |. 68 BC000000 push 0BC ; |RsrcID = STRING "The serial number you entered is invalid. Please check it."
- 004A4C84 |. 6A 00 push 0 ; |hInst = NULL
- 004A4C86 |. FF15 14845300 call dword ptr [<&USER32.LoadStringW>>; \LoadStringW
复制代码 由此可知,第一组字符串应该为“962”。修正假码为962-123-123-123-123后继续。
- 004A4C8C |. 3BF4 cmp esi, esp
- 004A4C8E |. E8 DD8E0100 call 004BDB70
- 004A4C93 |. 6A 00 push 0
- 004A4C95 |. 6A 00 push 0
- 004A4C97 |. 8D85 F4FDFFFF lea eax, dword ptr [ebp-20C]
- 004A4C9D |. 50 push eax
- 004A4C9E |. 8B4D F8 mov ecx, dword ptr [ebp-8]
- 004A4CA1 |. E8 127E0100 call <jmp.&MFC80UD.#5753>
- 004A4CA6 |. E9 12020000 jmp 004A4EBD
- 004A4CAB |> 83BD ECFDFFFF>cmp dword ptr [ebp-214], 0 ; 比较各组是否为0
- 004A4CB2 |. 74 24 je short 004A4CD8
- 004A4CB4 |. 83BD E8FDFFFF>cmp dword ptr [ebp-218], 0
- 004A4CBB |. 74 1B je short 004A4CD8
- 004A4CBD |. 83BD E4FDFFFF>cmp dword ptr [ebp-21C], 0
- 004A4CC4 |. 74 12 je short 004A4CD8
- 004A4CC6 |. 83BD E0FDFFFF>cmp dword ptr [ebp-220], 0
- 004A4CCD |. 74 09 je short 004A4CD8
- 004A4CCF |. 83BD DCFDFFFF>cmp dword ptr [ebp-224], 0
- 004A4CD6 |. 75 3A jnz short 004A4D12
- 004A4CD8 |> 8BF4 mov esi, esp
- 004A4CDA |. 68 00010000 push 100 ; /Count = 100 (256.)
- 004A4CDF |. 8D8D F4FDFFFF lea ecx, dword ptr [ebp-20C] ; |
- 004A4CE5 |. 51 push ecx ; |Buffer
- 004A4CE6 |. 68 BC000000 push 0BC ; |RsrcID = STRING "The serial number you entered is invalid. Please check it."
- 004A4CEB |. 6A 00 push 0 ; |hInst = NULL
- 004A4CED |. FF15 14845300 call dword ptr [<&USER32.LoadStringW>>; \LoadStringW
- 004A4CF3 |. 3BF4 cmp esi, esp
- 004A4CF5 |. E8 768E0100 call 004BDB70
- 004A4CFA |. 6A 00 push 0
- 004A4CFC |. 6A 00 push 0
- 004A4CFE |. 8D95 F4FDFFFF lea edx, dword ptr [ebp-20C]
- 004A4D04 |. 52 push edx
- 004A4D05 |. 8B4D F8 mov ecx, dword ptr [ebp-8]
- 004A4D08 |. E8 AB7D0100 call <jmp.&MFC80UD.#5753>
- 004A4D0D |. E9 AB010000 jmp 004A4EBD
- 004A4D12 |> 8B85 ECFDFFFF mov eax, dword ptr [ebp-214] ; 第一组
- 004A4D18 |. 50 push eax
- 004A4D19 |. E8 5FD2F5FF call 00401F7D ; 余数累加?各位相加--》算法call1
- 004A4D1E |. 83C4 04 add esp, 4
- 004A4D21 |. 8985 D4FDFFFF mov dword ptr [ebp-22C], eax
- 004A4D27 |. 8B8D E8FDFFFF mov ecx, dword ptr [ebp-218] ; 第二组
- 004A4D2D |. 51 push ecx
- 004A4D2E |. E8 3FD3F5FF call 00402072 ; 方式B--》算法call2
- 004A4D33 |. 83C4 04 add esp, 4
- 004A4D36 |. 8985 D0FDFFFF mov dword ptr [ebp-230], eax ; 结果保存
- 004A4D3C |. 8B95 DCFDFFFF mov edx, dword ptr [ebp-224] ; 第5组
- 004A4D42 |. 52 push edx
- 004A4D43 |. E8 2AD3F5FF call 00402072
- 004A4D48 |. 83C4 04 add esp, 4
- 004A4D4B |. 8985 CCFDFFFF mov dword ptr [ebp-234], eax
- 004A4D51 |. 8B85 D4FDFFFF mov eax, dword ptr [ebp-22C] ; 第一组结果
- 004A4D57 |. 0385 D0FDFFFF add eax, dword ptr [ebp-230] ; +第二组结果
- 004A4D5D |. 6BC0 03 imul eax, eax, 3 ; *3
- 004A4D60 |. 8B8D D4FDFFFF mov ecx, dword ptr [ebp-22C] ; 第一组结果
- 004A4D66 |. 83E9 01 sub ecx, 1 ; -1
- 004A4D69 |. 0FAF8D E8FDFF>imul ecx, dword ptr [ebp-218] ; *第二组的值
- 004A4D70 |. 2BC1 sub eax, ecx ; 二者相减
- 004A4D72 |. 50 push eax ; /x
- 004A4D73 |. E8 72910100 call <jmp.&MSVCR80D.abs> ; \abs
- 004A4D78 |. 83C4 04 add esp, 4 ; 绝对值
- 004A4D7B |. 8985 C8FDFFFF mov dword ptr [ebp-238], eax
- 004A4D81 |. 8B95 C8FDFFFF mov edx, dword ptr [ebp-238]
- 004A4D87 |. 52 push edx
- 004A4D88 |. E8 FCDEF5FF call 00402C89 ; 算法call3
- 004A4D8D |. 83C4 04 add esp, 4
- 004A4D90 |. 8985 C8FDFFFF mov dword ptr [ebp-238], eax
- 004A4D96 |. 8B85 E4FDFFFF mov eax, dword ptr [ebp-21C] ; 第三组
- 004A4D9C |. 3B85 C8FDFFFF cmp eax, dword ptr [ebp-238] ; 二者需相等
- 004A4DA2 |. 74 3A je short 004A4DDE
- 004A4DA4 |. 8BF4 mov esi, esp
- 004A4DA6 |. 68 00010000 push 100 ; /Count = 100 (256.)
- 004A4DAB |. 8D8D F4FDFFFF lea ecx, dword ptr [ebp-20C] ; |
- 004A4DB1 |. 51 push ecx ; |Buffer
- 004A4DB2 |. 68 BC000000 push 0BC ; |RsrcID = STRING "The serial number you entered is invalid. Please check it."
- 004A4DB7 |. 6A 00 push 0 ; |hInst = NULL
- 004A4DB9 |. FF15 14845300 call dword ptr [<&USER32.LoadStringW>>; \LoadStringW
- 004A4DBF |. 3BF4 cmp esi, esp
- 004A4DC1 |. E8 AA8D0100 call 004BDB70
- 004A4DC6 |. 6A 00 push 0
- 004A4DC8 |. 6A 00 push 0
- 004A4DCA |. 8D95 F4FDFFFF lea edx, dword ptr [ebp-20C]
- 004A4DD0 |. 52 push edx
- 004A4DD1 |. 8B4D F8 mov ecx, dword ptr [ebp-8]
- 004A4DD4 |. E8 DF7C0100 call <jmp.&MFC80UD.#5753>
- 004A4DD9 |. E9 DF000000 jmp 004A4EBD
- 004A4DDE |> 8B85 D4FDFFFF mov eax, dword ptr [ebp-22C] ; 第一组的结果
- 004A4DE4 |. 0385 CCFDFFFF add eax, dword ptr [ebp-234] ; 第5组的结果
- 004A4DEA |. 6BC0 03 imul eax, eax, 3
- 004A4DED |. 8B8D D4FDFFFF mov ecx, dword ptr [ebp-22C]
- 004A4DF3 |. 83E9 01 sub ecx, 1
- 004A4DF6 |. 0FAF8D DCFDFF>imul ecx, dword ptr [ebp-224] ; 第5组
- 004A4DFD |. 2BC1 sub eax, ecx ; 方法同上
- 004A4DFF |. 50 push eax ; /x
- 004A4E00 |. E8 E5900100 call <jmp.&MSVCR80D.abs> ; \abs
- 004A4E05 |. 83C4 04 add esp, 4
- 004A4E08 |. 8985 C4FDFFFF mov dword ptr [ebp-23C], eax
- 004A4E0E |. 8B95 C4FDFFFF mov edx, dword ptr [ebp-23C]
- 004A4E14 |. 52 push edx
- 004A4E15 |. E8 6FDEF5FF call 00402C89
- 004A4E1A |. 83C4 04 add esp, 4
- 004A4E1D |. 8985 C4FDFFFF mov dword ptr [ebp-23C], eax
- 004A4E23 |. 8B85 E0FDFFFF mov eax, dword ptr [ebp-220] ; 第四组
- 004A4E29 |. 3B85 C4FDFFFF cmp eax, dword ptr [ebp-23C]
- 004A4E2F |. 74 37 je short 004A4E68
- 004A4E31 |. 8BF4 mov esi, esp
- 004A4E33 |. 68 00010000 push 100 ; /Count = 100 (256.)
- 004A4E38 |. 8D8D F4FDFFFF lea ecx, dword ptr [ebp-20C] ; |
- 004A4E3E |. 51 push ecx ; |Buffer
- 004A4E3F |. 68 BC000000 push 0BC ; |RsrcID = STRING "The serial number you entered is invalid. Please check it."
- 004A4E44 |. 6A 00 push 0 ; |hInst = NULL
- 004A4E46 |. FF15 14845300 call dword ptr [<&USER32.LoadStringW>>; \LoadStringW
- 004A4E4C |. 3BF4 cmp esi, esp
- 004A4E4E |. E8 1D8D0100 call 004BDB70
- 004A4E53 |. 6A 00 push 0
- 004A4E55 |. 6A 00 push 0
- 004A4E57 |. 8D95 F4FDFFFF lea edx, dword ptr [ebp-20C]
- 004A4E5D |. 52 push edx
- 004A4E5E |. 8B4D F8 mov ecx, dword ptr [ebp-8]
- 004A4E61 |. E8 527C0100 call <jmp.&MFC80UD.#5753>
- 004A4E66 |. EB 55 jmp short 004A4EBD
- 004A4E68 |> 8BF4 mov esi, esp
- 004A4E6A |. 68 00010000 push 100 ; /Count = 100 (256.)
- 004A4E6F |. 8D85 F4FDFFFF lea eax, dword ptr [ebp-20C] ; |
- 004A4E75 |. 50 push eax ; |Buffer
- 004A4E76 |. 68 BD000000 push 0BD ; |RsrcID = STRING "Thank you for your purchase."
- 004A4E7B |. 6A 00 push 0 ; |hInst = NULL
- 004A4E7D |. FF15 14845300 call dword ptr [<&USER32.LoadStringW>>; \LoadStringW
复制代码 关键跳转页非常明显,不用多说。
算法里边分别对第一组,第二组第五组假码进行了处理,处理结果分别跟第三组,第四组做比较。注册码属于自验证型。跟进几个算法call看一看。
- 004A5174 |. C745 FC 00000>mov dword ptr [ebp-4], 0
- 004A517B |. C745 F8 00000>mov dword ptr [ebp-8], 0
- 004A5182 |. EB 09 jmp short 004A518D
- 004A5184 |> 8B45 F8 /mov eax, dword ptr [ebp-8]
- 004A5187 |. 83C0 01 |add eax, 1
- 004A518A |. 8945 F8 |mov dword ptr [ebp-8], eax
- 004A518D |> 837D F8 03 cmp dword ptr [ebp-8], 3 ; 三次循环
- 004A5191 |. 7D 29 |jge short 004A51BC
- 004A5193 |. 8B45 08 |mov eax, dword ptr [ebp+8] ; 第一组设为A
- 004A5196 |. 99 |cdq
- 004A5197 |. B9 0A000000 |mov ecx, 0A
- 004A519C |. F7F9 |idiv ecx ; div 10
- 004A519E |. 6BC0 0A |imul eax, eax, 0A ; *10
- 004A51A1 |. 8B55 08 |mov edx, dword ptr [ebp+8]
- 004A51A4 |. 2BD0 |sub edx, eax ; A-A (div 10)*10,求余?算法很失败啊
- 004A51A6 |. 0355 FC |add edx, dword ptr [ebp-4] ; 余数累加
- 004A51A9 |. 8955 FC |mov dword ptr [ebp-4], edx
- 004A51AC |. 8B45 08 |mov eax, dword ptr [ebp+8] ; A
- 004A51AF |. 99 |cdq
- 004A51B0 |. B9 0A000000 |mov ecx, 0A
- 004A51B5 |. F7F9 |idiv ecx
- 004A51B7 |. 8945 08 |mov dword ptr [ebp+8], eax ; A div 10
- 004A51BA |.^ EB C8 \jmp short 004A5184
- 004A51BC |> 8B45 FC mov eax, dword ptr [ebp-4]
- 004A51BF |. 8BE5 mov esp, ebp
- 004A51C1 |. 5D pop ebp
- 004A51C2 \. C3 retn
复制代码 求余算法是很失败的算法。在VC里边用%即可,即使在汇编里也可以简单的把edx相加即可。
软件作者的方法实在不敢恭维。。。
一言以蔽之,就是把第一组注册码962各位相加。。。算法1这么简单,算法2呢?来看:- 004A50E4 |. C745 FC 00000>mov dword ptr [ebp-4], 0
- 004A50EB |. C745 F8 00000>mov dword ptr [ebp-8], 0
- 004A50F2 |. EB 09 jmp short 004A50FD
- 004A50F4 |> 8B45 F8 /mov eax, dword ptr [ebp-8]
- 004A50F7 |. 83C0 01 |add eax, 1
- 004A50FA |. 8945 F8 |mov dword ptr [ebp-8], eax
- 004A50FD |> 837D F8 03 cmp dword ptr [ebp-8], 3
- 004A5101 |. 7D 32 |jge short 004A5135
- 004A5103 |. 8B4D FC |mov ecx, dword ptr [ebp-4] ; 初始值为0(余数*10累加)
- 004A5106 |. 6BC9 0A |imul ecx, ecx, 0A ; *10
- 004A5109 |. 894D FC |mov dword ptr [ebp-4], ecx
- 004A510C |. 8B45 08 |mov eax, dword ptr [ebp+8] ; 第二组
- 004A510F |. 99 |cdq
- 004A5110 |. B9 0A000000 |mov ecx, 0A
- 004A5115 |. F7F9 |idiv ecx
- 004A5117 |. 6BC0 0A |imul eax, eax, 0A ; 求余
- 004A511A |. 8B55 08 |mov edx, dword ptr [ebp+8]
- 004A511D |. 2BD0 |sub edx, eax ; 求余
- 004A511F |. 0355 FC |add edx, dword ptr [ebp-4] ; 累加
- 004A5122 |. 8955 FC |mov dword ptr [ebp-4], edx
- 004A5125 |. 8B45 08 |mov eax, dword ptr [ebp+8]
- 004A5128 |. 99 |cdq
- 004A5129 |. B9 0A000000 |mov ecx, 0A
- 004A512E |. F7F9 |idiv ecx
- 004A5130 |. 8945 08 |mov dword ptr [ebp+8], eax
- 004A5133 |.^ EB BF \jmp short 004A50F4
- 004A5135 |> 8B45 FC mov eax, dword ptr [ebp-4]
- 004A5138 |. 8BE5 mov esp, ebp
- 004A513A |. 5D pop ebp
- 004A513B \. C3 retn
复制代码 依然不值得一提。依然有求余的烂算法。这次不同的是余数依次*10再累加。这是在做什么呢?
说穿了还是不值一提。就是把这个数值倒一下序,比如123变成321。。。
最后是算法3:- 004A51E0 /> \55 push ebp
- 004A51E1 |. 8BEC mov ebp, esp
- 004A51E3 |. 8B45 08 mov eax, dword ptr [ebp+8]
- 004A51E6 |. 99 cdq
- 004A51E7 |. B9 E8030000 mov ecx, 3E8
- 004A51EC |. F7F9 idiv ecx
- 004A51EE |. 69C0 E8030000 imul eax, eax, 3E8
- 004A51F4 |. 8B55 08 mov edx, dword ptr [ebp+8]
- 004A51F7 |. 2BD0 sub edx, eax
- 004A51F9 |. 8BC2 mov eax, edx
- 004A51FB |. 5D pop ebp
- 004A51FC \. C3 retn
复制代码 呵呵。。。。无语了,只是把数值%1000 求余。
【算法总结】算法那是相当的简单。非常软的柿子。
注册码第一组固定为:962,各位相加=0x11。
注册码第二组和第五组倒装,得到M2,M5
N3=(N2*10-3*(M2+0x11))%1000
N4=(N5*10-3*(M5+0x11))%1000
如此而已。
Delphi注册机关键代码如下:- function ModIT(m:Integer):Integer;
- var
- i,p,q:Integer;
- begin
- q:=0;
- for i:=0 to 2 do
- begin
- q:=10*q+m mod 10;
- m:=m div 10;
- end;
- Result:=q;
- end;
- procedure TForm1.BitBtn1Click(Sender: TObject);
- var
- N2,N3,N4,N5,M2,M5:Integer;
- const
- N1=962;
- M1=$11;
- begin
- Randomize;
- N2:=Random(900)+100;
- Randomize;
- N5:=Random(900)+100;
- M2:=ModIT(N2);
- M5:=ModIT(N5);
- N3:=Abs((M1+M2)*3-(M1-1)*N2 ) mod 1000;
- N4:=Abs((M1+M5)*3-(M1-1)*N5 ) mod 1000;
- edit2.Text:=IntToStr(N1)+'-'+ IntToStr(N2)+'-'+IntToStr(N3)+'-'+IntToStr(N4)+'-'+IntToStr(N5);
- end;
复制代码 两组可用的注册码:
- 962-208-871-917-405
- 962-215-853-615-413
复制代码 【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
|
评分
-
查看全部评分
|