【破文标题】简单的TxtEdit 4.5.2注册算法
【破文作者】XXNB
【作者邮箱】支持PYG
【作者主页】http://free.ys168.com/?binbinbin7456
【破解工具】OD
【破解平台】xpsp2
【软件名称】TxtEdit 4.5.2
【软件大小】924KB
【原版下载】http://www.onlinedown.net/soft/23539.htm
【保护方式】名+码
【软件简介】文本编辑器,有拼写检查功能! 
软件语言:英文
软件类别:国外软件/共享版/编辑软件
运行环境:Win9x/Me/NT/2000/XP/2003
加入时间:2006-11-20 9:22:12
下载次数:901
【破解声明】向大侠们学习!!!只为学习!
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------

1、用delphi的利器,dede。我们很容易就找到按钮的断点。“找到关键断点,成功一半”

我们输入信息:regname:binbin
              regNO:  123456789
经过我的分析后,输入的注册码要大于“10000000”。具体看下面的代码分析。


004E7080   $  55            push    ebp
004E7081   .  8BEC          mov     ebp, esp
004E7083   .  B9 04000000   mov     ecx, 4
004E7088   >  6A 00         push    0
004E708A   .  6A 00         push    0
004E708C   .  49            dec     ecx
004E708D   .^ 75 F9         jnz     short 004E7088
004E708F   .  51            push    ecx
004E7090   .  53            push    ebx
004E7091   .  56            push    esi
004E7092   .  57            push    edi
004E7093   .  8945 FC       mov     dword ptr [ebp-4], eax
004E7096   .  33C0          xor     eax, eax
004E7098   .  55            push    ebp
004E7099   .  68 A8724E00   push    004E72A8
004E709E   .  64:FF30       push    dword ptr fs:[eax]
004E70A1   .  64:8920       mov     dword ptr fs:[eax], esp
004E70A4   .  C745 F0 00000>mov     dword ptr [ebp-10], 0
004E70AB   .  C745 F4 00000>mov     dword ptr [ebp-C], 0
004E70B2   .  8D55 EC       lea     edx, dword ptr [ebp-14]
004E70B5   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004E70B8   .  8B80 28030000 mov     eax, dword ptr [eax+328]
004E70BE   .  E8 DD80F8FF   call    0046F1A0
004E70C3   .  8B45 EC       mov     eax, dword ptr [ebp-14]          ;  用户名出现了 binbin
004E70C6   .  E8 69D7F1FF   call    00404834                         ;  计算位数
004E70CB   .  8BD8          mov     ebx, eax
004E70CD   .  4B            dec     ebx
004E70CE   .  85DB          test    ebx, ebx
004E70D0   .  7E 34         jle     short 004E7106
004E70D2   .  BE 01000000   mov     esi, 1
004E70D7   >  8D55 E8       lea     edx, dword ptr [ebp-18]
004E70DA   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004E70DD   .  8B80 28030000 mov     eax, dword ptr [eax+328]
004E70E3   .  E8 B880F8FF   call    0046F1A0
004E70E8   .  8B45 E8       mov     eax, dword ptr [ebp-18]          ;  用户名
004E70EB   .  8A4430 FF     mov     al, byte ptr [eax+esi-1]         ;  逐个取用户名
004E70EF   .  25 FF000000   and     eax, 0FF                         ;  得到ascii码值
004E70F4   .  33D2          xor     edx, edx
004E70F6   .  0345 F0       add     eax, dword ptr [ebp-10]          ;  加上一次的结果
004E70F9   .  1355 F4       adc     edx, dword ptr [ebp-C]
004E70FC      8945 F0       mov     dword ptr [ebp-10], eax          ;  存储结果
004E70FF   .  8955 F4       mov     dword ptr [ebp-C], edx
004E7102   .  46            inc     esi
004E7103   .  4B            dec     ebx
004E7104   .^ 75 D1         jnz     short 004E70D7                   ;  累加用户名ascii码值,存储在ebp-10。注意了,要去掉最后

