菜鸟学习算法,破解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 看过了,学习,支持
支持
好东西,支持一下!
页:
[1]