Nisy 发表于 2006-8-16 06:51:54

菜鸟学习算法,破解Textanz 1.4.0 BY:wzwgp

【破解软件】Textanz 1.4.0
【下载地址】http://www.newhua.com/soft/50797.htm
【运行环境】Win9x/Me/NT/2000/XP/2003
【软件类别】国外软件/共享版/编辑软件
【保护方式】UPX壳+注册码
【作者声明】初学Crack,只是感兴趣,消遣业余时间,错误之处敬请诸位前辈不吝赐教。
【调试工具】OllyDBD、PEiD
【软件信息】是一款统计词语使用频率的软件。可以扫描文本文件,统计单词、词组在文章中的使用频率。可以减少大量重复性工作,有多种

统计方式,界面友好。

一、破解过程

PEiD查壳:UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
脱壳过程略。
字串参考:"Code is valid. Thank you for registration !"   地址=00517109

在005170B0处下断,F9 点击help --> Registration断下 

005170B0/$55            PUSH EBP
005170B1|.8BEC          MOV EBP,ESP
005170B3|.6A 00         PUSH 0
005170B5|.6A 00         PUSH 0
005170B7|.6A 00         PUSH 0
005170B9|.53            PUSH EBX
005170BA|.8945 FC       MOV DWORD PTR SS:,EAX
005170BD|.8D5D FC       LEA EBX,DWORD PTR SS:
005170C0|.33C0          XOR EAX,EAX
005170C2|.55            PUSH EBP
005170C3|.68 61715100   PUSH tk.00517161
005170C8|.64:FF30       PUSH DWORD PTR FS:
005170CB|.64:8920       MOV DWORD PTR FS:,ESP
005170CE|>8D55 F8       /LEA EDX,DWORD PTR SS:
005170D1|.8B03          |MOV EAX,DWORD PTR DS:
005170D3|.8B40 64       |MOV EAX,DWORD PTR DS:
005170D6|.E8 F9C0FFFF   |CALL tk.005131D4                        ;跳出注册码输入框,输入假码:
005170DB|.84C0          |TEST AL,AL                 1234567890223456 
005170DD|.74 67         |JE SHORT tk.00517146
005170DF|.55            |PUSH EBP
005170E0|.E8 43FFFFFF   |CALL tk.00517028                        ;假码写入Textanz.ini文件
005170E5|.59            |POP ECX
005170E6|.33D2          |XOR EDX,EDX
005170E8|.8B03          |MOV EAX,DWORD PTR DS:
005170EA|.E8 E9000000   |CALL tk.005171D8                        ;关键Call F7进入
005170EF|.8B03          |MOV EAX,DWORD PTR DS:
005170F1|.8A40 60       |MOV AL,BYTE PTR DS:
005170F4|   2C 01         |SUB AL,1
005170F6|   72 06         |JB SHORT tk.005170FE                  ;跳注册成功
005170F8|.FEC8          |DEC AL
005170FA|.74 19         |JE SHORT tk.00517115
005170FC|.EB 26         |JMP SHORT tk.00517124
005170FE|>6A 00         |PUSH 0                              ;Case 0 of switch 005170F4
00517100|.66:8B0D 70715>|MOV CX,WORD PTR DS:
00517107|.B2 02         |MOV DL,2
00517109|.B8 7C715100   |MOV EAX,tk.0051717C      ;   "Code is valid. Thank you forregistration !"
0051710E|.E8 5580F7FF   |CALL tk.0048F168
00517113|.EB 31         |JMP SHORT tk.00517146
00517115|>8D45 F4       |LEA EAX,DWORD PTR SS:            ;Case 2 of switch 005170F4
00517118|.BA B0715100   |MOV EDX,tk.005171B0                     ;ASCII "Code expired"
0051711D|.E8 8ACCEEFF   |CALL tk.00403DAC
00517122|.EB 0D         |JMP SHORT tk.00517131
00517124|>8D45 F4       |LEA EAX,DWORD PTR SS:            ;Default case of switch 005170F4
00517127|.BA C8715100   |MOV EDX,tk.005171C8                     ;ASCII "Invalid code"
0051712C|.E8 7BCCEEFF   |CALL tk.00403DAC
00517131|>6A 00         |PUSH 0
00517133|.66:8B0D 70715>|MOV CX,WORD PTR DS:
0051713A|.33D2          |XOR EDX,EDX
0051713C|.8B45 F4       |MOV EAX,DWORD PTR SS:
0051713F|.E8 2480F7FF   |CALL tk.0048F168
00517144|.^ EB 88         \JMP SHORT tk.005170CE
00517146|>33C0          XOR EAX,EAX
00517148|.5A            POP EDX
00517149|.59            POP ECX
0051714A|.59            POP ECX
0051714B|.64:8910       MOV DWORD PTR FS:,EDX
0051714E|.68 68715100   PUSH tk.00517168
00517153|>8D45 F4       LEA EAX,DWORD PTR SS:
00517156|.BA 02000000   MOV EDX,2
0051715B|.E8 D8CBEEFF   CALL tk.00403D38
00517160\.C3            RETN

