老文章档案 · 2003 年

家庭电脑相册制作系统 V6.0 算法分析

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-08-05 · 作者:HMILYBCG 人气: · 出处:赢政天下整理收藏)

破解者:HMILY[CCG][BCG]

软件名称:家庭电脑相册制作系统 V6.0 标准版

备 注:这个软件原来是用vb编写,到这个版本以后改为delphi

算法分析需要:这个软件在注册时有两部分注册码,设第一部分为"X",机器码参与运算只是除前两

位的其它数据,所以设这个数据为"S"

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

|:004A51E5(C)

|

:004A51E0 6A00 push 00000000

:004A51E2 6A00 push 00000000

:004A51E4 49 dec ecx

:004A51E5 75F9 jne 004A51E0

:004A51E7 51 push ecx

:004A51E8 53 push ebx

:004A51E9 8BD8 mov ebx, eax

:004A51EB 33C0 xor eax, eax

:004A51ED 55 push ebp

:004A51EE 6834554A00 push 004A5534

:004A51F3 64FF30 push dword ptr fs:[eax]

:004A51F6 648920 mov dword ptr fs:[eax], esp

:004A51F9 8D957CFEFFFF lea edx, dword ptr [ebp+FFFFFE7C]

:004A51FF 8B8318070000 mov eax, dword ptr [ebx+00000718]

:004A5205 E8BEA0F9FF call 0043F2C8

:004A520A 8B857CFEFFFF mov eax, dword ptr [ebp+FFFFFE7C]

:004A5210 8D9580FEFFFF lea edx, dword ptr [ebp+FFFFFE80]

:004A5216 E88138F6FF call 00408A9C

:004A521B 8B8580FEFFFF mov eax, dword ptr [ebp+FFFFFE80]

:004A5221 50 push eax

:004A5222 8D9574FEFFFF lea edx, dword ptr [ebp+FFFFFE74]

:004A5228 8B83FC060000 mov eax, dword ptr [ebx+000006FC]

:004A522E E895A0F9FF call 0043F2C8

:004A5233 8B8574FEFFFF mov eax, dword ptr [ebp+FFFFFE74]

:004A5239 8D9578FEFFFF lea edx, dword ptr [ebp+FFFFFE78]

:004A523F E85838F6FF call 00408A9C

:004A5244 8B8578FEFFFF mov eax, dword ptr [ebp+FFFFFE78]

:004A524A 8D4DF8 lea ecx, dword ptr [ebp-08]

:004A524D 5A pop edx

:004A524E E84122FFFF call 00497494 ---->注册算法,跟进去研究研究

:004A5253 8D956CFEFFFF lea edx, dword ptr [ebp+FFFFFE6C]

:004A5259 8B831C070000 mov eax, dword ptr [ebx+0000071C]

:004A525F E864A0F9FF call 0043F2C8

:004A5264 8B856CFEFFFF mov eax, dword ptr [ebp+FFFFFE6C]

:004A526A 8D9570FEFFFF lea edx, dword ptr [ebp+FFFFFE70]

:004A5270 E82738F6FF call 00408A9C

:004A5275 8B8570FEFFFF mov eax, dword ptr [ebp+FFFFFE70]

:004A527B 50 push eax

:004A527C 8D9568FEFFFF lea edx, dword ptr [ebp+FFFFFE68]

:004A5282 8B45F8 mov eax, dword ptr [ebp-08] ->正确注册码传入eax

:004A5285 E81238F6FF call 00408A9C

:004A528A 8B9568FEFFFF mov edx, dword ptr [ebp+FFFFFE68]

:004A5290 58 pop eax

:004A5291 E822F8F5FF call 00404AB8 ->比较注册码

:004A5296 0F85A8010000 jne 004A5444 ->经典对比,不相等就over

:004A529C 8D9560FEFFFF lea edx, dword ptr [ebp+FFFFFE60]

:004A52A2 A19C9B4A00 mov eax, dword ptr [004A9B9C]

:004A52A7 8B00 mov eax, dword ptr [eax]

:004A52A9 E82AA4FBFF call 0045F6D8

:004A52AE 8B8560FEFFFF mov eax, dword ptr [ebp+FFFFFE60]

:004A52B4 8D9564FEFFFF lea edx, dword ptr [ebp+FFFFFE64]