一位,就是说,最后一位不累加
004E7106   >  33C0          xor     eax, eax                         ;  204(516)去掉最后一位的累加值
004E7108   .  55            push    ebp
004E7109   .  68 7F714E00   push    004E717F
004E710E   .  64:FF30       push    dword ptr fs:[eax]
004E7111   .  64:8920       mov     dword ptr fs:[eax], esp
004E7114   .  8D55 E4       lea     edx, dword ptr [ebp-1C]
004E7117   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004E711A   .  8B80 2C030000 mov     eax, dword ptr [eax+32C]
004E7120   .  E8 7B80F8FF   call    0046F1A0
004E7125   .  8B45 E4       mov     eax, dword ptr [ebp-1C]          ;  假码出现了,还有位数
004E7128   .  E8 2B25F2FF   call    00409658                         ;  哇,转成16进制
004E712D   .  0345 F0       add     eax, dword ptr [ebp-10]          ;  加上用户名的累加值
004E7130   .  1355 F4       adc     edx, dword ptr [ebp-C]
004E7133   .  8945 F0       mov     dword ptr [ebp-10], eax
004E7136   .  8955 F4       mov     dword ptr [ebp-C], edx
004E7139   .  837D F4 00    cmp     dword ptr [ebp-C], 0
004E713D   .  75 0B         jnz     short 004E714A
004E713F      817D F0 80969>cmp     dword ptr [ebp-10], 989680       ;  和“10000000”比较
004E7146   .  72 10         jb      short 004E7158                   ;  小于的话跳。跳就失败,所以一定要大于
004E7148   .  EB 02         jmp     short 004E714C
004E714A   >  7C 0C         jl      short 004E7158
004E714C   >  8B45 FC       mov     eax, dword ptr [ebp-4]
004E714F   .  83B8 3C030000>cmp     dword ptr [eax+33C], 5
004E7156   .  7E 1D         jle     short 004E7175
004E7158   >  8B0D 4CF94F00 mov     ecx, dword ptr [4FF94C]          ;  TxtEdit.005019BC
004E715E   .  8B89 78010000 mov     ecx, dword ptr [ecx+178]
004E7164   .  B2 01         mov     dl, 1
004E7166   .  A1 D4884000   mov     eax, dword ptr [4088D4]
004E716B   .  E8 BC60F2FF   call    0040D22C
004E7170   .  E8 13CEF1FF   call    00403F88
004E7175   >  33C0          xor     eax, eax
004E7177   .  5A            pop     edx
004E7178   .  59            pop     ecx
004E7179   .  59            pop     ecx
004E717A   .  64:8910       mov     dword ptr fs:[eax], edx
004E717D   .  EB 28         jmp     short 004E71A7
004E717F   .^ E9 44CCF1FF   jmp     00403DC8
004E7184      01            db      01
004E7185      00            db      00
004E7186      00            db      00
004E7187      00            db      00
004E7188   .  D4884000      dd      TxtEdit.004088D4
004E718C   .  90714E00      dd      TxtEdit.004E7190
004E7190   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004E7193   .  E8 E0060000   call    004E7878
004E7198   .  E8 67CEF1FF   call    00404004
004E719D   .  E9 EB000000   jmp     004E728D
004E71A2   .  E8 5DCEF1FF   call    00404004
004E71A7   >  6A 00         push    0
004E71A9   .  68 2F220000   push    222F                             ;  注意这个常数222F
004E71AE   .  8B45 F0       mov     eax, dword ptr [ebp-10]          ;  假码16进制到eax
004E71B1   .  8B55 F4       mov     edx, dword ptr [ebp-C]
004E71B4   .  E8 5BE6F1FF   call    00405814                         ;  这个是算法call了,它返回的是注册码+用户名累加值除以

222F后的余数。返回一定要是0
004E71B9   .  83FA 00       cmp     edx, 0                           ;  经过上面的call。如果要等于0的话就是说,注册码+用户名

