xbb[DFCG] 发表于 2008-6-1 03:04:27

宝蓝成绩统计V8.0爆破分析 By XbB

程序有机器码:Y2TG201E为Borland Delphi 6.0 - 7.0编制。

分析:
1、程序应该是在启动时对注册文件进行检测,并对注册文件内所包含的注册信息进行验证。
2、需要注意:可能在没有检测到注册文件时,对注册码验证的代码是不会进行的。
   可查找字串确定启动验证处,看能否分析代码找出文件名
3、通过查找字串可找到“您已经注册了本软件,请保管好软件目录中名为“sn.dat”的注册文件!”此为注册提示的字符串,从这可以得知Sn.dat为注册文件名。

005EB824    55            PUSH EBP
005EB825    68 30B95E00   PUSH Blcjtj_U.005EB930
005EB82A    64:FF30         PUSH DWORD PTR FS:
005EB82D    64:8920         MOV DWORD PTR FS:,ESP
005EB830    A1 78B86000   MOV EAX,DWORD PTR DS:
005EB835    8B15 74B86000   MOV EDX,DWORD PTR DS:
005EB83B    E8 E093E1FF   CALL Blcjtj_U.00404C20
005EB840    75 1D         JNZ SHORT Blcjtj_U.005EB85F
005EB842    6A 00         PUSH 0
005EB844    B9 3CB95E00   MOV ECX,Blcjtj_U.005EB93C                ; 注册提示
005EB849    BA 48B95E00   MOV EDX,Blcjtj_U.005EB948                ; 您已经注册了本软件,请保管好软件目录中名为“sn.dat”的注册文件!
005EB84E    A1 94BD6000   MOV EAX,DWORD PTR DS:
005EB853    8B00            MOV EAX,DWORD PTR DS:
005EB855    E8 F61EE8FF   CALL Blcjtj_U.0046D750
005EB85A    E9 B6000000   JMP Blcjtj_U.005EB915

005EB85F   .6A 04         PUSH 4
005EB861   .68 94B95E00   PUSH Blcjtj_U.005EB994                   ;   《宝蓝快速语音成绩统计》V8.0是一款共享软件,只有注册后你才能使用本软件的\r打印功能,注册用户还可以获得更多的技术支持及免费升级到今后的新版本。\r\r    机器码为:

005EB861下10+行是软件注册按钮按下后弹出的窗口中显示的已注册或未注册的内容。

005EB849这行被加密。

005EB850这行的跳转来自 005EB7D9


*****************************************************************
重启验证

00549341|> \833D 78B86000>CMP DWORD PTR DS:,0
00549348|.74 12         JE SHORT Blcjtj_U.0054935C
0054934A|.A1 78B86000   MOV EAX,DWORD PTR DS:
0054934F|.8B15 74B86000 MOV EDX,DWORD PTR DS:
00549355|.E8 C6B8EBFF   CALL Blcjtj_U.00404C20
0054935A|.74 2A         JE SHORT Blcjtj_U.00549386
0054935C|> \A1 F0DE6000   MOV EAX,DWORD PTR DS:
00549361|.8B80 20070000 MOV EAX,DWORD PTR DS:
00549367|.8B80 08020000 MOV EAX,DWORD PTR DS:
0054936D|.BA 02000000   MOV EDX,2
00549372|.E8 E940F4FF   CALL Blcjtj_U.0048D460
00549377|.BA 20955400   MOV EDX,Blcjtj_U.00549520                ;试用版本请注册使用本软件
0054937C|.E8 3B40F4FF   CALL Blcjtj_U.0048D3BC
00549381|.E9 CB000000   JMP Blcjtj_U.00549451
00549386|> \A1 78B86000   MOV EAX,DWORD PTR DS:
0054938B|.8B15 74B86000 MOV EDX,DWORD PTR DS:
00549391|.E8 8AB8EBFF   CALL Blcjtj_U.00404C20
00549396|.0F85 B5000000 JNZ Blcjtj_U.00549451

爆破
00549348   /74 12         JE SHORT Blcjtj_U.0054935C         ;NOP
0054935A   /74 2A         JE SHORT Blcjtj_U.00549386         ;JMP
00549396   /0F85 B5000000   JNZ Blcjtj_U.00549451                ;NOP

*****************************************************************

打印限制