:004A52BA E81D3FF6FF call 004091DC

:004A52BF 8B8564FEFFFF mov eax, dword ptr [ebp+FFFFFE64]

:004A52C5 8D55FC lea edx, dword ptr [ebp-04]

:004A52C8 E8CF37F6FF call 00408A9C

:004A52CD 8D855CFEFFFF lea eax, dword ptr [ebp+FFFFFE5C]

* Possible StringData Ref from Code Obj ->"data3" ->上面注册码正确,将注册信息写data3中

| 删除这个文件又是未注册版

:004A52D3 B94C554A00 mov ecx, 004A554C

:004A52D8 8B55FC mov edx, dword ptr [ebp-04]

:004A52DB E8E0F6F5FF call 004049C0

:004A52E0 8B955CFEFFFF mov edx, dword ptr [ebp+FFFFFE5C]

:004A52E6 8D8584FEFFFF lea eax, dword ptr [ebp+FFFFFE84]

:004A52EC E8C3DAF5FF call 00402DB4

:004A52F1 BA25000000 mov edx, 00000025

:004A52F6 8D8584FEFFFF lea eax, dword ptr [ebp+FFFFFE84]

:004A52FC E8FBDEF5FF call 004031FC

:004A5301 E886D5F5FF call 0040288C

:004A5306 8D9554FDFFFF lea edx, dword ptr [ebp+FFFFFD54]

:004A530C 8B83FC060000 mov eax, dword ptr [ebx+000006FC]

:004A5312 E8B19FF9FF call 0043F2C8

:004A5317 8B8554FDFFFF mov eax, dword ptr [ebp+FFFFFD54]

:004A531D 8D9558FDFFFF lea edx, dword ptr [ebp+FFFFFD58]

:004A5323 E87437F6FF call 00408A9C

:004A5328 8B9558FDFFFF mov edx, dword ptr [ebp+FFFFFD58]

:004A532E 8D855CFDFFFF lea eax, dword ptr [ebp+FFFFFD5C]

:004A5334 B9FF000000 mov ecx, 000000FF

:004A5339 E812F6F5FF call 00404950

:004A533E 8D955CFDFFFF lea edx, dword ptr [ebp+FFFFFD5C]

:004A5344 8D45D3 lea eax, dword ptr [ebp-2D]

:004A5347 B10D mov cl, 0D

:004A5349 E8C2DBF5FF call 00402F10

:004A534E 8D954CFDFFFF lea edx, dword ptr [ebp+FFFFFD4C]

:004A5354 8B8318070000 mov eax, dword ptr [ebx+00000718]

:004A535A E8699FF9FF call 0043F2C8

:004A535F 8B854CFDFFFF mov eax, dword ptr [ebp+FFFFFD4C]

:004A5365 8D9550FDFFFF lea edx, dword ptr [ebp+FFFFFD50]

:004A536B E82C37F6FF call 00408A9C

:004A5370 8B9550FDFFFF mov edx, dword ptr [ebp+FFFFFD50]

:004A5376 8D855CFDFFFF lea eax, dword ptr [ebp+FFFFFD5C]

:004A537C B9FF000000 mov ecx, 000000FF

:004A5381 E8CAF5F5FF call 00404950

:004A5386 8D955CFDFFFF lea edx, dword ptr [ebp+FFFFFD5C]

:004A538C 8D45E1 lea eax, dword ptr [ebp-1F]

:004A538F B109 mov cl, 09

:004A5391 E87ADBF5FF call 00402F10

:004A5396 8D9544FDFFFF lea edx, dword ptr [ebp+FFFFFD44]

:004A539C 8B831C070000 mov eax, dword ptr [ebx+0000071C]

:004A53A2 E8219FF9FF call 0043F2C8

:004A53A7 8B8544FDFFFF mov eax, dword ptr [ebp+FFFFFD44]

:004A53AD 8D9548FDFFFF lea edx, dword ptr [ebp+FFFFFD48]

:004A53B3 E8E436F6FF call 00408A9C

:004A53B8 8B9548FDFFFF mov edx, dword ptr [ebp+FFFFFD48]

:004A53BE 8D855CFDFFFF lea eax, dword ptr [ebp+FFFFFD5C]

:004A53C4 B9FF000000 mov ecx, 000000FF

:004A53C9 E882F5F5FF call 00404950

