首页
社区
课程
招聘
[原创]Menu Maker 4算法分析
发表于: 2006-9-4 04:22 7527

[原创]Menu Maker 4算法分析

2006-9-4 04:22
7527

软件名称:Menu Maker 4
下载地址:http://www.selteco.com/?src=smmk2a
购买价格:¥29.00
简介:The easiest way to create pull-down web menus without coding.

编译语言:Microsoft Visual C++ 6.0
本文档由 :wofan[OCN] 制作,虽然是国外软件,还是不允许制作并发放注册机,违者后果自负。
本程序虽然没有采用加密算法,但是要很好地描述它的算法,还真有点麻烦。
填入注册码:
123456-787878787
我把它们分别叫做regone 和 regtwo
bpx GetWindowTextA 可以断下

00416B8A    8B4424 0C       mov eax,dword ptr ss:[esp+C]
00416B8E    8378 F8 06      cmp dword ptr ds:[eax-8],6========第一个注册框中实际上也只能填写6个字符
00416B92    75 25           jnz short menumake.00416BB9
00416B94    8B4C24 08       mov ecx,dword ptr ss:[esp+8]
00416B98    8379 F8 09      cmp dword ptr ds:[ecx-8],9========第二个注册框中实际上也只能填写9个字符
00416B9C    75 1B           jnz short menumake.00416BB9
00416B9E    50              push eax
00416B9F    E8 72D40000     call menumake.00424016=================== 将regone转为十六进制0x1E240
00416BA4    8B5424 0C       mov edx,dword ptr ss:[esp+C]
00416BA8    8946 60         mov dword ptr ds:[esi+60],eax
00416BAB    52              push edx
00416BAC    E8 65D40000     call menumake.00424016====================将regtwo转为十六进制0x2EF61383
00416BB1    83C4 08         add esp,8
……
00416BF4    C3              retn

以后居然不知跑到那里去了,我靠,难找了
换个断点:
bp MessageBoxA
来到:
00408314    6A 10           push 10
00408316    68 94064700     push menumake.00470694                      ; ASCII "Selteco Menu Maker"
0040831B    68 2C064700     push menumake.0047062C                      ; ASCII "Invalid serial number."
00408320    6A 00           push 0
00408322    FF15 E8954500   call dword ptr ds:[<&USER32.MessageBoxA>]   ; USER32.MessageBoxA------这里

右击,分析代码,看它从那里来的。

0040814A   .  52            push edx                                    ; /Arg2
0040814B   .  51            push ecx                                    ; |Arg1
0040814C   .  8BCE          mov ecx,esi                                 ; |
0040814E   .  E8 0D0B0000   call menumake.00408C60                      ; \menumake.00408C60---这才是关键Call,F7跟进
00408153   .  85C0          test eax,eax
00408155   .  0F84 B9010000 je menumake.00408314-----------------出错MessageboxA来自这里的跳转,向上找