005170EA 关键Call F7进入

005171D8/$53            PUSH EBX
005171D9|.56            PUSH ESI
005171DA|.8BDA          MOV EBX,EDX
005171DC|.8BF0          MOV ESI,EAX
005171DE|.B2 01         MOV DL,1
005171E0|.8B46 50       MOV EAX,DWORD PTR DS:
005171E3|.8B08          MOV ECX,DWORD PTR DS:
005171E5|.FF51 30       CALL NEAR DWORD PTR DS:          ;F7进入
005171E8|.807E 60 00    CMP BYTE PTR DS:,0
005171EC|.0F95C0      SETNE AL                                 ;Al=0 注册失败
005171EF|.84D8          TEST AL,BL
005171F1|.74 0D         JE SHORT tk.00517200

005171E5 处F7来到下面:

0050E4A8   .53            PUSH EBX
0050E4A9   .56            PUSH ESI
0050E4AA   .83C4 DC       ADD ESP,-24
0050E4AD   .881424      MOV BYTE PTR SS:,DL
0050E4B0   .8BF0          MOV ESI,EAX
0050E4B2   .C64424 01 00MOV BYTE PTR SS:,0
0050E4B7   .8D5424 0A   LEA EDX,DWORD PTR SS:
0050E4BB   .8BC6          MOV EAX,ESI
0050E4BD   .66:BB EEFF    MOV BX,0FFEE
0050E4C1   .E8 2A4DEFFF   CALL tk.004031F0
0050E4C6   .8D5424 02   LEA EDX,DWORD PTR SS:
0050E4CA   .8BC6          MOV EAX,ESI
0050E4CC   .66:BB EFFF    MOV BX,0FFEF
0050E4D0   .E8 1B4DEFFF   CALL tk.004031F0                         ;检查假码
0050E4D5   .8BC6          MOV EAX,ESI
0050E4D7   .66:BB EDFF    MOV BX,0FFED
0050E4DB   .E8 104DEFFF   CALL tk.004031F0                        
0050E4E0   .8D5424 0A   LEA EDX,DWORD PTR SS:             ;4个常数地址(n1 n2 n3 n4)
0050E4E4   .B9 10000000   MOV ECX,10
0050E4E9   .E8 D2FAFFFF   CALL tk.0050DFC0
0050E4EE   .8D5424 02   LEA EDX,DWORD PTR SS:       ;假码地址
0050E4F2   .8D4424 0A   LEA EAX,DWORD PTR SS:
0050E4F6   .E8 A1010000   CALL tk.0050E69C                         ;运算假码
0050E4FB   .84C0          TEST AL,AL                               ;AL=0 注册码错误
0050E4FD   .75 07         JNZ SHORT tk.0050E506                  ;AL=01 注册码正确跳
0050E4FF   .C64424 01 01MOV BYTE PTR SS:,1
0050E504   .EB 25         JMP SHORT tk.0050E52B