:004A53CE 8D955CFDFFFF lea edx, dword ptr [ebp+FFFFFD5C]

:004A53D4 8D45EB lea eax, dword ptr [ebp-15]

:004A53D7 B10C mov cl, 0C

:004A53D9 E832DBF5FF call 00402F10

:004A53DE 8D55D3 lea edx, dword ptr [ebp-2D]

:004A53E1 8D8584FEFFFF lea eax, dword ptr [ebp+FFFFFE84]

:004A53E7 E81CDFF5FF call 00403308

:004A53EC E89BD4F5FF call 0040288C

:004A53F1 8D8584FEFFFF lea eax, dword ptr [ebp+FFFFFE84]

:004A53F7 E880DAF5FF call 00402E7C

:004A53FC E88BD4F5FF call 0040288C

:004A5401 33D2 xor edx, edx

:004A5403 8B8318070000 mov eax, dword ptr [ebx+00000718]

:004A5409 8B08 mov ecx, dword ptr [eax]

:004A540B FF5164 call [ecx+64]

:004A540E 33D2 xor edx, edx

:004A5410 8B831C070000 mov eax, dword ptr [ebx+0000071C]

:004A5416 8B08 mov ecx, dword ptr [eax]

:004A5418 FF5164 call [ecx+64]

:004A541B 33D2 xor edx, edx

:004A541D 8B8320070000 mov eax, dword ptr [ebx+00000720]

:004A5423 8B08 mov ecx, dword ptr [eax]

:004A5425 FF5164 call [ecx+64]

* Possible StringData Ref from Code Obj ->"你已注册成功!"

|

:004A5428 BA5C554A00 mov edx, 004A555C

:004A542D 8B8320070000 mov eax, dword ptr [ebx+00000720]

:004A5433 E8C09EF9FF call 0043F2F8

* Possible StringData Ref from Code Obj ->"注册成功,谢谢你对本软件的支持!"

|

:004A5438 B874554A00 mov eax, 004A5574

:004A543D E8A230F9FF call 004384E4

:004A5442 EB41 jmp 004A5485

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

|:004A5296(C)

|

:004A5444 B201 mov dl, 01

:004A5446 8B8318070000 mov eax, dword ptr [ebx+00000718]

:004A544C 8B08 mov ecx, dword ptr [eax]

:004A544E FF5164 call [ecx+64]

:004A5451 B201 mov dl, 01

:004A5453 8B831C070000 mov eax, dword ptr [ebx+0000071C]

:004A5459 8B08 mov ecx, dword ptr [eax]

:004A545B FF5164 call [ecx+64]

:004A545E B201 mov dl, 01

:004A5460 8B8320070000 mov eax, dword ptr [ebx+00000720]

:004A5466 8B08 mov ecx, dword ptr [eax]

:004A5468 FF5164 call [ecx+64]

* Possible StringData Ref from Code Obj ->"验证软件注册信息"

|

:004A546B BAA0554A00 mov edx, 004A55A0

:004A5470 8B8320070000 mov eax, dword ptr [ebx+00000720]

:004A5476 E87D9EF9FF call 0043F2F8

* Possible StringData Ref from Code Obj ->"注册失败!"

|

:004A547B B8BC554A00 mov eax, 004A55BC

:004A5480 E85F30F9FF call 004384E4

============================================================================================

* Referenced by a CALL at Addresses:

|:004A1F87 , :004A524E , :004A6E56

|

:00497494 55 push ebp ->跟进计算call来到这里

:00497495 8BEC mov ebp, esp

:00497497 51 push ecx

:00497498 B907000000 mov ecx, 00000007

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

|:004974A2(C)

|

:0049749D 6A00 push 00000000

:0049749F 6A00 push 00000000

:004974A1 49 dec ecx

:004974A2 75F9 jne 0049749D

:004974A4 874DFC xchg dword ptr [ebp-04], ecx

:004974A7 53 push ebx

:004974A8 56 push esi

:004974A9 8BF1 mov esi, ecx

:004974AB 8955F8 mov dword ptr [ebp-08], edx

:004974AE 8945FC mov dword ptr [ebp-04], eax

:004974B1 8B45FC mov eax, dword ptr [ebp-04]

:004974B4 E8A3D6F6FF call 00404B5C

