长天游戏加速器[超强版] 注册算法分析(入门级)

日期:2005年9月28日  破解人:Baby2008[BCG][FCG][PCG]

-------------------------------------------------------------------------------------------------------------------------
『软件名称』:长天游戏加速器[超强版]
『软件大小』:759 KB
『下载地址』:http://www.soreport.com/SpeedUp3.EXE
『软件介绍』:
           该版本在原2.0基础之上,经过潜心开发完成。1)增加了进程加速模式,也就是只针对某个进程加速,而系统和其他应用程序速度

不变,节省了系统资源。2)使用进程加速模式,解决了以前有个别机器无法加速的问题。3)保留2.0原来的系统加速模式,可以根据需要选择

使用。

『保护方式』:注册码保护+试用期限1天
『破解声明』:初学Crack,只是感兴趣,,失误之处敬请诸位大侠赐教!
『破解工具』:OllyDbg.V1.10 聆风听雨汉化第二版、PeID 0.93,Dede 3.50,ASPackDie v1.41.HH
『破解过程』:


PeID 0.93查壳,ASPack 2.12 -> Alexey Solodovnikov,我懒人一个,用ASPackDie v1.41.HH搞定,默认另存为Unpacked.exe,脱了直接能运行,

OD载入,插件查找“注册成功!\n注册信息为:\n用户名:”字样,向上来到:



00481044 <>/.  55             push ebp                                         ;  <-TRegSoftFrm@btnRegClick
00481045   |.  8BEC           mov ebp,esp
00481047   |.  6A 00          push 0
00481049   |.  6A 00          push 0
0048104B   |.  6A 00          push 0
0048104D   |.  53             push ebx
0048104E   |.  8BD8           mov ebx,eax
00481050   |.  33C0           xor eax,eax
00481052   |.  55             push ebp
00481053   |.  68 64114800    push <Unpacked.->System.@HandleFinally;>
00481058   |.  64:FF30        push dword ptr fs:[eax]
0048105B   |.  64:8920        mov dword ptr fs:[eax],esp
0048105E   |.  A1 CC2C4A00    mov eax,dword ptr ds:[4A2CCC]
00481063   |.  8B00           mov eax,dword ptr ds:[eax]
00481065   |.  8B40 58        mov eax,dword ptr ds:[eax+58]
00481068 <>|.  E8 6316FFFF    call Unpacked.004726D0                           ;  ->ActiveX.PROPSETHDR_OSVER_KIND

(DWORD):Word;<+>
0048106D   |.  84C0           test al,al
0048106F   |.  74 1D          je short Unpacked.0048108E
00481071   |.  6A 40          push 40
00481073   |.  B9 70114800    mov ecx,Unpacked.00481170                        ;  注册成功
00481078   |.  BA 7C114800    mov edx,Unpacked.0048117C                        ;  软件已经注册!
0048107D   |.  A1 B82B4A00    mov eax,dword ptr ds:[4A2BB8]
00481082   |.  8B00           mov eax,dword ptr ds:[eax]
00481084 <>|.  E8 6FE9FEFF    call Unpacked.0046F9F8                           ;  ->Forms.TApplication.MessageBox

(TApplication;PChar;PChar;Longint):Integer;
00481089   |.  E9 B3000000    jmp Unpacked.00481141
0048108E   |>  8D55 F8        lea edx,[local.2]
00481091 <>|.  8B83 34030000  mov eax,dword ptr ds:[ebx+334]                   ;  *edtCode:N.A.
00481097 <>|.  E8 94E7FCFF    call Unpacked.0044F830                           ;  ->Controls.TControl.GetText

(TControl):TCaption;
0048109C   |.  8B45 F8        mov eax,[local.2]                                ;  试炼码
0048109F   |.  50             push eax
004810A0   |.  8D55 F4        lea edx,[local.3]
004810A3 <>|.  8B83 30030000  mov eax,dword ptr ds:[ebx+330]                   ;  *edtDDHName:N.A.
004810A9 <>|.  E8 82E7FCFF    call Unpacked.0044F830                           ;  ->Controls.TControl.GetText