-------------------中间省略--------------------------

0050E544   .83C4 24       ADD ESP,24
0050E547   .5E            POP ESI
0050E548   .5B            POP EBX
0050E549   .C3            RETN                                     ;返回到 005171E8

检查假码:
0050E4D0 处 CALL tk.004031F0F7 --->
0050E130 处 CALL NEAR DWORD PTR DS:   F7 --->
00516D24 处 E8 F369FFFF   CALL tk.0050D71C    F7到下面:

0050D71C/$55            PUSH EBP
0050D71D|.8BEC          MOV EBP,ESP
0050D71F|.83C4 E0       ADD ESP,-20
0050D722|.53            PUSH EBX

-------------------中间省略--------------------------

0050D73E|.68 16D85000   PUSH tk.0050D816
0050D743|.64:FF30       PUSH DWORD PTR FS:
0050D746|.64:8920       MOV DWORD PTR FS:,ESP
0050D749|.C645 F7 00    MOV BYTE PTR SS:,0
0050D74D|.8D45 EC       LEA EAX,DWORD PTR SS:
0050D750|.E8 BF65EFFF   CALL tk.00403D14
0050D755|.8BC7          MOV EAX,EDI
0050D757|.E8 3868EFFF   CALL tk.00403F94                     ;取得假码位数
0050D75C|.8BD8          MOV EBX,EAX                           
0050D75E|.85DB          TEST EBX,EBX
0050D760|.7E 35         JLE SHORT tk.0050D797
0050D762|.BE 01000000   MOV ESI,1
0050D767|>8A4437 FF   /MOV AL,BYTE PTR DS:      ;逐位取假码
0050D76B|.E8 0453EFFF   |CALL tk.00402A74
0050D770|.04 D0         |ADD AL,0D0
0050D772|.2C 0A         |SUB AL,0A
0050D774|.72 06         |JB SHORT tk.0050D77C                  ;在此跳下保留
0050D776|.04 F9         |ADD AL,0F9
0050D778|.2C 06         |SUB AL,6
0050D77A|.73 17         |JNB SHORT tk.0050D793               ;不跳保留,其余字符跳下剔除
0050D77C|>8D45 E8       |LEA EAX,DWORD PTR SS:
0050D77F|.8A5437 FF   |MOV DL,BYTE PTR DS:      ;假码地址
0050D783|.E8 3467EFFF   |CALL tk.00403EBC
0050D788|.8B55 E8       |MOV EDX,DWORD PTR SS:
0050D78B|.8D45 EC       |LEA EAX,DWORD PTR SS:
0050D78E|.E8 0968EFFF   |CALL tk.00403F9C
0050D793|>46            |INC ESI
0050D794|.4B            |DEC EBX                               ;EBX 计数器
0050D795|.^ 75 D0         \JNZ SHORT tk.0050D767               
0050D797|>8B45 EC       MOV EAX,DWORD PTR SS:          ;保留的假码
0050D79A|.E8 F567EFFF   CALL tk.00403F94                     ;EAX=保留的假码位数
0050D79F|.D1F8          SAR EAX,1                              ;算术右移1位
0050D7A1|.79 03         JNS SHORT tk.0050D7A6
0050D7A3|.83D0 00       ADC EAX,0
0050D7A6|>3B45 F8       CMP EAX,DWORD PTR SS:         ;比较位数是否=8
0050D7A9|.75 50         JNZ SHORT tk.0050D7FB
0050D7AB|.8B5D F8       MOV EBX,DWORD PTR SS:         ;=8
0050D7AE|.4B            DEC EBX
0050D7AF|.85DB          TEST EBX,EBX
0050D7B1|.7C 44         JL SHORT tk.0050D7F7
0050D7B3|.43            INC EBX
0050D7B4|.33F6          XOR ESI,ESI
0050D7B6|.8B7D FC       MOV EDI,DWORD PTR SS:         
0050D7B9|>8D45 E0       /LEA EAX,DWORD PTR SS:
0050D7BC|.50            |PUSH EAX
0050D7BD|.8BD6          |MOV EDX,ESI
0050D7BF|.03D2          |ADD EDX,EDX
0050D7C1|.42            |INC EDX
0050D7C2|.B9 02000000   |MOV ECX,2
0050D7C7|.8B45 EC       |MOV EAX,DWORD PTR SS:         ;保留的假码
0050D7CA|.E8 CD69EFFF   |CALL tk.0040419C
0050D7CF|.8B4D E0       |MOV ECX,DWORD PTR SS:         ;=24($)
0050D7D2|.8D45 E4       |LEA EAX,DWORD PTR SS:
0050D7D5|.BA 30D85000   |MOV EDX,tk.0050D830
0050D7DA|.E8 0168EFFF   |CALL tk.00403FE0
0050D7DF|.8B45 E4       |MOV EAX,DWORD PTR SS:
0050D7E2|.8D55 F0       |LEA EDX,DWORD PTR SS:
0050D7E5|.E8 F654EFFF   |CALL tk.00402CE0                      ;2位假码并成1位
0050D7EA|.8807          |MOV BYTE PTR DS:,AL            ;保存
0050D7EC|.837D F0 00    |CMP DWORD PTR SS:,0
0050D7F0|.75 09         |JNZ SHORT tk.0050D7FB
0050D7F2|.46            |INC ESI
0050D7F3|.47            |INC EDI
0050D7F4|.4B            |DEC EBX
0050D7F5|.^ 75 C2         \JNZ SHORT tk.0050D7B9
0050D7F7|>C645 F7 01    MOV BYTE PTR SS:,1
0050D7FB|>33C0          XOR EAX,EAX
0050D7FD|.5A            POP EDX
0050D7FE|.59            POP ECX
0050D7FF|.59            POP ECX
0050D800|.64:8910       MOV DWORD PTR FS:,EDX
0050D803|.68 1DD85000   PUSH tk.0050D81D
0050D808|>8D45 E0       LEA EAX,DWORD PTR SS:
0050D80B|.BA 04000000   MOV EDX,4
0050D810|.E8 2365EFFF   CALL tk.00403D38
0050D815\.C3            RETN
0050D816   .- E9 595FEFFF   JMP tk.00403774
0050D81B   .^ EB EB         JMP SHORT tk.0050D808
0050D81D   .8A45 F7       MOV AL,BYTE PTR SS:
0050D820   .5F            POP EDI
0050D821   .5E            POP ESI
0050D822   .5B            POP EBX
0050D823   .8BE5          MOV ESP,EBP
0050D825   .5D            POP EBP
0050D826   .C3            RETN                                 ;返回到 00516D29
这段是将假码中的非法字符剔除并由16压缩成8位,4位一组记为:s1、s2。

