逗鸟外传百度云资源:毕业破文 FontFrenzy V1.5.138 注册机初级分析 - 『 PYG5.4学员...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 03:11:48


【破文标题】毕业破文 FontFrenzy V1.5.138 注册机初级分析
【破文作者】王猛
【作者邮箱】12985462@QQ.com
【作者主页】www.81mil.cn
【破解工具】OllyDBG
【破解平台】Windows Vista
【软件名称】FontFrenzy V1.5.138
【软件大小】556 KB
【原版下载】http://www.skycn.com/soft/18199.html
【保护方式】自定义算法
【软件简介】
字体管理软件,免费注册,未注册限制使用时间并弹出NAG窗口!

这次破解在字符串格式上我搞错了,这是一个UNICODE程序,我一直以ASCII方式进行的破解。大家都知道,UNICODE的
程序假设用ASCII方式搜索字符串是得不到结果的。但是我还是以ASCII方式来写破文,权当与大家分享下如何对付隐藏
字符串的程序。

【破解声明】个人学习总结,仅供学习参考
------------------------------------------------------------------------
【破解过程】
一、软件保护

以PEiD进行扫描,文件为加壳,程序以使用VC++编制。

二、注册分析

以OD载入程序输入错误的注册码,程序弹出对话框提示“Your registration information is incorrect.please try
again.” 搜索字符串(以ASCII方式,其实是个UNICODE程序。)什么有价值的信息都未能发现。放弃根据字符串下断点
的思想,以错误提示对话框为契机入手破解。

下断点在 MessageBoxA 和 MessageBoxW 上,使用命令 bp MessageBoxA 和 bp MessageBoxW。

随意输入一个电子邮件地址和想象的注册码,程序断在 75F0FBD5 。在提示行,我们可以找到一些非常有用的信息。

0012EE14   00401F1F  /CALL 到 MessageBoxW 来自 FontFren.00401F19
0012EE18   002D0128  |hOwner = 002D0128 ('Register FontFrenzy?',class='#32770')
0012EE1C   00423C88  |Text = "Your registration information is incorrect. Please try again."
0012EE20   00423C6C  |Title = "Registration"
0012EE24   00000030  \Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL

通过上边的信息,我们可以知道这个程序的错误提示对话信息以MessageBoxW函数弹出,是一个UNICODE程序。00401F19
处是对MessageBoxW进行调用的。这说明如果注册码不相符,程序会跳到00401F19处,并弹出对话框。那么我们就去这个
00401F19看看程序在什么情况下会弹出这个对话框。

按快捷键 ALT+ G 输入 00401F19 ,我们过来后可以看到这个完整的MessageBoxW函数是如何调用的。

00401F0C  |> \6A 30         PUSH 30
00401F0E  |.  68 6C3C4200   PUSH FontFren.00423C6C                   ;  Registration
00401F13  |.  68 883C4200   PUSH FontFren.00423C88                   ;  Your registration information is
incorrect. Please try again.
00401F18  |.  53            PUSH EBX
00401F19  |.  FF15 00A24200 CALL DWORD PTR DS:[42A200]               ;  USER32.MessageBoxW

这是一个汇编语言下,完整的MessageBox调用,将鼠标停在00401FOC行看看都是那些地方引发了错误提示。在提示行可
以看到 “跳转来自 00401DCD” 我们过去看看 。

00401DC4  |. /EB 05         JMP SHORT FontFren.00401DCB
00401DC6  |> |1BC0          SBB EAX,EAX
00401DC8  |. |83D8 FF       SBB EAX,-1
00401DCB  |> \85C0          TEST EAX,EAX                             ;  比较注册标记
00401DCD  |.  0F85 39010000 JNZ FontFren.00401F0C                    ;  不正确跳向注册错误

00401DCD所处的是一行条件判断语句,如果标志位EAX为1,则跳向注册失败!

我们想上拉几行代码,注意汇编语句的内容,看到

00401D06  |.  68 503C4200   PUSH FontFren.00423C50                   ;  Unregistered

处时,停下来下断点。

备注:如果对自己的汇编语言功底没有信心,也可以用一个简单办法,将鼠标停在跳转语句上,OD会告诉你是那里引发
的这个跳转,顺藤摸瓜逆向分析向上拉 =)