(TControl):TCaption;
004810AE   |.  8B55 F4        mov edx,[local.3]                                ;  注册名
004810B1   |.  A1 CC2C4A00    mov eax,dword ptr ds:[4A2CCC]
004810B6   |.  8B00           mov eax,dword ptr ds:[eax]
004810B8   |.  8B40 58        mov eax,dword ptr ds:[eax+58]
004810BB   |.  33C9           xor ecx,ecx
004810BD   |.  E8 461AFFFF    call Unpacked.00472B08
004810C2   |.  84C0           test al,al
004810C4   |.  75 12          jnz short Unpacked.004810D8
004810C6   |.  BA 94114800    mov edx,Unpacked.00481194                        ;  注册失败!
004810CB <>|.  8B83 08030000  mov eax,dword ptr ds:[ebx+308]                   ;  *lblExpired:N.A.
004810D1 <>|.  E8 8AE7FCFF    call Unpacked.0044F860                           ;  ->Controls.TControl.SetText

(TControl;TCaption);
004810D6   |.  EB 69          jmp short Unpacked.00481141
004810D8   |>  68 A8114800    push Unpacked.004811A8                           ;  注册成功!\n注册信息为:\n用户名:
004810DD   |.  A1 CC2C4A00    mov eax,dword ptr ds:[4A2CCC]
004810E2   |.  8B00           mov eax,dword ptr ds:[eax]
004810E4   |.  8B58 58        mov ebx,dword ptr ds:[eax+58]
004810E7   |.  FF73 48        push dword ptr ds:[ebx+48]
004810EA   |.  68 D4114800    push Unpacked.004811D4                           ;  \n
004810EF   |.  68 D4114800    push Unpacked.004811D4                           ;  \n
004810F4   |.  68 E0114800    push Unpacked.004811E0                           ;  注册码:
004810F9   |.  A1 CC2C4A00    mov eax,dword ptr ds:[4A2CCC]
004810FE   |.  FF73 5C        push dword ptr ds:[ebx+5C]
00481101   |.  68 D4114800    push Unpacked.004811D4                           ;  \n
00481106   |.  68 F4114800    push Unpacked.004811F4                           ;  感谢您对我们的支持!请重新启动长天游戏加速

器。
0048110B   |.  8D45 FC        lea eax,[local.1]
0048110E   |.  BA 08000000    mov edx,8
00481113 <>|.  E8 B032F8FF    call Unpacked.004043C8                           ;  ->System.@LStrCatN;
00481118   |.  6A 40          push 40
0048111A   |.  8B45 FC        mov eax,[local.1]
0048111D <>|.  E8 E633F8FF    call Unpacked.00404508                           ;  ->System.@LStrToPChar(String):PAnsiChar;
00481122   |.  8BD0           mov edx,eax
00481124   |.  B9 70114800    mov ecx,Unpacked.00481170                        ;  注册成功
00481129   |.  A1 B82B4A00    mov eax,dword ptr ds:[4A2BB8]
0048112E   |.  8B00           mov eax,dword ptr ds:[eax]
00481130 <>|.  E8 C3E8FEFF    call Unpacked.0046F9F8                           ;  ->Forms.TApplication.MessageBox

(TApplication;PChar;PChar;Longint):Integer;
00481135   |.  A1 B82B4A00    mov eax,dword ptr ds:[4A2BB8]
0048113A   |.  8B00           mov eax,dword ptr ds:[eax]
0048113C <>|.  E8 13E8FEFF    call Unpacked.0046F954                           ;  ->Forms.TApplication.Terminate