======================================================================
======================================================================
关键Call,F7跟进,算法在这里:
===========================================================================================================
==特别说明:本算法,不好描述,我估且:                                                               ======
==常数前面加const,例如出现的第一个常数,我就记为const_one                                            ======
==注册码分为两部分, 我就分别记为:regone,regtwo                                                     ======
==由regone 和常数运算得到的数就记为,例如:conone_regone 就是第一个常数和注册码第一部分运算得到和结果======
==没有其它大常数参加运算,只是处理注册码,得到的数,记为,如regone_num 就是由注册码第一部分产生的数据======
===========================================================================================================
00408C60  /$  83EC 3C       sub esp,3C
00408C63  |.  8B4C24 40     mov ecx,dword ptr ss:[esp+40]==regone的十六进制:0x1E240
00408C67  |.  B8 8F588B4F   mov eax,4F8B588F---------------const_one
00408C6C  |.  F7E1          mul ecx----------------------------regone mul const_one=95D8 3F9361C0
00408C6E  |.  8BC1          mov eax,ecx
00408C70  |.  53            push ebx
00408C71  |.  2BC2          sub eax,edx------------------------regone - 0x95D8=0x14C68
00408C73  |.  55            push ebp
00408C74  |.  D1E8          shr eax,1--------------------------0x1FC68 shr 1=0xA634
00408C76  |.  03C2          add eax,edx------------------------0xA634+0x95D8=0x13C0C
00408C78  |.  56            push esi
00408C79  |.  C1E8 10       shr eax,10-------------------------0x13C0C shr 0x10=1
00408C7C  |.  33D2          xor edx,edx
00408C7E  |.  BE 0A000000   mov esi,0A------------------------------常数
00408C83  |.  F7F6          div esi----------------------------1 div 0xA=> EAX=0 EDX=1
00408C85  |.  B8 5917B7D1   mov eax,D1B71759--------------const_two
00408C8A  |.  57            push edi
00408C8B  |.  BF 0A000000   mov edi,0A
00408C90  |.  BB 0A000000   mov ebx,0A
00408C95  |.  BD 0A000000   mov ebp,0A
00408C9A  |.  8BF2          mov esi,edx=========保存余数,记为conone_regone
00408C9C  |.  F7E1          mul ecx----------------------------const_two mul regone=18B0F 27BB6840
00408C9E  |.  8BC2          mov eax,edx
00408CA0  |.  33D2          xor edx,edx
00408CA2  |.  C1E8 0D       shr eax,0D-------------------------0x18B0F shr 0xD=0xC
00408CA5  |.  F7F7          div edi----------------------------同样,它也div 0xA=1 余 2
00408CA7  |.  B8 D34D6210   mov eax,10624DD3--------------const_three
00408CAC  |.  895424 14     mov dword ptr ss:[esp+14],edx===保存余数,记为contwo_regone
00408CB0  |.  F7E1          mul ecx----------------------------const_three mul regone=1EDD 2F1ABAC0
00408CB2  |.  8BC2          mov eax,edx------------------------同样,提取Hiword
00408CB4  |.  33D2          xor edx,edx
00408CB6  |.  C1E8 06       shr eax,6--------------------------Hiword shr 6=7B
00408CB9  |.  F7F7          div edi----------------------------同样 div 0xA=C 余 3
00408CBB  |.  B8 1F85EB51   mov eax,51EB851F--------------const_four
00408CC0  |.  895424 18     mov dword ptr ss:[esp+18],edx===保存余数,记为conthree_regone
00408CC4  |.  F7E1          mul ecx----------------------------const_four mul regone=9A51  EB85A5C0
00408CC6  |.  8BC2          mov eax,edx
00408CC8  |.  33D2          xor edx,edx
00408CCA  |.  C1E8 05       shr eax,5--------------------------9A51 shr 5=4D2
00408CCD  |.  F7F7          div edi----------------------------div 0xA=7B 余 4
00408CCF  |.  B8 CDCCCCCC   mov eax,CCCCCCCD--------------const_five
00408CD4  |.  8BFA          mov edi,edx==========保存余数,记为confour_regone
00408CD6  |.  F7E1          mul ecx---------------------------const_five mul regone=181CC CCCD2D40
00408CD8  |.  8BC2          mov eax,edx
00408CDA  |.  33D2          xor edx,edx
00408CDC  |.  C1E8 03       shr eax,3-------------------------181CC shr 3=3039
00408CDF  |.  F7F3          div ebx---------------------------div 0xA=4D2 余 5
00408CE1  |.  8BC1          mov eax,ecx
00408CE3  |.  B9 0A000000   mov ecx,0A
00408CE8  |.  8BDA          mov ebx,edx>>>>>>>>>>>>>>>保存余数5,记为confive_regone
00408CEA  |.  33D2          xor edx,edx
00408CEC  |.  F7F1          div ecx---------------------------regone div 0xA=3039 余 6
00408CEE  |.  8B4C24 54     mov ecx,dword ptr ss:[esp+54]=======regtwo 的十六进制
00408CF2  |.  B8 893BE655   mov eax,55E63B89-------const_six
00408CF7  |.  895424 24     mov dword ptr ss:[esp+24],edx====保存余数regone_num
00408CFB  |.  F7E1          mul ecx--------------regtwo mul const_six=FC1F07B DEE1A21B
00408CFD  |.  8BC2          mov eax,edx
00408CFF  |.  33D2          xor edx,edx
00408D01  |.  C1E8 19       shr eax,19------------FC1F07B shr 19=7
00408D04  |.  F7F5          div ebp--------------div 0xA=0 余 7
00408D06  |.  B8 6BCA5F6B   mov eax,6B5FCA6B-------const_seven
00408D0B  |.  895424 28     mov dword ptr ss:[esp+28],edx====保存余数,记为:consix_regtwo
00408D0F  |.  F7E1          mul ecx---------------const_seven mul regtwo=13B26C9A CADC85C1
00408D11  |.  8BC2          mov eax,edx
00408D13  |.  33D2          xor edx,edx
00408D15  |.  C1E8 16       shr eax,16-------------13B26C9A shr 16=4E
00408D18  |.  F7F5          div ebp---------------div 0xA=7 余 8
00408D1A  |.  B8 83DE1B43   mov eax,431BDE83-------const_eight
00408D1F  |.  895424 2C     mov dword ptr ss:[esp+2C],edx===保存余数,记为:conseven_regtwo
00408D23  |.  F7E1          mul ecx--------------const_eight mul regtwo=C4F83E0 C4A89609
00408D25  |.  8BC2          mov eax,edx
00408D27  |.  33D2          xor edx,edx
00408D29  |.  C1E8 12       shr eax,12-------------------------C4F83E0 shr 12=313
00408D2C  |.  F7F5          div ebp----------------------------div 0xA=4E 余 7
00408D2E  |.  B8 8F588B4F   mov eax,4F8B588F------const_one
00408D33  |.  895424 30     mov dword ptr ss:[esp+30],edx===保存余数,记为:coneight_regtwo
00408D37  |.  F7E1          mul ecx--------------const_one mul regtwo=E977FE0 D74AEE2D
00408D39  |.  8BC1          mov eax,ecx
00408D3B  |.  2BC2          sub eax,edx------------------------regtwo-E977FE0=205E93A3
00408D3D  |.  D1E8          shr eax,1--------------------------205E93A3 shr 1=102F49D1
00408D3F  |.  03C2          add eax,edx------------------------102F49D1+E977FE0=1EC6C9B1
00408D41  |.  C1E8 10       shr eax,10-------------------------shr 10=1EC6
00408D44  |.  33D2          xor edx,edx
00408D46  |.  F7F5          div ebp----------------------------div 0xA=313 余 8
00408D48  |.  B8 5917B7D1   mov eax,D1B71759------const_two
00408D4D  |.  895424 34     mov dword ptr ss:[esp+34],edx===保存余数,记为:conone_regtwo
00408D51  |.  F7E1          mul ecx--------------const_two mul regtwo=26787C1E 54F28D8B
00408D53  |.  8BC2          mov eax,edx
00408D55  |.  33D2          xor edx,edx
00408D57  |.  C1E8 0D       shr eax,0D-------------------------26787C1E shr 0xD=133C3
00408D5A  |.  F7F5          div ebp----------------------------div 0xA=1EC6 余 7
00408D5C  |.  B8 D34D6210   mov eax,10624DD3-----const_three
00408D61  |.  895424 38     mov dword ptr ss:[esp+38],edx===保存余数,记为:contwo_regtwo
00408D65  |.  F7E1          mul ecx-------------const_three  mul regtwo=30169B2 60D67BF9
00408D67  |.  8BC2          mov eax,edx
00408D69  |.  33D2          xor edx,edx
00408D6B  |.  C1E8 06       shr eax,6------------------------30169B2 shr 6=C05A6
00408D6E  |.  F7F5          div ebp--------------------------div 0xA=133C3 余 8
00408D70  |.  B8 1F85EB51   mov eax,51EB851F-----const_four
00408D75  |.  895424 3C     mov dword ptr ss:[esp+3C],edx===保存余数,记为:conthree_regtwo
00408D79  |.  F7E1          mul ecx-------------const_four mul regtwo=F07107B E4306BDD
00408D7B  |.  8BC2          mov eax,edx
00408D7D  |.  33D2          xor edx,edx
00408D7F  |.  C1E8 05       shr eax,5------------------------F07107B shr 5=783883
00408D82  |.  F7F5          div ebp--------------------------div 0xA=C05A6 余 7
00408D84  |.  B8 CDCCCCCC   mov eax,CCCCCCCD----const_five
00408D89  |.  895424 40     mov dword ptr ss:[esp+40],edx===保存余数,记为:confour_regtwo
00408D8D  |.  F7E1          mul ecx-------------------------const_five mul regtwo=2591A935 A2FE03E9
00408D8F  |.  8BC2          mov eax,edx
00408D91  |.  33D2          xor edx,edx
00408D93  |.  C1E8 03       shr eax,3----------------------2591A935 shr 3=4B23526
00408D96  |.  F7F5          div ebp------------------------div 0xA=783883 余 8
00408D98  |.  8BC1          mov eax,ecx
00408D9A  |.  B9 0A000000   mov ecx,0A
00408D9F  |.  8BEA          mov ebp,edx===================保存余数,记为:confive_regtwo
00408DA1  |.  33D2          xor edx,edx
00408DA3  |.  F7F1          div ecx---regtwo div 0xA=04B23526 余 7====被置于EDX中,记为regtwo_num
00408DA5  |.  8B4424 3C     mov eax,dword ptr ss:[esp+3C]
00408DA9  |.  8D0C02        lea ecx,dword ptr ds:[edx+eax]
00408DAC  |.  8B4424 34     mov eax,dword ptr ss:[esp+34]
00408DB0  |.  8B5424 30     mov edx,dword ptr ss:[esp+30]
00408DB4  |.  03C8          add ecx,eax
00408DB6  |.  8B4424 28     mov eax,dword ptr ss:[esp+28]
00408DBA  |.  03CA          add ecx,edx
00408DBC  |.  8B5424 24     mov edx,dword ptr ss:[esp+24]
00408DC0  |.  03C8          add ecx,eax
00408DC2  |.  03CA          add ecx,edx
00408DC4  |.  03CF          add ecx,edi
00408DC6  |.  03CE          add ecx,esi
///////////////////////////////////////////////////////////////////////////
[esp+3C]==============》conthree_regtwo=8
edx     ==============》regtwo_num     =7
[esp+34]==============》conone_regtwo  =8
[esp+30]==============》coneight_regtwo=7
[esp+28]==============》consix_regtwo  =7
[esp+24]==============》regone_num     =6
edi     ==============》confour_regone =4
esi     ==============》conone_regone  =1
累加:
这里是:8+7+8+7+7+6+4+1=0x30
///////////////////////////////////////////////////////////////////////////
00408DC8  |.  BE 0A000000   mov esi,0A
00408DCD  |.  8D41 04       lea eax,dword ptr ds:[ecx+4]====0x30+4=0x34
00408DD0  |.  99            cdq
00408DD1  |.  F7FE          idiv esi===============0x34对0xA取余得到2
00408DD3  |.  3BD3          cmp edx,ebx  >>>>>>>>第一次比较,EBX中是confive_regone,即常数0xCCCCCCCD和注册码第一部分运算的结果
00408DD5  |.  74 0C         je short menumake.00408DE3
00408DD7  |.  5F            pop edi
00408DD8  |.  5E            pop esi
00408DD9  |.  5D            pop ebp
00408DDA  |.  33C0          xor eax,eax
00408DDC  |.  5B            pop ebx
00408DDD  |.  83C4 3C       add esp,3C
00408DE0  |.  C2 0800       retn 8
00408DE3  |> \03CA          add ecx,edx==================如果上面跳转成功,这里加上余数,0x30+2=0x32
00408DE5  |.  BE 0A000000   mov esi,0A
00408DEA  |.  8D41 01       lea eax,dword ptr ds:[ecx+1]===再加1
00408DED  |.  99            cdq
00408DEE  |.  F7FE          idiv esi=======================依旧对0xA取余
00408DF0  |.  3B5424 18     cmp edx,dword ptr ss:[esp+18]==conthree_regone
00408DF4  |.  74 0C         je short menumake.00408E02
00408DF6  |.  5F            pop edi
00408DF7  |.  5E            pop esi
00408DF8  |.  5D            pop ebp
00408DF9  |.  33C0          xor eax,eax
00408DFB  |.  5B            pop ebx
00408DFC  |.  83C4 3C       add esp,3C
00408DFF  |.  C2 0800       retn 8
00408E02  |>  03CA          add ecx,edx
00408E04  |.  BE 0A000000   mov esi,0A
00408E09  |.  8D41 08       lea eax,dword ptr ds:[ecx+8]
00408E0C  |.  99            cdq
00408E0D  |.  F7FE          idiv esi
00408E0F  |.  3B5424 2C     cmp edx,dword ptr ss:[esp+2C]===conseven_regtwo:>>>>第二次比较
00408E13  |.  74 0C         je short menumake.00408E21
00408E15  |.  5F            pop edi
00408E16  |.  5E            pop esi
00408E17  |.  5D            pop ebp
00408E18  |.  33C0          xor eax,eax
00408E1A  |.  5B            pop ebx
00408E1B  |.  83C4 3C       add esp,3C
00408E1E  |.  C2 0800       retn 8
00408E21  |>  03CA          add ecx,edx
00408E23  |.  BE 0A000000   mov esi,0A
00408E28  |.  8D41 05       lea eax,dword ptr ds:[ecx+5]
00408E2B  |.  99            cdq
00408E2C  |.  F7FE          idiv esi
00408E2E  |.  3B5424 40     cmp edx,dword ptr ss:[esp+40]====confour_regtwo:>>>>>第三次比较
00408E32  |.  74 0C         je short menumake.00408E40
00408E34  |.  5F            pop edi
00408E35  |.  5E            pop esi
00408E36  |.  5D            pop ebp
00408E37  |.  33C0          xor eax,eax
00408E39  |.  5B            pop ebx
00408E3A  |.  83C4 3C       add esp,3C
00408E3D  |.  C2 0800       retn 8
00408E40  |>  03CA          add ecx,edx
00408E42  |.  BE 0A000000   mov esi,0A
00408E47  |.  8D41 09       lea eax,dword ptr ds:[ecx+9]
00408E4A  |.  99            cdq
00408E4B  |.  F7FE          idiv esi
00408E4D  |.  3BD5          cmp edx,ebp==============confive_regtwo:>>>>第四次比较
00408E4F  |.  74 0C         je short menumake.00408E5D
00408E51  |.  5F            pop edi
00408E52  |.  5E            pop esi
00408E53  |.  5D            pop ebp
00408E54  |.  33C0          xor eax,eax
00408E56  |.  5B            pop ebx
00408E57  |.  83C4 3C       add esp,3C
00408E5A  |.  C2 0800       retn 8
00408E5D  |>  03CA          add ecx,edx
00408E5F  |.  BE 0A000000   mov esi,0A
00408E64  |.  8D41 01       lea eax,dword ptr ds:[ecx+1]
00408E67  |.  99            cdq
00408E68  |.  F7FE          idiv esi
00408E6A  |.  3B5424 38     cmp edx,dword ptr ss:[esp+38]======contwo_regtwo:>>>>第五次比较
00408E6E  |.  74 0C         je short menumake.00408E7C
00408E70  |.  5F            pop edi
00408E71  |.  5E            pop esi
00408E72  |.  5D            pop ebp
00408E73  |.  33C0          xor eax,eax
00408E75  |.  5B            pop ebx
00408E76  |.  83C4 3C       add esp,3C
00408E79  |.  C2 0800       retn 8
00408E7C  |>  8D440A 02     lea eax,dword ptr ds:[edx+ecx+2]
00408E80  |.  B9 0A000000   mov ecx,0A
00408E85  |.  99            cdq
00408E86  |.  F7F9          idiv ecx
00408E88  |.  8B4C24 14     mov ecx,dword ptr ss:[esp+14]======contwo_regone:>>>>第六次比较
00408E8C  |.  33C0          xor eax,eax
00408E8E  |.  5F            pop edi
00408E8F  |.  5E            pop esi
00408E90  |.  5D            pop ebp
00408E91  |.  5B            pop ebx
00408E92  |.  3BD1          cmp edx,ecx
00408E94  |.  0F94C0        sete al==================全部比较通过,则置标志,置al为1
00408E97  |.  83C4 3C       add esp,3C
00408E9A  \.  C2 0800       retn 8