:004974B9 8B45F8 mov eax, dword ptr [ebp-08]

:004974BC E89BD6F6FF call 00404B5C

:004974C1 33C0 xor eax, eax

:004974C3 55 push ebp

:004974C4 68BD764900 push 004976BD

:004974C9 64FF30 push dword ptr fs:[eax]

:004974CC 648920 mov dword ptr fs:[eax], esp

:004974CF 8D45F4 lea eax, dword ptr [ebp-0C]

:004974D2 50 push eax

:004974D3 8D55E8 lea edx, dword ptr [ebp-18]

:004974D6 8B45FC mov eax, dword ptr [ebp-04]

:004974D9 E8BE15F7FF call 00408A9C

:004974DE 8B45E8 mov eax, dword ptr [ebp-18] ->将完整的机器码传入eax

:004974E1 B90B000000 mov ecx, 0000000B

:004974E6 BA03000000 mov edx, 00000003

:004974EB E8DCD6F6FF call 00404BCC

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

|:00497475(C)

|

:004974F0 8D45F0 lea eax, dword ptr [ebp-10]

:004974F3 50 push eax

:004974F4 B906000000 mov ecx, 00000006

:004974F9 BA06000000 mov edx, 00000006

:004974FE 8B45F4 mov eax, dword ptr [ebp-0C] ->取除机器码的前两位的所有数据

:00497501 E8C6D6F6FF call 00404BCC

:00497506 8B45F0 mov eax, dword ptr [ebp-10] ->取机器码的后6位

:00497509 E8BE18F7FF call 00408DCC ->把后6位转换为十六进制传给eax

:0049750E 8BD8 mov ebx, eax ->ebx=eax

:00497510 8BC3 mov eax, ebx ->晕,又传一遍

:00497512 B903000000 mov ecx, 00000003 ->ecx=3

:00497517 99 cdq ->扩展,edx=0

:00497518 F7F9 idiv ecx ->后6位/3

:0049751A 8BD8 mov ebx, eax ->商的结果保存到ebx

:0049751C EB06 jmp 00497524

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

|:00497539(C)

|

:0049751E 8BC3 mov eax, ebx ->如果除得的结果没有6位则跳到这里(1)

:00497520 03C0 add eax, eax ->商的结果将重复累加

:00497522 8BD8 mov ebx, eax

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

|:0049751C(U)

|

:00497524 8D55E4 lea edx, dword ptr [ebp-1C]

:00497527 8BC3 mov eax, ebx

:00497529 E8BE17F7FF call 00408CEC

:0049752E 8B45E4 mov eax, dword ptr [ebp-1C] ->d eax可看到商的十进制数

:00497531 E83ED4F6FF call 00404974 ->取商的位数

:00497536 83F806 cmp eax, 00000006 ->比较<6位吗

:00497539 7CE3 jl 0049751E ->小于则跳到(1)处

:0049753B 8D55F0 lea edx, dword ptr [ebp-10]

:0049753E 8BC3 mov eax, ebx

:00497540 E8A717F7FF call 00408CEC

:00497545 8D45F0 lea eax, dword ptr [ebp-10]

:00497548 50 push eax

:00497549 B906000000 mov ecx, 00000006

:0049754E BA01000000 mov edx, 00000001

:00497553 8B45F0 mov eax, dword ptr [ebp-10]

:00497556 E871D6F6FF call 00404BCC

:0049755B 8D45EC lea eax, dword ptr [ebp-14]

:0049755E 50 push eax

:0049755F B905000000 mov ecx, 00000005

:00497564 BA01000000 mov edx, 00000001

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

:0049756C E85BD6F6FF call 00404BCC

:00497571 8D55E0 lea edx, dword ptr [ebp-20]

:00497574 8B45F8 mov eax, dword ptr [ebp-08] ->把注册码的第一部分传入eax

:00497577 E82015F7FF call 00408A9C

:0049757C 8B45E0 mov eax, dword ptr [ebp-20]

:0049757F E84818F7FF call 00408DCC ->把第一部分的数据转换为十六进制

:00497584 8BD8 mov ebx, eax

:00497586 8B45EC mov eax, dword ptr [ebp-14] ->取"S"的前5位

:00497589 E83E18F7FF call 00408DCC ->将前5位转换成十六进制

:0049758E 03D8 add ebx, eax ->前5位与"X"相加