(TApplication);
00481141   |>  33C0           xor eax,eax
00481143   |.  5A             pop edx
00481144   |.  59             pop ecx
00481145   |.  59             pop ecx
00481146   |.  64:8910        mov dword ptr fs:[eax],edx
00481149   |.  68 6B114800    push Unpacked.0048116B
0048114E   |>  8D45 F4        lea eax,[local.3]
00481151   |.  BA 02000000    mov edx,2
00481156 <>|.  E8 112FF8FF    call Unpacked.0040406C                           ;  ->System.@LStrArrayClr(void;void;Integer);
0048115B   |.  8D45 FC        lea eax,[local.1]
0048115E <>|.  E8 E52EF8FF    call Unpacked.00404048                           ;  ->System.@LStrClr(void;void);
00481163   \.  C3             retn
00481164 <> .^ E9 E328F8FF    jmp Unpacked.00403A4C                            ;  ->System.@HandleFinally;
00481169    .^ EB E3          jmp short Unpacked.0048114E
0048116B    .  5B             pop ebx
0048116C    .  8BE5           mov esp,ebp
0048116E    .  5D             pop ebp
0048116F    .  C3             retn

很明显,004810BD   |.  E8 461AFFFF    call Unpacked.00472B08是关键,跟进:

-------------------------------------------------------------------------------------------------------------------------
00472B08   /$  55             push ebp                                         ;  (initial cpu selection)
00472B09   |.  8BEC           mov ebp,esp
00472B0B   |.  83C4 F0        add esp,-10
00472B0E   |.  53             push ebx
00472B0F   |.  33DB           xor ebx,ebx
00472B11   |.  895D F0        mov [local.4],ebx
00472B14   |.  895D F4        mov [local.3],ebx
00472B17   |.  894D F8        mov [local.2],ecx
00472B1A   |.  8955 FC        mov [local.1],edx
00472B1D   |.  8BD8           mov ebx,eax
00472B1F   |.  8B45 FC        mov eax,[local.1]
00472B22   |.  E8 D119F9FF    call Unpacked.004044F8
00472B27   |.  8B45 F8        mov eax,[local.2]
00472B2A   |.  E8 C919F9FF    call Unpacked.004044F8
00472B2F   |.  8B45 08        mov eax,[arg.1]
00472B32   |.  E8 C119F9FF    call Unpacked.004044F8
00472B37   |.  33C0           xor eax,eax
00472B39   |.  55             push ebp
00472B3A   |.  68 F22B4700    push Unpacked.00472BF2
00472B3F   |.  64:FF30        push dword ptr fs:[eax]
00472B42   |.  64:8920        mov dword ptr fs:[eax],esp
00472B45   |.  8B45 FC        mov eax,[local.1]                                ;  注册名
00472B48   |.  E8 BB17F9FF    call Unpacked.00404308                           ;  System.@LStrLen(String):Integer;
00472B4D   |.  3B43 4C        cmp eax,dword ptr ds:[ebx+4C]                    ;  64
00472B50   |.  7F 19          jg short Unpacked.00472B6B                       ;  注册名长度不能>64
00472B52   |.  8B45 FC        mov eax,[local.1]                                ;  注册名
00472B55   |.  E8 AE17F9FF    call Unpacked.00404308                           ;  System.@LStrLen(String):Integer;
00472B5A   |.  3B43 50        cmp eax,dword ptr ds:[ebx+50]                    ;  3
00472B5D   |.  7C 0C          jl short Unpacked.00472B6B                       ;  注册名长度不能<3
00472B5F   |.  8B45 08        mov eax,[arg.1]                                  ;  试炼码
00472B62   |.  E8 A117F9FF    call Unpacked.00404308                           ;  System.@LStrLen(String):Integer;
00472B67   |.  85C0           test eax,eax
00472B69   |.  75 04          jnz short Unpacked.00472B6F                      ;  试炼码长度不能为0
00472B6B   |>  33DB           xor ebx,ebx
00472B6D   |.  EB 60          jmp short Unpacked.00472BCF
00472B6F   |>  8D55 F4        lea edx,[local.3]
00472B72   |.  8B45 08        mov eax,[arg.1]                                  ;  试炼码
00472B75   |.  E8 A654F9FF    call Unpacked.00408020                           ;  转大写UpperCase():AnsiString;
00472B7A   |.  8B55 F4        mov edx,[local.3]                                ;  UpperCase(试炼码)
00472B7D   |.  8D45 08        lea eax,[arg.1]
00472B80   |.  E8 5B15F9FF    call Unpacked.004040E0
00472B85   |.  8D4D F0        lea ecx,[local.4]
00472B88   |.  8B55 FC        mov edx,[local.1]                                ;  注册名
00472B8B   |.  8BC3           mov eax,ebx
00472B8D   |.  E8 46FBFFFF    call Unpacked.004726D8                           ;  重要函数
00472B92   |.  8B45 F0        mov eax,[local.4]                                ;  注册码
00472B95   |.  8B55 08        mov edx,[arg.1]                                  ;  试炼码
00472B98   |.  E8 FB54F9FF    call Unpacked.00408098                           ;  比较CompareStr():Integer;
00472B9D   |.  85C0           test eax,eax
00472B9F   |.  74 04          je short Unpacked.00472BA5                       ;  明码比较,内存注册机或爆破点
00472BA1   |.  33DB           xor ebx,ebx
00472BA3   |.  EB 2A          jmp short Unpacked.00472BCF
00472BA5   |>  8D43 48        lea eax,dword ptr ds:[ebx+48]
00472BA8   |.  8B55 FC        mov edx,[local.1]
00472BAB   |.  E8 EC14F9FF    call Unpacked.0040409C
00472BB0   |.  8D43 54        lea eax,dword ptr ds:[ebx+54]
00472BB3   |.  8B55 F8        mov edx,[local.2]
00472BB6   |.  E8 E114F9FF    call Unpacked.0040409C
00472BBB   |.  8D43 5C        lea eax,dword ptr ds:[ebx+5C]
00472BBE   |.  8B55 08        mov edx,[arg.1]
00472BC1   |.  E8 D614F9FF    call Unpacked.0040409C
00472BC6   |.  8BC3           mov eax,ebx
00472BC8   |.  E8 5B020000    call Unpacked.00472E28
00472BCD   |.  B3 01          mov bl,1                                         ;  标志
00472BCF   |>  33C0           xor eax,eax
00472BD1   |.  5A             pop edx
00472BD2   |.  59             pop ecx
00472BD3   |.  59             pop ecx
00472BD4   |.  64:8910        mov dword ptr fs:[eax],edx
00472BD7   |.  68 F92B4700    push Unpacked.00472BF9
00472BDC   |>  8D45 F0        lea eax,[local.4]
00472BDF   |.  BA 04000000    mov edx,4
00472BE4   |.  E8 8314F9FF    call Unpacked.0040406C
00472BE9   |.  8D45 08        lea eax,[arg.1]
00472BEC   |.  E8 5714F9FF    call Unpacked.00404048
00472BF1   \.  C3             retn
00472BF2    .^ E9 550EF9FF    jmp Unpacked.00403A4C
00472BF7    .^ EB E3          jmp short Unpacked.00472BDC
00472BF9    .  8BC3           mov eax,ebx
00472BFB    .  5B             pop ebx
00472BFC    .  8BE5           mov esp,ebp
00472BFE    .  5D             pop ebp
00472BFF    .  C2 0400        retn 4
-------------------------------------------------------------------------------------------------------------------------