=====================================================================================
全部的je都跳过来了,就开始写注册表

00408EA0  /$  83EC 08       sub esp,8
00408EA3  |.  8D4424 04     lea eax,dword ptr ss:[esp+4]
00408EA7  |.  8D4C24 00     lea ecx,dword ptr ss:[esp]
00408EAB  |.  56            push esi
00408EAC  |.  50            push eax                            ; /pDisposition
00408EAD  |.  51            push ecx                            ; |pHandle
00408EAE  |.  6A 00         push 0                              ; |pSecurity = NULL
00408EB0  |.  68 3F000F00   push 0F003F                         ; |Access = KEY_ALL_ACCESS
00408EB5  |.  6A 00         push 0                              ; |Options = REG_OPTION_NON_VOLATILE
00408EB7  |.  68 506C4700   push menumake.00476C50              ; |Class = ""
00408EBC  |.  6A 00         push 0                              ; |Reserved = 0
00408EBE  |.  68 68074700   push menumake.00470768              ; |Subkey = "SOFTWARE\Selteco\Menu Maker"
00408EC3  |.  68 02000080   push 80000002                       ; |hKey = HKEY_LOCAL_MACHINE
00408EC8  |.  FF15 10904500 call dword ptr ds:[<&ADVAPI32.RegCr>; \RegCreateKeyExA

======================================================================================
注册机源码:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
传一个盗版的Crackme
上传的附件:
2006-9-4 11:13
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
不错,现在的软件要跟算法可能要靠点运气了,来个长城代码,那时看你晕还是他死
2006-9-4 12:48
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
发我盗窃的Crackme源码,和它的注册机源码,哈……

unit M_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TM_Form = class(TForm)
    Edt_regone: TEdit;
    Lbl_Link: TLabel;
    Edt_regtwo: TEdit;
    Btn_OK: TButton;
    Btn_Exit: TButton;
    Lbl_Me: TLabel;
    procedure Btn_ExitClick(Sender: TObject);
    procedure Btn_OKClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  M_Form: TM_Form;

implementation

{$R *.dfm}

procedure TM_Form.Btn_ExitClick(Sender: TObject);
begin
  self.Close;
end;

procedure TM_Form.Btn_OKClick(Sender: TObject);
var
  regone,regtwo:longword;
  temp:int64;
  Hi_tmp,tmp:longword;
  mod_num:longword;
  //////////////////////////////////////////////////////////////////////////////
  conone_regone,contwo_regone,conthree_regone,confour_regone,confive_regone:word;
  conone_regtwo,contwo_regtwo,conthree_regtwo,confour_regtwo,confive_regtwo:word;
  consix_regtwo,conseven_regtwo,coneight_regtwo:word;
  regone_num,regtwo_num:word;
  //////////////////////////////////////////////////////////////////////////////
const
  const_one=$4F8B588F;
  const_two=$D1B71759;
  const_three=$10624DD3;
  const_four=$51EB851F;
  const_five=$CCCCCCCD;
  const_six=$55E63B89;
  const_seven=$6B5FCA6B;
  const_eight=$431BDE83;
  const_A=$A;
begin
  if length(Edt_regone.Text)<6 then
  Begin
    showmessage('regone length must be 6');
    Edt_regone.SetFocus ;
    exit;
  End;
  if length(Edt_regtwo.text)<9 then
  Begin
    showmessage('regtwo length must be 9');
    Edt_regtwo.SetFocus ;
    exit;
  End;
  regone:=strtoint(Edt_regone.Text);
  regtwo:=strtoint(Edt_regtwo.Text);
  temp:=int64(regone) * const_one;
  Hi_tmp:=temp shr $20;                //取高位
  tmp:=regone-Hi_tmp;
  tmp:=tmp shr 1;
  tmp:=tmp + Hi_tmp;
  tmp:=tmp shr $10;
  conone_regone:= tmp mod const_A;     //ESI

  temp:=int64(regone) * const_two;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $D;
  contwo_regone:= tmp mod const_A;     //ESP+14

  temp:=int64(regone) * const_three;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $6;
  conthree_regone:= tmp mod const_A;   //ESP+18

  temp:=int64(regone) * const_four;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $5;
  confour_regone:= tmp mod const_A;    // EDI

  temp:=int64(regone) * const_five;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $3;
  confive_regone:= tmp mod const_A;    // EBX

  regone_num:=regone mod const_A;      //ESP+24

  temp:=int64(regtwo) * const_six;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $19;
  consix_regtwo:=tmp mod const_A;      //ESP+28

  temp:=int64(regtwo) * const_seven;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $16;
  conseven_regtwo:=tmp mod const_A;    //ESP+2C

  temp:=int64(regtwo) * const_eight;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $12;
  coneight_regtwo:=tmp mod const_A;    // ESP+30

  temp:=int64(regtwo) * const_one;
  Hi_tmp:=temp shr $20;
  tmp:=regtwo-Hi_tmp;
  tmp:=tmp shr 1;
  tmp:=tmp+Hi_tmp;
  tmp:=tmp shr $10;
  conone_regtwo:=tmp mod const_A;      // ESP+34

  temp:=int64(regtwo) * const_two;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $D;
  contwo_regtwo:=tmp mod const_A;      //ESP+ 38

  temp:=int64(regtwo) * const_three;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $6;
  conthree_regtwo:=tmp mod const_A;    //ESP+3C

  temp:=int64(regtwo) * const_four;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $5;
  confour_regtwo:=tmp mod const_A;     // ESP+40

  temp:=int64(regtwo) * const_five;
  Hi_tmp:=temp shr $20;
  tmp:=Hi_tmp shr $3;
  confive_regtwo:=tmp mod const_A;    //EBP

  regtwo_num:=regtwo mod const_A;     //EDX

  tmp:=conthree_regtwo+regtwo_num+conone_regtwo+coneight_regtwo+consix_regtwo+
       regone_num+confour_regone+conone_regone;
////////////////////////////////////////////////////////////
////////                  下面开始比较           ///////////
////////////////////////////////////////////////////////////
  mod_num:=(tmp+4)mod const_A;
  if mod_num<>confive_regone then exit;    //ebx
  tmp:=tmp+mod_num;
  mod_num:=(tmp+1)mod const_A;
  if mod_num<> conthree_regone then exit;  //esp+18
  tmp:=tmp+mod_num;
  mod_num:=(tmp+8) mod const_A;
  if mod_num<>conseven_regtwo then exit;   //esp+2C
  tmp:=tmp+mod_num;
  mod_num:=(tmp+5) mod const_A;
  if mod_num<>confour_regtwo then exit;    //esp+40
  tmp:=tmp+mod_num;
  mod_num:=(tmp+9) mod const_A;
  if mod_num<>confive_regtwo then exit;    //ebp
  tmp:=tmp+mod_num;
  mod_num:=(tmp+1) mod const_A;
  if mod_num<>contwo_regtwo then exit;     //esp+38
  tmp:=tmp+mod_num+2;
  mod_num:=tmp mod const_A;
  if mod_num<>contwo_regone then exit;     //esp+14
  showmessage('you are great!');           //注册成功的提示!
end;

end.

////////////////////////////////////////////////////////////////////////////////////////////
注册机:
////////////////////////////////////////////////////////////////////////////////////////////
unit M_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TM_Form = class(TForm)
    Edt_regone: TEdit;
    Lbl_Link: TLabel;
    Edt_regtwo: TEdit;
    Btn_OK: TButton;
    procedure FormPaint(Sender: TObject);
    procedure Btn_OKClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  M_Form: TM_Form;

implementation

{$R *.dfm}

procedure TM_Form.FormPaint(Sender: TObject);
begin
  Edt_regtwo.SetFocus ;
end;

procedure TM_Form.Btn_OKClick(Sender: TObject);
var
  reg1:array[1..6] of integer;
  reg2:array[1..9] of integer;
  i,sum:integer;
  rleft,rright:string;
begin
  randomize;
  reg2[6]:=random(9);
  reg2[9]:=random(9);
  reg2[4]:=random(9);
  reg2[3]:=random(9);
  reg2[1]:=random(9);
  reg1[6]:=random(9);
  reg1[4]:=random(9);
  reg1[1]:=random(9);
  sum:=reg2[6]+reg2[9]+reg2[4]+reg2[3]+reg2[1]+reg1[6]+reg1[4]+reg1[1];
  reg1[5]:=(sum+4)mod $A;
  sum:=sum+reg1[5];
  reg1[3]:=(sum+1) mod $A;
  sum:=sum+reg1[3];
  reg2[2]:=(sum+8)mod $A;
  sum:=sum+reg2[2];
  reg2[7]:=(sum+5)mod $A;
  sum:=sum+reg2[7];
  reg2[8]:=(sum+9)mod $A;
  sum:=sum+reg2[8];
  reg2[5]:=(sum+1)mod $A;
  reg1[2]:=(sum+reg2[5]+2) mod $A;
  for i:=low(reg1) to high(reg1) do
  rleft:=rleft+inttostr(reg1[i]);
  for i:=low(reg2) to high(reg2) do
  rright:=rright+inttostr(reg2[i]);
  Edt_regone.text:=rleft;
  Edt_regtwo.text:=rright;
end;

end.
2006-9-4 15:27
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
5
该注册算法的优点在于,明明是逐个取注册码,但是却是经过漫长的运算得来。
这个贴子到这里就算是全部写完了。
不要怪我罗嗦呀。
QQ:339171218
不要因为要学解密而加我。因为我不懂解密,你要是加我,会让我不知该拒绝还是接受。
bye
2006-9-4 15:34
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
学习
2006-9-4 15:47
0
雪    币: 50
活跃值: (145)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
7
顶一下,支持
2006-9-4 18:08
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这么复杂的算法都搞定了,还不会解密?楼主太谦虚了哟!
佩服。。。
2006-9-4 21:27
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
其实算法很简单,软件只不过在打迷踪拳而已。
2006-9-5 09:53
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
支持wofan!!!
2006-9-5 11:42
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
11
谦虚的过了头就是骄傲!
2006-9-5 12:33
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
12
最初由 happytown 发布
谦虚的过了头就是骄傲!


就是就是!
2006-9-5 14:42
0
游客
登录 | 注册 方可回帖
返回
//