:00497590 D1FB sar ebx, 1 ->相加结果右移一次

:00497592 790A jns 0049759E ->测试ebx是否为负数

:00497594 83D300 adc ebx, 00000000 ->上面不跳则ebx=ebx+0+CF (CF为进位标志)

:00497597 EB05 jmp 0049759E

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

|:004975B3(C)

|

:00497599 8D045B lea eax, dword ptr [ebx+2*ebx] ->如果相加结果<6位,则相加结果

乘2后累加(2)

:0049759C 8BD8 mov ebx, eax

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

|:00497592(C), :00497597(U)

|

:0049759E 8D55DC lea edx, dword ptr [ebp-24]

:004975A1 8BC3 mov eax, ebx

:004975A3 E84417F7FF call 00408CEC

:004975A8 8B45DC mov eax, dword ptr [ebp-24]

:004975AB E8C4D3F6FF call 00404974 ->取相加结果的位数

:004975B0 83F806 cmp eax, 00000006 ->小于6位吗

:004975B3 7CE4 jl 00497599 ->小于则跳到(2)处

:004975B5 8D55EC lea edx, dword ptr [ebp-14]

:004975B8 8BC3 mov eax, ebx

:004975BA E82D17F7FF call 00408CEC

:004975BF 8D45EC lea eax, dword ptr [ebp-14]

:004975C2 50 push eax

:004975C3 B906000000 mov ecx, 00000006

:004975C8 BA01000000 mov edx, 00000001

:004975CD 8B45EC mov eax, dword ptr [ebp-14]

:004975D0 E8F7D5F6FF call 00404BCC

:004975D5 8D45F4 lea eax, dword ptr [ebp-0C]

:004975D8 8B4DEC mov ecx, dword ptr [ebp-14] ->只取相加结果的前6位传入ecx

:004975DB 8B55F0 mov edx, dword ptr [ebp-10] ->上面的商结果传入edx

:004975DE E8DDD3F6FF call 004049C0

:004975E3 8D45F0 lea eax, dword ptr [ebp-10]

:004975E6 E8D1D0F6FF call 004046BC

:004975EB 8D45EC lea eax, dword ptr [ebp-14]

:004975EE E8C9D0F6FF call 004046BC

:004975F3 BB01000000 mov ebx, 00000001

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

|:00497642(C)

|

:004975F8 8BC3 mov eax, ebx ->eax=ebx

:004975FA D1F8 sar eax, 1 ->eax=eax>>1

:004975FC 7903 jns 00497601 ->是否为负数

:004975FE 83D000 adc eax, 00000000

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

|:004975FC(C)

|

:00497601 03C0 add eax, eax ->eax+=eax;

:00497603 3BD8 cmp ebx, eax ->比较ebx和eax

:00497605 7537 jne 0049763E ->不相加则跳

:00497607 8D45D0 lea eax, dword ptr [ebp-30]

:0049760A 50 push eax

:0049760B B901000000 mov ecx, 00000001

:00497610 8BD3 mov edx, ebx

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

:00497615 E8B2D5F6FF call 00404BCC ->这里有问题,跟进去看看你就明白了

:0049761A 8B4DD0 mov ecx, dword ptr [ebp-30]

:0049761D 8D45D4 lea eax, dword ptr [ebp-2C]

:00497620 8B55F0 mov edx, dword ptr [ebp-10]

:00497623 E898D3F6FF call 004049C0

:00497628 8B45D4 mov eax, dword ptr [ebp-2C]

:0049762B 8D55D8 lea edx, dword ptr [ebp-28]

:0049762E E86914F7FF call 00408A9C

:00497633 8B55D8 mov edx, dword ptr [ebp-28]

:00497636 8D45F0 lea eax, dword ptr [ebp-10]

:00497639 E816D1F6FF call 00404754

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

|:00497605(C)

|

:0049763E 43 inc ebx ->ebx++;

:0049763F 83FB0D cmp ebx, 0000000D

:00497642 75B4 jne 004975F8

//以上的循环我就逐一分析了,经过我的分析它是这样取的:把商后的结果和相加

的结果合并为一字符串,然后取这个字符串的偶数位

:00497644 BB01000000 mov ebx, 00000001

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

|:00497693(C)

|

:00497649 8BC3 mov eax, ebx