明码比较,我喜欢,继续跟进关键函数00472B8D   |.  E8 46FBFFFF    call Unpacked.004726D8:


-------------------------------------------------------------------------------------------------------------------------
004726D8   /$  55             push ebp
004726D9   |.  8BEC           mov ebp,esp
004726DB   |.  51             push ecx
004726DC   |.  B9 04000000    mov ecx,4
004726E1   |>  6A 00          /push 0
004726E3   |.  6A 00          |push 0
004726E5   |.  49             |dec ecx
004726E6   |.^ 75 F9          \jnz short Unpacked.004726E1
004726E8   |.  874D FC        xchg [local.1],ecx
004726EB   |.  53             push ebx
004726EC   |.  56             push esi
004726ED   |.  57             push edi
004726EE   |.  8BF9           mov edi,ecx
004726F0   |.  8955 FC        mov [local.1],edx                                ;  注册名
004726F3   |.  8BF0           mov esi,eax
004726F5   |.  8B45 FC        mov eax,[local.1]
004726F8   |.  E8 FB1DF9FF    call Unpacked.004044F8
004726FD   |.  33C0           xor eax,eax
004726FF   |.  55             push ebp
00472700   |.  68 78284700    push Unpacked.00472878
00472705   |.  64:FF30        push dword ptr fs:[eax]
00472708   |.  64:8920        mov dword ptr fs:[eax],esp
0047270B   |.  8D55 DC        lea edx,[local.9]
0047270E   |.  8BC6           mov eax,esi
00472710   |.  E8 430F0000    call Unpacked.00473658                           ;  产生机器码,没必要分析
00472715   |.  8B45 DC        mov eax,[local.9]                                ;  机器码
00472718   |.  8D55 EC        lea edx,[local.5]
0047271B   |.  E8 505BF9FF    call Unpacked.00408270                           ;  SysUtils.Trim(AnsiString);
00472720   |.  837D EC 00     cmp [local.5],0
00472724   |.  75 0D          jnz short Unpacked.00472733                      ;  机器码不为空
00472726   |.  8D45 E0        lea eax,[local.8]
00472729   |.  8B55 FC        mov edx,[local.1]
0047272C   |.  E8 AF19F9FF    call Unpacked.004040E0
00472731   |.  EB 5D          jmp short Unpacked.00472790
00472733   |>  8B45 EC        mov eax,[local.5]                                ;  机器码
00472736   |.  E8 CD1BF9FF    call Unpacked.00404308                           ;  Length(机器码)
0047273B   |.  8BD8           mov ebx,eax                                      ;  长度
0047273D   |.  8D45 E8        lea eax,[local.6]
00472740   |.  50             push eax
00472741   |.  8BCB           mov ecx,ebx                                      ;  EBX=机器码长度,记为M
00472743   |.  D1F9           sar ecx,1                                        ;  M/2
00472745   |.  79 03          jns short Unpacked.0047274A
00472747   |.  83D1 00        adc ecx,0
0047274A   |>  BA 01000000    mov edx,1                                        ;  1
0047274F   |.  8B45 EC        mov eax,[local.5]                                ;  机器码
00472752   |.  E8 111EF9FF    call Unpacked.00404568                           ;  System.@LStrCopy(机器码,1,M/2)
00472757   |.  8D45 E4        lea eax,[local.7]
0047275A   |.  50             push eax
0047275B   |.  8BC3           mov eax,ebx                                      ;  长度M
0047275D   |.  D1F8           sar eax,1                                        ;  M/2
0047275F   |.  79 03          jns short Unpacked.00472764
00472761   |.  83D0 00        adc eax,0
00472764   |>  8BCB           mov ecx,ebx
00472766   |.  2BC8           sub ecx,eax                                      ;  M-M/2
00472768   |.  8BD3           mov edx,ebx                                      ;  长度M
0047276A   |.  D1FA           sar edx,1                                        ;  M/2
0047276C   |.  79 03          jns short Unpacked.00472771
0047276E   |.  83D2 00        adc edx,0
00472771   |>  42             inc edx                                          ;  M/2+1
00472772   |.  8B45 EC        mov eax,[local.5]                                ;  机器码
00472775   |.  E8 EE1DF9FF    call Unpacked.00404568                           ;  System.@LStrCopy(机器码,M/2+1,M-M/2);
0047277A   |.  FF75 E8        push [local.6]                                   ;  机器码前6位
0047277D   |.  FF75 FC        push [local.1]                                   ;  注册名
00472780   |.  FF75 E4        push [local.7]                                   ;  机器码后6位
00472783   |.  8D45 E0        lea eax,[local.8]
00472786   |.  BA 03000000    mov edx,3
0047278B   |.  E8 381CF9FF    call Unpacked.004043C8                           ;  连接函数System.@LStrCatN;
00472790   |>  C745 F0 000000>mov [local.4],0
00472797   |.  C745 F4 000000>mov [local.3],0
0047279E   |.  8B45 FC        mov eax,[local.1]                                ;  注册名
004727A1   |.  E8 621BF9FF    call Unpacked.00404308                           ;  Length
004727A6   |.  3B46 4C        cmp eax,dword ptr ds:[esi+4C]                    ;  64
004727A9   |.  7F 0D          jg short Unpacked.004727B8
004727AB   |.  8B45 FC        mov eax,[local.1]                                ;  注册名
004727AE   |.  E8 551BF9FF    call Unpacked.00404308
004727B3   |.  3B46 50        cmp eax,dword ptr ds:[esi+50]                    ;  3
004727B6   |.  7D 0C          jge short Unpacked.004727C4
004727B8   |>  8BC7           mov eax,edi
004727BA   |.  E8 8918F9FF    call Unpacked.00404048
004727BF   |.  E9 91000000    jmp Unpacked.00472855
004727C4   |>  8B45 E0        mov eax,[local.8]                                ;  机器码前6+注册名+机器码后6位
004727C7   |.  E8 3C1BF9FF    call Unpacked.00404308                           ;  Length
004727CC   |.  8BD8           mov ebx,eax                                      ;  长度
004727CE   |.  EB 37          jmp short Unpacked.00472807
004727D0   |>  8B45 F0        /mov eax,[local.4]                               ;  初始值0
004727D3   |.  8B55 F4        |mov edx,[local.3]                               ;  0
004727D6   |.  0346 68        |add eax,dword ptr ds:[esi+68]                   ;  初始值075BCD15
004727D9   |.  1356 6C        |adc edx,dword ptr ds:[esi+6C]                   ;  0
004727DC   |.  52             |push edx                                        ;  保存
004727DD   |.  50             |push eax
004727DE   |.  8B45 E0        |mov eax,[local.8]                               ;  机器码前6+注册名+机器码后6位,记为Mach
004727E1   |.  0FB64418 FF    |movzx eax,byte ptr ds:[eax+ebx-1]               ;  从后面开始取字符
004727E6   |.  50             |push eax                                        ;  ASCII值入栈
004727E7   |.  B8 59040000    |mov eax,459                                     ;  459
004727EC   |.  5A             |pop edx                                         ;  ASCII
004727ED   |.  8BCA           |mov ecx,edx
004727EF   |.  33D2           |xor edx,edx
004727F1   |.  F7F1           |div ecx
004727F3   |.  8BC2           |mov eax,edx                                     ;  eax=459 MOD ASCII
004727F5   |.  33D2           |xor edx,edx
004727F7   |.  290424         |sub dword ptr ss:[esp],eax
004727FA   |.  195424 04      |sbb dword ptr ss:[esp+4],edx
004727FE   |.  58             |pop eax                                         ;  取出
004727FF   |.  5A             |pop edx
00472800   |.  8945 F0        |mov [local.4],eax
00472803   |.  8955 F4        |mov [local.3],edx
00472806   |.  4B             |dec ebx
00472807   |>  8B45 E0         mov eax,[local.8]                               ;  机器码前6+注册名+机器码后6位
0047280A   |.  E8 F91AF9FF    |call Unpacked.00404308                          ;  Length
0047280F   |.  3BD8           |cmp ebx,eax
00472811   |.  7F 04          |jg short Unpacked.00472817
00472813   |.  85DB           |test ebx,ebx
00472815   |.^ 7F B9          \jg short Unpacked.004727D0                      ;  循环累加,64位算法
00472817   |>  8B5E 60        mov ebx,dword ptr ds:[esi+60]
0047281A   |.  85DB           test ebx,ebx
0047281C   |.  7F 11          jg short Unpacked.0047282F
0047281E   |.  FF75 F4        push [local.3]                                   ; /Arg2
00472821   |.  FF75 F0        push [local.4]                                   ; |Arg1
00472824   |.  8BD7           mov edx,edi                                      ; |
00472826   |.  33C0           xor eax,eax                                      ; |
00472828   |.  E8 7F5CF9FF    call Unpacked.004084AC                           ; \Unpacked.004084AC
0047282D   |.  EB 26          jmp short Unpacked.00472855
0047282F   |>  FF75 F4        push [local.3]                                   ; /Arg2
00472832   |.  FF75 F0        push [local.4]                                   ; |Arg1
00472835   |.  8BD7           mov edx,edi                                      ; |
00472837   |.  8BC3           mov eax,ebx                                      ; |
00472839   |.  E8 6E5CF9FF    call Unpacked.004084AC                           ; \Unpacked.004084AC
0047283E   |.  8B07           mov eax,dword ptr ds:[edi]
00472840   |.  E8 C31AF9FF    call Unpacked.00404308                           ;  Length
00472845   |.  8BC8           mov ecx,eax
00472847   |.  2B4E 60        sub ecx,dword ptr ds:[esi+60]
0047284A   |.  8B56 60        mov edx,dword ptr ds:[esi+60]
0047284D   |.  42             inc edx
0047284E   |.  8BC7           mov eax,edi
00472850   |.  E8 531DF9FF    call Unpacked.004045A8
00472855   |>  33C0           xor eax,eax
00472857   |.  5A             pop edx
00472858   |.  59             pop ecx
00472859   |.  59             pop ecx
0047285A   |.  64:8910        mov dword ptr fs:[eax],edx
0047285D   |.  68 7F284700    push Unpacked.0047287F
00472862   |>  8D45 DC        lea eax,[local.9]
00472865   |.  BA 05000000    mov edx,5
0047286A   |.  E8 FD17F9FF    call Unpacked.0040406C
0047286F   |.  8D45 FC        lea eax,[local.1]
00472872   |.  E8 D117F9FF    call Unpacked.00404048
00472877   \.  C3             retn
00472878    .^ E9 CF11F9FF    jmp Unpacked.00403A4C
0047287D    .^ EB E3          jmp short Unpacked.00472862
0047287F    .  5F             pop edi
00472880    .  5E             pop esi
00472881    .  5B             pop ebx
00472882    .  8BE5           mov esp,ebp
00472884    .  5D             pop ebp
00472885    .  C3             retn

看来已经到达目的地了,算法很简单,就一个64位数据类型计算.

『算法总结』:

1、机器码前半部分+注册名+机器码后半部分,记为Mach;
2、初始一个int64常数:075BCD15
3、从Mach后面开始循环取字符Mach(i),Sum=075BCD15+(Sum - 459 mod Mach(i));
4、转换64位数值Sum 为12位16进制 字符串即为注册码。

Delphi 7.0注册机源代码:
Procedure TForm1.btn1Click(Sender: TObject);
Const
  Temp = $075BCD15; //常数
Var
  Sum: Int64; //累加
  i: Integer; //循环变量
  Mach: String;
Begin
  Sum := 0;
  Mach := LeftStr(edtMach.Text, Length(edtMach.Text) Div 2) + edtName.Text + RightStr(edtMach.Text, Length(edtMach.Text) - 

Length(edtMach.Text) Div 2);
  Mach := ReverseString(Mach);
  For i := 1 To Length(Mach) Do Sum := Temp + (Sum - $459 Mod Ord(Mach[i]));

  edtSN.Text := IntToHex(Sum, 12);

End;


我的注册信息:
用户名:Baby2008
机器码:00006705357E
注册码:0000932C0417


测试通过!



--完--