0054D814   .833D 78B86000>CMP DWORD PTR DS:,0
0054D81B   .74 16         JE SHORT Blcjtj_U.0054D833
0054D81D   .A1 78B86000   MOV EAX,DWORD PTR DS:
0054D822   .8B15 74B86000 MOV EDX,DWORD PTR DS:
0054D828   .E8 F373EBFF   CALL Blcjtj_U.00404C20
0054D82D   .0F84 15010000 JE Blcjtj_U.0054D948
0054D833   >6A 00         PUSH 0
0054D835   .B9 C42B5500   MOV ECX,Blcjtj_U.00552BC4                ;打印提示
0054D83A   .BA D02B5500   MOV EDX,Blcjtj_U.00552BD0                ;未注册版本不能使用报表输出打印功能!单击“确定”可预览程序直接输出的成绩报表例子!



005532D9   .833D 78B86000>CMP DWORD PTR DS:,0
005532E0   .74 16         JE SHORT Blcjtj_U.005532F8
005532E2   .A1 78B86000   MOV EAX,DWORD PTR DS:
005532E7   .8B15 74B86000 MOV EDX,DWORD PTR DS:
005532ED   .E8 2E19EBFF   CALL Blcjtj_U.00404C20
005532F2   .0F84 15010000 JE Blcjtj_U.0055340D
005532F8   >6A 00         PUSH 0
005532FA   .B9 9C4E5500   MOV ECX,Blcjtj_U.00554E9C                ;打印提示
005532FF   .BA A84E5500   MOV EDX,Blcjtj_U.00554EA8                ;未注册版本不能使用报表输出打印功能!单击“确定”可预览程序直接输出的成绩报表例子!



005A077C   .833D 78B86000>CMP DWORD PTR DS:,0
005A0783   .74 16         JE SHORT Blcjtj_U.005A079B
005A0785   .A1 78B86000   MOV EAX,DWORD PTR DS:
005A078A   .8B15 74B86000 MOV EDX,DWORD PTR DS:
005A0790   .E8 8B44E6FF   CALL Blcjtj_U.00404C20
005A0795   .0F84 1B010000 JE Blcjtj_U.005A08B6
005A079B   >6A 00         PUSH 0
005A079D   .B9 70335D00   MOV ECX,Blcjtj_U.005D3370                ;打印提示
005A07A2   .BA 7C335D00   MOV EDX,Blcjtj_U.005D337C                ;未注册版本不能使用报表输出打印功能!单击“确定”可预览程序直接输出的成绩报表例子!



005D43C9   .833D 78B86000>CMP DWORD PTR DS:,0
005D43D0   .74 16         JE SHORT Blcjtj_U.005D43E8
005D43D2   .A1 78B86000   MOV EAX,DWORD PTR DS:
005D43D7   .8B15 74B86000 MOV EDX,DWORD PTR DS:
005D43DD   .E8 3E08E3FF   CALL Blcjtj_U.00404C20
005D43E2   .0F84 15010000 JE Blcjtj_U.005D44FD
005D43E8   >6A 00         PUSH 0
005D43EA   .B9 C0B75D00   MOV ECX,Blcjtj_U.005DB7C0                ;打印提示
005D43EF   .BA CCB75D00   MOV EDX,Blcjtj_U.005DB7CC                ;未注册版本不能使用报表输出打印功能!单击“确定”可预览程序直接输出的成绩报表例子!



005DC31F   .833D 78B86000>CMP DWORD PTR DS:,0
005DC326   .74 16         JE SHORT Blcjtj_U.005DC33E
005DC328   .A1 78B86000   MOV EAX,DWORD PTR DS:
005DC32D   .8B15 74B86000 MOV EDX,DWORD PTR DS:
005DC333   .E8 E888E2FF   CALL Blcjtj_U.00404C20
005DC338   .0F84 15010000 JE Blcjtj_U.005DC453
005DC33E   >6A 00         PUSH 0
005DC340   .B9 F83E5E00   MOV ECX,Blcjtj_U.005E3EF8                ;打印提示
005DC345   .BA 043F5E00   MOV EDX,Blcjtj_U.005E3F04                ;未注册版本不能使用报表输出打印功能!单击“确定”可预览程序直接输出的成绩报表例子!



005EDE5E   .833D 78B86000>CMP DWORD PTR DS:,0
005EDE65   .74 12         JE SHORT Blcjtj_U.005EDE79
005EDE67   .A1 78B86000   MOV EAX,DWORD PTR DS:
005EDE6C   .8B15 74B86000 MOV EDX,DWORD PTR DS:
005EDE72   .E8 A96DE1FF   CALL Blcjtj_U.00404C20
005EDE77   .74 6B         JE SHORT Blcjtj_U.005EDEE4
005EDE79   >6A 00         PUSH 0
005EDE7B   .B9 84AE5F00   MOV ECX,Blcjtj_U.005FAE84                ;打印提示
005EDE80   .BA 90AE5F00   MOV EDX,Blcjtj_U.005FAE90                ;未注册版本不能使用报表输出打印功能!单击“确定”可预览程序直接输出的成绩报表例子!