:0049764B D1F8 sar eax, 1

:0049764D 7903 jns 00497652

:0049764F 83D000 adc eax, 00000000

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

|:0049764D(C)

|

:00497652 03C0 add eax, eax

:00497654 3BD8 cmp ebx, eax

:00497656 7437 je 0049768F

:00497658 8D45C4 lea eax, dword ptr [ebp-3C]

:0049765B 50 push eax

:0049765C B901000000 mov ecx, 00000001

:00497661 8BD3 mov edx, ebx

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

:00497666 E861D5F6FF call 00404BCC

:0049766B 8B4DC4 mov ecx, dword ptr [ebp-3C]

:0049766E 8D45C8 lea eax, dword ptr [ebp-38]

:00497671 8B55EC mov edx, dword ptr [ebp-14]

:00497674 E847D3F6FF call 004049C0

:00497679 8B45C8 mov eax, dword ptr [ebp-38]

:0049767C 8D55CC lea edx, dword ptr [ebp-34]

:0049767F E81814F7FF call 00408A9C

:00497684 8B55CC mov edx, dword ptr [ebp-34]

:00497687 8D45EC lea eax, dword ptr [ebp-14]

:0049768A E8C5D0F6FF call 00404754

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

|:00497656(C)

|

:0049768F 43 inc ebx

:00497690 83FB0D cmp ebx, 0000000D

:00497693 75B4 jne 00497649

//以上这部分循环则是取同一字符串的奇数位

:00497695 8BC6 mov eax, esi

:00497697 8B4DEC mov ecx, dword ptr [ebp-14] ->重新排列后的第一组数传入ecx

:0049769A 8B55F0 mov edx, dword ptr [ebp-10] ->重新排列后的第二组数传入edx

:0049769D E81ED3F6FF call 004049C0

:004976A2 33C0 xor eax, eax

:004976A4 5A pop edx

:004976A5 59 pop ecx

:004976A6 59 pop ecx

:004976A7 648910 mov dword ptr fs:[eax], edx

:004976AA 68C4764900 push 004976C4

=========================================================================================

分析完成,注册机源码如下:

//---------------------------------------------------------------------------

void __fastcall TMainform::OKBtnClick(TObject *Sender)

{

if(UEdit->Text!=""&&UEdit1->Text!="")

{

String name1,S_1,S_2,S_3,S_4,S_5,S_6,sum,code1,code2,code3;

int a1,a2,b1=8,b2=3,c1=1,c2=1,d1,d2=1;

unsigned long key1=0,reg1=0,reg2=0,reg3=0,reg4=0,reg5=0,reg6=0;

name1=UEdit->Text;a1=UEdit->Text.Length();

if(a1<8) {ShowMessage("机器码不正确!");return;}

key1=StrToInt64(UEdit1->Text);

while(b1<=a1)

{

reg1=name1[b1];

S_1=S_1+char(reg1);b1++;

}

reg1=0;reg1=StrToInt(S_1)/3;

S_5=IntToStr(reg1);

if(IntToStr(reg1).Length()<6)

{

while(IntToStr(reg1).Length()<6) reg1=reg1+reg1;

S_6=IntToStr(reg1);

}

else{

while(c1<=6) {reg4=S_5[c1];S_6=S_6+char(reg4);c1++;}

}

while(b2<=7)

{

reg2=name1[b2];

S_2=S_2+char(reg2);b2++;

}

reg2=0;reg2=(StrToInt(S_2)+key1)>>1;

S_3=IntToStr(reg2);

if(IntToStr(reg2).Length()<6)

{

while(IntToStr(reg2).Length()<6) reg2=reg2+reg2*2;

S_4=IntToStr(reg2);

}

else{

while(c2<=6)

{reg3=S_3[c2];S_4=S_4+char(reg3);c2++;}}

sum=sum+S_6+S_4;d1=sum.Length();

while(d2<=d1)

{

if(d2%2==0)

{reg5=sum[d2];code1=code1+char(reg5);d2++;}

else d2++;

}

d2=1;

while(d2<=d1)

{

if(d2&1==1)

{reg6=sum[d2];code2=code2+char(reg6);d2++;}

else d2++;

}

code3=code3+code1+code2;

CEdit->Text=code3;

}

}

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

相关文章:

·语音界面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)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史