累加值后一定要能整除222F
004E71BC   .  0F85 A8000000 jnz     004E726A
004E71C2   .  83F8 00       cmp     eax, 0                           ;  余数为0就注册成功
004E71C5      0F85 9F000000 jnz     004E726A                         ;  关键跳转
004E71CB   .  C605 A0195000>mov     byte ptr [5019A0], 1
004E71D2   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004E71D5   .  8B80 28030000 mov     eax, dword ptr [eax+328]
004E71DB   .  BA 0F0000FF   mov     edx, FF00000F
004E71E0   .  E8 5B81F8FF   call    0046F340
004E71E5   .  8B45 FC       mov     eax, dword ptr [ebp-4]          ;下面这些是注册成功的信息。收工
004E71E8   .  8B80 2C030000 mov     eax, dword ptr [eax+32C]
004E71EE   .  BA 0F0000FF   mov     edx, FF00000F
004E71F3   .  E8 4881F8FF   call    0046F340
004E71F8   .  8D55 E0       lea     edx, dword ptr [ebp-20]
004E71FB   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004E71FE   .  8B80 28030000 mov     eax, dword ptr [eax+328]
004E7204   .  E8 977FF8FF   call    0046F1A0
004E7209   .  8B4D E0       mov     ecx, dword ptr [ebp-20]
004E720C   .  A1 D0F74F00   mov     eax, dword ptr [4FF7D0]
004E7211   .  8B00          mov     eax, dword ptr [eax]
004E7213   .  8B80 EC040000 mov     eax, dword ptr [eax+4EC]
004E7219   .  BA 22000000   mov     edx, 22
004E721E   .  8B18          mov     ebx, dword ptr [eax]
004E7220   .  FF53 20       call    dword ptr [ebx+20]
004E7223   .  8D55 DC       lea     edx, dword ptr [ebp-24]
004E7226   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004E7229   .  8B80 2C030000 mov     eax, dword ptr [eax+32C]
004E722F   .  E8 6C7FF8FF   call    0046F1A0
004E7234   .  8B4D DC       mov     ecx, dword ptr [ebp-24]
004E7237   .  A1 D0F74F00   mov     eax, dword ptr [4FF7D0]
004E723C   .  8B00          mov     eax, dword ptr [eax]
004E723E   .  8B80 EC040000 mov     eax, dword ptr [eax+4EC]
004E7244   .  BA 23000000   mov     edx, 23
004E7249   .  8B18          mov     ebx, dword ptr [eax]
004E724B   .  FF53 20       call    dword ptr [ebx+20]
004E724E   .  8B15 4CF94F00 mov     edx, dword ptr [4FF94C]          ;  TxtEdit.005019BC
004E7254   .  8B92 80010000 mov     edx, dword ptr [edx+180]
004E725A   .  8B45 FC       mov     eax, dword ptr [ebp-4]
004E725D   .  8B80 20030000 mov     eax, dword ptr [eax+320]
004E7263   .  E8 687FF8FF   call    0046F1D0
004E7268   .  EB 08         jmp     short 004E7272
004E726A   >  8B45 FC       mov     eax, dword ptr [ebp-4]
004E726D   .  E8 06060000   call    004E7878
004E7272   >  8A15 A1195000 mov     dl, byte ptr [5019A1]
004E7278   .  80F2 01       xor     dl, 1
004E727B   .  0A15 A0195000 or      dl, byte ptr [5019A0]
004E7281   .  A1 D0F74F00   mov     eax, dword ptr [4FF7D0]
004E7286   .  8B00          mov     eax, dword ptr [eax]
004E7288   .  E8 EF230100   call    004F967C
004E728D   >  33C0          xor     eax, eax
004E728F   .  5A            pop     edx
004E7290   .  59            pop     ecx
004E7291   .  59            pop     ecx
004E7292   .  64:8910       mov     dword ptr fs:[eax], edx
004E7295   .  68 AF724E00   push    004E72AF
004E729A   >  8D45 DC       lea     eax, dword ptr [ebp-24]
004E729D   .  BA 05000000   mov     edx, 5
004E72A2   .  E8 F1D2F1FF   call    00404598
004E72A7   .  C3            retn


2、


.版本 2

.程序集 窗口程序集1

.子程序 _按钮1_被单击
.局部变量 name, 文本型
.局部变量 len, 整数型
.局部变量 code, 长整数型
.局部变量 i, 整数型
.局部变量 eax, 整数型
.局部变量 sum, 整数型

name = 编辑框1.内容
len = 取文本长度 (name)
len = len - 1
.计次循环首 (len, i)
    eax = 取代码 (name, i)
    sum = sum + eax
.计次循环尾 ()

code = 8751 × 8751 - sum

编辑框2.内容 = 到文本 (code)

【破解总结】
------------------------------------------------------------------------
1、获得用户名,然后取得用户名除最后一位外的ascii码累加值。

2、然后获得输入的假码,加上上面的用户名累加值。结果如果能整除8751的话。就注册成功。