00601ACA   .833D 78B86000>CMP DWORD PTR DS:,0
00601AD1   .74 16         JE SHORT Blcjtj_U.00601AE9
00601AD3   .A1 78B86000   MOV EAX,DWORD PTR DS:
00601AD8   .8B15 74B86000 MOV EDX,DWORD PTR DS:
00601ADE   .E8 3D31E0FF   CALL Blcjtj_U.00404C20
00601AE3   .0F84 15010000 JE Blcjtj_U.00601BFE
00601AE9   >6A 00         PUSH 0
00601AEB   .B9 102C6000   MOV ECX,Blcjtj_U.00602C10                ;打印提示
00601AF0   .BA 1C2C6000   MOV EDX,Blcjtj_U.00602C1C                ;未注册版本不能使用报表输出打印功能!单击“确定”可预览程序直接输出的成绩报表例子!

00601ACA的60B878为0,并在这行对其进行比较,为0则00601AD1跳走提示未注册版不能使用打印功能。

00601AD8这行的60B874里的值与00601AD3这行的60B878内的值相等则00601AE3这行跳未注册提示。

怀疑60B874与60B878二处的值为注册标志位。


一、跟踪:

1、对60B874和60B878二处下硬件写入断点,即:hw 60B874;hw 60B878

004048A0   > \8710          XCHG DWORD PTR DS:,EDX

60B874在上面这行内容为机器码;60B878未有数据写入

2、对60B874和60B878二处下硬件访问断点,即:hr 60B874;hr 60B878

a、00404824   $8B10          MOV EDX,DWORD PTR DS:

60B878在上面这行被访问

b、004048A0   > \8710          XCHG DWORD PTR DS:,EDX

60B874在上面这行被访问,其内容为机器码

c、00549341|> \833D 78B86000>CMP DWORD PTR DS:,0

60B878在上面被访问,此行为程序启动后显示未注册或已授权字符串的判断

再分析:通过上面的跟踪,可以知道,程序在60B878始终没有写入数据,仅读取,但不排除程序在检测到Sn.dat文件并验证通过后不对60B878进行写入操作;程序在60B874处有访问也有写入,保存的是机器,最终有可能会保存真的注册码,原因在549348这行。


二、制作一个假的Sn.dat文件,来看60B874和60B878的访问与写入情况有何不同。
这次在60B874和60B878二处同时设置访问和写入的硬件断点。

可惜,程序运行后程序提示“'$'is not a valid integer value.”,应该是注册码的类型不对,这次全填字母看看……不行。看来此方法行不通,放弃。



*****************************************************************
打印菜单里的限制


1、软件注册菜单项
005EB840   /75 1D         JNZ SHORT Blcjtj_U.005EB85F      ;NOP

2、打印菜单项

a、班级记分表
00601AD1   /74 16         JE SHORT Blcjtj_U.00601AE9               ; NOP
00601AE3   /0F84 15010000   JE Blcjtj_U.00601BFE                     ;JMP
00601C0E   /0F85 600E0000   JNZ Blcjtj_U.00602A74                  ; NOP

b、班级成绩表
005DC326   /74 16         JE SHORT Blcjtj_U.005DC33E               ; NOP
005DC338   /0F84 15010000   JE Blcjtj_U.005DC453                     ; JMP
005DC463   /0F85 B76C0000   JNZ Blcjtj_U.005E3120                  ; NOP

c、年级优生表
005D43D0   /74 16         JE SHORT Blcjtj_U.005D43E8
005D43E2   /0F84 15010000   JE Blcjtj_U.005D44FD
005D450D   /0F85 C6650000   JNZ Blcjtj_U.005DAAD9

d、成绩分析表
005A0783   /74 16         JE SHORT Blcjtj_U.005A079B
005A0795   /0F84 1B010000   JE Blcjtj_U.005A08B6
005A08C6   /0F85 F5B50200   JNZ Blcjtj_U.005CBEC1

e、评比汇总表
005553D4   /74 16         JE SHORT Blcjtj_U.005553EC
005553E6   /0F84 1B010000   JE Blcjtj_U.00555507
00555517   /0F85 E4150400   JNZ Blcjtj_U.00596B01