00401D06  |.  68 503C4200   PUSH FontFren.00423C50                   ;  Unregistered
00401D0B  |.  51            PUSH ECX
00401D0C  |.  E8 5AA70100   CALL FontFren.0041C46B                   ;  读取用户名
00401D11  |.  83C4 08       ADD ESP,8
00401D14  |.  85C0          TEST EAX,EAX
00401D16  |.  0F84 0E020000 JE FontFren.00401F2A                     ;  如果用户名为空,跳向注册失败
00401D1C  |.  8D8424 B00000>LEA EAX,DWORD PTR SS:[ESP+B0]
00401D23  |.  8D50 02       LEA EDX,DWORD PTR DS:[EAX+2]
00401D26  |>  66:8B08       /MOV CX,WORD PTR DS:[EAX]
00401D29  |.  83C0 02       |ADD EAX,2
00401D2C  |.  66:85C9       |TEST CX,CX
00401D2F  |.^ 75 F5         \JNZ SHORT FontFren.00401D26
00401D31  |.  2BC2          SUB EAX,EDX
00401D33  |.  D1F8          SAR EAX,1
00401D35  |.  83F8 06       CMP EAX,6                                ;  如果小于6位,跳向注册失败
00401D38  |.  0F82 EC010000 JB FontFren.00401F2A
00401D3E  |.  8D8424 9C0000>LEA EAX,DWORD PTR SS:[ESP+9C]            ;  读取注册码
00401D45  |.  8D50 02       LEA EDX,DWORD PTR DS:[EAX+2]
00401D48  |.  EB 06         JMP SHORT FontFren.00401D50
00401D4A  |   8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX]
00401D50  |>  66:8B08       /MOV CX,WORD PTR DS:[EAX]
00401D53  |.  83C0 02       |ADD EAX,2
00401D56  |.  66:85C9       |TEST CX,CX
00401D59  |.^ 75 F5         \JNZ SHORT FontFren.00401D50
00401D5B  |.  2BC2          SUB EAX,EDX
00401D5D  |.  D1F8          SAR EAX,1
00401D5F  |.  83F8 08       CMP EAX,8                                ;  如果小于8位,跳向注册失败
00401D62  |.  0F85 C2010000 JNZ FontFren.00401F2A
00401D68  |.  8D8C24 B00000>LEA ECX,DWORD PTR SS:[ESP+B0]            ;  读取注册名
00401D6F  |.  E8 2C170100   CALL FontFren.004134A0                   ;  调用注册码生成函数?
00401D74  |.  8BF8          MOV EDI,EAX                              ;  EAX中出现正确注册码
00401D76  |.  85FF          TEST EDI,EDI
00401D78  |.  75 18         JNZ SHORT FontFren.00401D92
00401D7A  |.  8B15 2CBD4200 MOV EDX,DWORD PTR DS:[42BD2C]
00401D80  |.  6A 10         PUSH 10
00401D82  |.  68 043D4200   PUSH FontFren.00423D04                   ;  Error 4413
00401D87  |.  68 203D4200   PUSH FontFren.00423D20                   ;  Error 4413: Program error.
Contact support.
00401D8C  |.  52            PUSH EDX
00401D8D  |.  E9 A5010000   JMP FontFren.00401F37
00401D92  |>  8BCF          MOV ECX,EDI
00401D94  |.  8D8424 9C0000>LEA EAX,DWORD PTR SS:[ESP+9C]
00401D9B  |.  EB 03         JMP SHORT FontFren.00401DA0
00401D9D  |   8D49 00       LEA ECX,DWORD PTR DS:[ECX]
00401DA0  |>  66:8B10       /MOV DX,WORD PTR DS:[EAX]
00401DA3  |.  66:3B11       |CMP DX,WORD PTR DS:[ECX]
00401DA6  |.  75 1E         |JNZ SHORT FontFren.00401DC6
00401DA8  |.  66:85D2       |TEST DX,DX
00401DAB  |.  74 15         |JE SHORT FontFren.00401DC2
00401DAD  |.  66:8B50 02    |MOV DX,WORD PTR DS:[EAX+2]
00401DB1  |.  66:3B51 02    |CMP DX,WORD PTR DS:[ECX+2]
00401DB5  |.  75 0F         |JNZ SHORT FontFren.00401DC6
00401DB7  |.  83C0 04       |ADD EAX,4
00401DBA  |.  83C1 04       |ADD ECX,4
00401DBD  |.  66:85D2       |TEST DX,DX
00401DC0  |.^ 75 DE         \JNZ SHORT FontFren.00401DA0
00401DC2  |>  33C0          XOR EAX,EAX
00401DC4  |.  EB 05         JMP SHORT FontFren.00401DCB
00401DC6  |>  1BC0          SBB EAX,EAX
00401DC8      83D8 FF       SBB EAX,-1
00401DCB      85C0          TEST EAX,EAX                             ;  比较注册码
00401DCD  |.  0F85 39010000 JNZ FontFren.00401F0C                    ;  不正确跳向注册错误
00401DD3  |.  68 7C334200   PUSH FontFren.0042337C                   ;  RegName
00401DD8  |.  8DB424 B40000>LEA ESI,DWORD PTR SS:[ESP+B4]
00401DDF  |.  E8 EC800000   CALL FontFren.00409ED0
00401DE4  |.  83C4 04       ADD ESP,4
00401DE7  |.  68 783D4200   PUSH FontFren.00423D78                   ;  RegCode
00401DEC  |.  8DB424 A00000>LEA ESI,DWORD PTR SS:[ESP+A0]
00401DF3  |.  E8 D8800000   CALL FontFren.00409ED0
00401DF8  |.  83C4 04       ADD ESP,4
00401DFB  |.  68 00010000   PUSH 100
00401E00  |.  8D8424 B40200>LEA EAX,DWORD PTR SS:[ESP+2B4]
00401E07  |.  6A 00         PUSH 0
00401E09  |.  50            PUSH EAX
00401E0A  |.  E8 317E0100   CALL FontFren.00419C40
00401E0F  |.  8B15 2CBD4200 MOV EDX,DWORD PTR DS:[42BD2C]
00401E15  |.  8B35 18A24200 MOV ESI,DWORD PTR DS:[42A218]            ;  USER32.SendMessageW
00401E1B  |.  83C4 0C       ADD ESP,0C
00401E1E  |.  8D8C24 B00200>LEA ECX,DWORD PTR SS:[ESP+2B0]
00401E25  |.  51            PUSH ECX
00401E26  |.  68 00010000   PUSH 100
00401E2B  |.  6A 0D         PUSH 0D
00401E2D  |.  52            PUSH EDX
00401E2E  |.  FFD6          CALL ESI
00401E30  |.  8D8424 B00200>LEA EAX,DWORD PTR SS:[ESP+2B0]
00401E37  |.  8D50 02       LEA EDX,DWORD PTR DS:[EAX+2]
00401E3A  |.  8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX]
00401E40  |>  66:8B08       /MOV CX,WORD PTR DS:[EAX]
00401E43  |.  83C0 02       |ADD EAX,2
00401E46  |.  66:85C9       |TEST CX,CX
00401E49  |.^ 75 F5         \JNZ SHORT FontFren.00401E40
00401E4B  |.  2BC2          SUB EAX,EDX
00401E4D  |.  D1F8          SAR EAX,1
00401E4F  |.  83F8 0F       CMP EAX,0F
00401E52  |.  72 38         JB SHORT FontFren.00401E8C
00401E54  |.  8D8424 B00200>LEA EAX,DWORD PTR SS:[ESP+2B0]
00401E5B  |.  8D50 02       LEA EDX,DWORD PTR DS:[EAX+2]
00401E5E  |.  8BFF          MOV EDI,EDI
00401E60  |>  66:8B08       /MOV CX,WORD PTR DS:[EAX]
00401E63  |.  83C0 02       |ADD EAX,2
00401E66  |.  66:85C9       |TEST CX,CX
00401E69  |.^ 75 F5         \JNZ SHORT FontFren.00401E60
00401E6B  |.  2BC2          SUB EAX,EDX
00401E6D  |.  D1F8          SAR EAX,1
00401E6F  |.  66:898C44 920>MOV WORD PTR SS:[ESP+EAX*2+292],CX
00401E77  |.  8B0D 2CBD4200 MOV ECX,DWORD PTR DS:[42BD2C]
00401E7D  |.  8D8424 B00200>LEA EAX,DWORD PTR SS:[ESP+2B0]
00401E84  |.  50            PUSH EAX
00401E85  |.  6A 00         PUSH 0
00401E87  |.  6A 0C         PUSH 0C
00401E89  |.  51            PUSH ECX
00401E8A  |.  FFD6          CALL ESI
00401E8C  |>  8B15 2CBD4200 MOV EDX,DWORD PTR DS:[42BD2C]
00401E92  |.  52            PUSH EDX                                 ; /hWnd => NULL
00401E93  |.  FF15 30124200 CALL DWORD PTR DS:[<&USER32.GetMenu>]    ; \GetMenu
00401E99  |.  8D4C24 38     LEA ECX,DWORD PTR SS:[ESP+38]
00401E9D  |.  51            PUSH ECX
00401E9E  |.  6A 01         PUSH 1
00401EA0  |.  6A 03         PUSH 3
00401EA2  |.  50            PUSH EAX
00401EA3  |.  C74424 4C 040>MOV DWORD PTR SS:[ESP+4C],4
00401EAB  |.  C74424 48 300>MOV DWORD PTR SS:[ESP+48],30
00401EB3  |.  FF15 D8A14200 CALL DWORD PTR DS:[42A1D8]               ;  FontFren.00413F2F
00401EB9  |.  8B5424 4C     MOV EDX,DWORD PTR SS:[ESP+4C]
00401EBD  |.  6A 00         PUSH 0                                   ; /Flags =
MF_BYCOMMAND|MF_ENABLED|MF_STRING
00401EBF  |.  68 4A9C0000   PUSH 9C4A                                ; |ItemID = 9C4A (40010.)
00401EC4  |.  52            PUSH EDX                                 ; |hMenu
00401EC5  |.  FF15 60124200 CALL DWORD PTR DS:[<&USER32.RemoveMenu>] ; \RemoveMenu
00401ECB  |.  6A 40         PUSH 40
00401ECD  |.  68 6C3C4200   PUSH FontFren.00423C6C                   ;  Registration
00401ED2  |.  68 883D4200   PUSH FontFren.00423D88                   ;  Thank you for registering
FontFrenzy!
00401ED7  |.  53            PUSH EBX
00401ED8  |.  FF15 00A24200 CALL DWORD PTR DS:[42A200]               ;  FontFren.00413942
00401EDE  |.  6A 01         PUSH 1                                   ; /Result = 1
00401EE0  |.  53            PUSH EBX                                 ; |hWnd
00401EE1  |.  FF15 44124200 CALL DWORD PTR DS:[<&USER32.EndDialog>]  ; \EndDialog
00401EE7  |.  57            PUSH EDI
00401EE8  |.  E8 DD2D0100   CALL FontFren.00414CCA
00401EED  |.  83C4 04       ADD ESP,4
00401EF0  |.  B8 01000000   MOV EAX,1
00401EF5  |.  5F            POP EDI
00401EF6  |.  5E            POP ESI
00401EF7  |.  5B            POP EBX
00401EF8  |.  8B8C24 E80A00>MOV ECX,DWORD PTR SS:[ESP+AE8]
00401EFF  |.  33CC          XOR ECX,ESP
00401F01  |.  E8 B52D0100   CALL FontFren.00414CBB
00401F06  |.  8BE5          MOV ESP,EBP
00401F08  |.  5D            POP EBP
00401F09  |.  C2 1000       RETN 10
00401F0C  |>  6A 30         PUSH 30
00401F0E  |.  68 6C3C4200   PUSH FontFren.00423C6C                   ;  Registration
00401F13  |.  68 883C4200   PUSH FontFren.00423C88                   ;  Your registration information is
incorrect. Please try again.
00401F18  |.  53            PUSH EBX
00401F19  |.  FF15 00A24200 CALL DWORD PTR DS:[42A200]               ;  FontFren.00413942
00401F1F  |.  57            PUSH EDI
00401F20  |.  E8 A52D0100   CALL FontFren.00414CCA
00401F25  |.  83C4 04       ADD ESP,4
00401F28  |.  EB 13         JMP SHORT FontFren.00401F3D
00401F2A  |>  6A 30         PUSH 30
00401F2C  |.  68 6C3C4200   PUSH FontFren.00423C6C                   ;  Registration
00401F31  |.  68 883C4200   PUSH FontFren.00423C88                   ;  Your registration information is
incorrect. Please try again.
00401F36  |.  53            PUSH EBX
00401F37  |>  FF15 00A24200 CALL DWORD PTR DS:[42A200]               ;  FontFren.00413942
00401F3D  |>  8B8C24 F40A00>MOV ECX,DWORD PTR SS:[ESP+AF4]           ;  Default case of switch 00401C81
00401F44  |.  5F            POP EDI
00401F45  |.  5E            POP ESI
00401F46  |.  5B            POP EBX
00401F47  |.  33CC          XOR ECX,ESP
00401F49  |.  33C0          XOR EAX,EAX
00401F4B  |.  E8 6B2D0100   CALL FontFren.00414CBB
00401F50  |.  8BE5          MOV ESP,EBP
00401F52  |.  5D            POP EBP
00401F53  \.  C2 1000       RETN 10

这个程序的特点是注册标志位与注册信息条件虽然提示相同,但是处理函数不同。非法注册信息由 00401F2A 处理,而
注册标志位错误,也就是注册码错误由 00401F19 处理。

------------------------------------------------------------------------
【破解总结】
注册时,用户名可任意输入6位以上字符并非提示所显示的必须是电子邮件地址,注册码不小于8位。真实的注册信息为8
位数字,出现于 00401D74 句的 EAX寄存器。

内存注册机:
中断地址 00401D74
中断次数 1
第一字节 8B
指令长度 2
【*】 内存方式 寄存器EAX
【*】 宽字符串

------------------------------------------------------------------------
【版权声明】
版权没有,翻版考究!;)

[ 本帖最后由 野猫III 于 2007-4-19 17:09 编辑 ]