0050E4F6 处 CALL tk.0050E69C 来到下面:

0050E69C/$83C4 F8       ADD ESP,-8
0050E69F|.8B0A          MOV ECX,DWORD PTR DS:
0050E6A1|.890C24      MOV DWORD PTR SS:,ECX
0050E6A4|.8B4A 04       MOV ECX,DWORD PTR DS:
0050E6A7|.894C24 04   MOV DWORD PTR SS:,ECX
0050E6AB|.8BD4          MOV EDX,ESP
0050E6AD|.33C9          XOR ECX,ECX
0050E6AF|.E8 C8F7FFFF   CALL tk.0050DE7C                         ;算法Call
0050E6B4|.66:813C24 693>CMP WORD PTR SS:,3C69               ;=3C69注册成功
0050E6BA|.0F94C0      SETE AL                                 
0050E6BD|.59            POP ECX
0050E6BE|.5A            POP EDX
0050E6BF\.C3            RETN                                     ;返回到 0050E4FB

0050E6AF处 CALL tk.0050DE7C(算法Call)F7进入

0050DE7C/$53            PUSH EBX
0050DE7D|.56            PUSH ESI
0050DE7E|.57            PUSH EDI
0050DE7F|.83C4 E8       ADD ESP,-18
0050DE82|.884C24 08   MOV BYTE PTR SS:,CL
0050DE86|.895424 04   MOV DWORD PTR SS:,EDX
0050DE8A|.890424      MOV DWORD PTR SS:,EAX
0050DE8D|.8B4424 04   MOV EAX,DWORD PTR SS:
0050DE91|.8B00          MOV EAX,DWORD PTR DS:
0050DE93|.894424 0C   MOV DWORD PTR SS:,EAX
0050DE97|.8B4424 04   MOV EAX,DWORD PTR SS:
0050DE9B|.8B40 04       MOV EAX,DWORD PTR DS:
0050DE9E|.894424 10   MOV DWORD PTR SS:,EAX
0050DEA2|.C74424 14 040>MOV DWORD PTR SS:,4
0050DEAA|.BE 549B5300   MOV ESI,tk.00539B54
0050DEAF|>8B5424 0C   /MOV EDX,DWORD PTR SS:         ;=s1、06667B5C、A53ECB4C、FABF3DD5
0050DEB3|.33C0          |XOR EAX,EAX
0050DEB5|.8A4424 08   |MOV AL,BYTE PTR SS:
0050DEB9|.8BD8          |MOV EBX,EAX
0050DEBB|.03DB          |ADD EBX,EBX
0050DEBD|.8D1C5B      |LEA EBX,DWORD PTR DS:
0050DEC0|.8B04DE      |MOV EAX,DWORD PTR DS:   ;=0、2、1、3
0050DEC3|.8B0C24      |MOV ECX,DWORD PTR SS:
0050DEC6|.8B0C81      |MOV ECX,DWORD PTR DS:   ;=n1、n3、n2、n4
0050DEC9|.8B44DE 04   |MOV EAX,DWORD PTR DS:   ;=3、1、0、2
0050DECD|.8B3C24      |MOV EDI,DWORD PTR SS:
0050DED0|.8B0487      |MOV EAX,DWORD PTR DS:   ;=n4、n2、n1、n3
0050DED3|.8B5CDE 08   |MOV EBX,DWORD PTR DS:   ;=1、3、2、0
0050DED7|.8B3C24      |MOV EDI,DWORD PTR SS:
0050DEDA|.8B1C9F      |MOV EBX,DWORD PTR DS:   ;=n2、n4、n3、n1
0050DEDD|.03D3          |ADD EDX,EBX                        ;EDX=s1+n3=620C08BD
0050DEDF|.03DA          |ADD EBX,EDX                        ;EBX=n3+620C08BD=4BC1DD68
0050DEE1|.8BFA          |MOV EDI,EDX
0050DEE3|.C1EF 07       |SHR EDI,7                            ;EDI=620C08BD shr 7=C41811
0050DEE6|.33D7          |XOR EDX,EDI                        ;EDX=620C08BD xor C41811=62C810AC
0050DEE8|.03CA          |ADD ECX,EDX                        ;ECX=n1+62C810AC=68378A7F
0050DEEA|.03D1          |ADD EDX,ECX
0050DEEC|.8BF9          |MOV EDI,ECX
0050DEEE|.C1E7 0D       |SHL EDI,0D
0050DEF1|.33CF          |XOR ECX,EDI
0050DEF3|.03C1          |ADD EAX,ECX
0050DEF5|.03C8          |ADD ECX,EAX
0050DEF7|.8BF8          |MOV EDI,EAX
0050DEF9|.C1EF 11       |SHR EDI,11
0050DEFC|.33C7          |XOR EAX,EDI
0050DEFE|.03D8          |ADD EBX,EAX
0050DF00|.03C3          |ADD EAX,EBX
0050DF02|.8BFB          |MOV EDI,EBX
0050DF04|.C1E7 09       |SHL EDI,9
0050DF07|.33DF          |XOR EBX,EDI
0050DF09|.03D3          |ADD EDX,EBX
0050DF0B|.03DA          |ADD EBX,EDX
0050DF0D|.8BFA          |MOV EDI,EDX
0050DF0F|.C1EF 03       |SHR EDI,3
0050DF12|.33D7          |XOR EDX,EDI
0050DF14|.03CA          |ADD ECX,EDX
0050DF16|.8BD1          |MOV EDX,ECX
0050DF18|.C1E2 07       |SHL EDX,7
0050DF1B|.33CA          |XOR ECX,EDX
0050DF1D|.03C1          |ADD EAX,ECX
0050DF1F|.8BD3          |MOV EDX,EBX
0050DF21|.C1EA 0F       |SHR EDX,0F
0050DF24|.33C2          |XOR EAX,EDX
0050DF26|.03D8          |ADD EBX,EAX
0050DF28|.8BC3          |MOV EAX,EBX
0050DF2A|.C1E0 0B       |SHL EAX,0B
0050DF2D|.33D8          |XOR EBX,EAX
0050DF2F|.8B4424 10   |MOV EAX,DWORD PTR SS:      ;=s2、s1、06667B5C、A53ECB4C
0050DF33|.33C3          |XOR EAX,EBX                        ;EBX=505259CC、DD68FF5E、FCD94689、3FF02E52
0050DF35|.8B5424 0C   |MOV EDX,DWORD PTR SS:         ;=s1、06667B5C、A53ECB4C、FABF3DD5
0050DF39|.895424 10   |MOV DWORD PTR SS:,EDX
0050DF3D|.894424 0C   |MOV DWORD PTR SS:,EAX         ;EAX=06667B5C、A53ECB4C、FABF3DD5、9ACEE51E
0050DF41|.83C6 0C       |ADD ESI,0C
0050DF44|.FF4C24 14   |DEC DWORD PTR SS:            ;=4 (循环次数)
0050DF48|.^ 0F85 61FFFFFF \JNZ tk.0050DEAF
0050DF4E|.8B4424 04   MOV EAX,DWORD PTR SS:          ;=假码
0050DF52|.8B5424 10   MOV EDX,DWORD PTR SS:         ;=FABF3DD5
0050DF56|.8910          MOV DWORD PTR DS:,EDX            ;替换假码前4位
0050DF58|.8B4424 04   MOV EAX,DWORD PTR SS:
0050DF5C|.8B5424 0C   MOV EDX,DWORD PTR SS:          ;=9ACEE51E
0050DF60|.8950 04       MOV DWORD PTR DS:,EDX          ;替换假码后4位
0050DF63|.83C4 18       ADD ESP,18
0050DF66|.5F            POP EDI
0050DF67|.5E            POP ESI
0050DF68|.5B            POP EBX
0050DF69\.C3            RETN                                  ;返回到 0050E6B40050E5F3



算法小结:

1.注册码要求16位,范围是(0 、1 ……E、F)16进制数的基本元素。
2.将16位注册码压缩为8位。
 若输入注册码:1234567A9F223456 进行如下压缩。
 内存中存储的次序:
      (0x 31 32 33 34 35 36 37 41 39 46 32 32 33 34 35 36)
变成 (0x 12 34 56 7A 9F 22 34 56)   
3.压缩后注册码分成2组:
 s1=7A563412s2=5634229F
4.s1、s2与4个常数(n1=056F79E2 n2=E9B5D4AB n3=9F6E0C3B n4=C6DE0DCC)
进行4轮循环运算。
5.运算结果的第3、4位如果等于3C69,则注册成功。
6.一组通过验证的注册码:75457544B77FDE8E

deag123 发表于 2008-1-1 10:13:29

看过了,学习,支持

yaoyao 发表于 2008-1-17 19:44:33

支持

好东西,支持一下!
页: [1]
查看完整版本: 菜鸟学习算法,破解Textanz 1.4.0 BY:wzwgp