f、三率数据表
005EDE65   /74 12         JE SHORT Blcjtj_U.005EDE79
005EDE77   /74 6B         JE SHORT Blcjtj_U.005EDEE4
005EDEF4   /0F85 A4B60000   JNZ Blcjtj_U.005F959E

g、考号考室表
005532E0   /74 16         JE SHORT Blcjtj_U.005532F8
005532F2   /0F84 15010000   JE Blcjtj_U.0055340D
0055341D   /0F85 80170000   JNZ Blcjtj_U.00554BA3

h、个人成绩条
0054D81B   /74 16         JE SHORT Blcjtj_U.0054D833
0054D82D   /0F84 15010000   JE Blcjtj_U.0054D948
0054D958   /0F85 B1480000   JNZ Blcjtj_U.0055220F

保存程序,运行测试,成功。


*****************************************************************
未注册不能打印提示


00525CCF   .A1 2CBA6000   MOV EAX,DWORD PTR DS:
00525CD4   .8B00          MOV EAX,DWORD PTR DS:
00525CD6   .8B15 30B96000 MOV EDX,DWORD PTR DS:            ;Blcjtj_U.0060B874
00525CDC   .8B12          MOV EDX,DWORD PTR DS:
00525CDE   .E8 3DEFEDFF   CALL Blcjtj_U.00404C20
00525CE3   .0F85 086A0000 JNZ Blcjtj_U.0052C6F1

…………

0052C6F1   > \6A 00         PUSH 0
0052C6F3   .B9 2CD45200   MOV ECX,Blcjtj_U.0052D42C                ;操作提示
0052C6F8   .BA D4DD5200   MOV EDX,Blcjtj_U.0052DDD4                ;未注册版本不能使用报表输出打印功能!



0053211B   .A1 2CBA6000   MOV EAX,DWORD PTR DS:
00532120   .8B00          MOV EAX,DWORD PTR DS:
00532122   .8B15 30B96000 MOV EDX,DWORD PTR DS:            ;Blcjtj_U.0060B874
00532128   .8B12          MOV EDX,DWORD PTR DS:
0053212A   .E8 F12AEDFF   CALL Blcjtj_U.00404C20
0053212F   .0F85 CE1F0000 JNZ Blcjtj_U.00534103

…………

00534103   > \6A 00         PUSH 0
00534105   .B9 E4455300   MOV ECX,Blcjtj_U.005345E4                ;操作提示
0053410A   .BA 444C5300   MOV EDX,Blcjtj_U.00534C44                ;未注册版本不能使用报表输出打印功能!

分析:0053212F这行跳转成功的话,则跳至00534103这行执行,并提示“未注册版本不能使用报表输出打印功能”,猜测此为

打印按钮按下后的判断。

这一部分在打印菜单里的那些指令修改后就不起作用了。



*****************************************************************

小贴士

FindFirstFile

VB声明
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String,

lpFindFileData As WIN32_FIND_DATA) As Long
说明
根据文件名查找文件
返回值
Long,如执行成功,返回一个搜索句柄。如果出错,返回一个INVALID_HANDLE_VALUE常数,一旦不再需要,应该用FindClose

函数关闭这个句柄


链接:https://www.chinapyg.com/viewthread.php?tid=32771&;extra=page%3D1

[ 本帖最后由 xbb 于 2008-6-1 03:11 编辑 ]

cdygr 发表于 2008-6-1 09:20:03

兄弟,你太厉害了啊,谢谢

zhaoyafei19 发表于 2008-6-1 10:47:58

真是牛人啊
强啊

冷血书生 发表于 2008-6-4 21:03:19

兄弟,你太厉害了啊,谢谢

tianxj 发表于 2008-6-4 21:28:02

/:L /:L 牛人啊

larry_wang 发表于 2008-6-4 21:33:28

利害哦,学习了/:014

icefoxy 发表于 2008-6-4 21:51:15

/:good 学习ing~

xbb[DFCG] 发表于 2008-6-6 12:56:19

原帖由 冷血书生 于 2008-6-4 21:03 发表 https://www.chinapyg.com/images/common/back.gif
兄弟,你太厉害了啊,谢谢
汗,老大不要这样说啊~你才是牛人啊!

yayo6506 发表于 2008-6-8 11:00:02

我知道了,谢谢楼主提供,支持你的付出。

fylsg80 发表于 2018-6-12 20:47:23

谢谢了!
{:biggrin:}
页: [1]
查看完整版本: 宝蓝成绩统计V8.0爆破分析 By XbB