- UID
- 660
注册时间2005-4-7
阅读权限50
最后登录1970-1-1
感悟天道
TA的每日心情 | 慵懒 2024-10-16 20:38 |
---|
签到天数: 1491 天 [LV.10]以坛为家III
|
程序有机器码: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:[EAX]
005EB82D 64:8920 MOV DWORD PTR FS:[EAX],ESP
005EB830 A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
005EB835 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[60BD94]
005EB853 8B00 MOV EAX,DWORD PTR DS:[EAX]
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:[60B878],0
00549348 |. 74 12 JE SHORT Blcjtj_U.0054935C
0054934A |. A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
0054934F |. 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
00549355 |. E8 C6B8EBFF CALL Blcjtj_U.00404C20
0054935A |. 74 2A JE SHORT Blcjtj_U.00549386
0054935C |> \A1 F0DE6000 MOV EAX,DWORD PTR DS:[60DEF0]
00549361 |. 8B80 20070000 MOV EAX,DWORD PTR DS:[EAX+720]
00549367 |. 8B80 08020000 MOV EAX,DWORD PTR DS:[EAX+208]
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:[60B878]
0054938B |. 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[60B878],0
0054D81B . 74 16 JE SHORT Blcjtj_U.0054D833
0054D81D . A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
0054D822 . 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[60B878],0
005532E0 . 74 16 JE SHORT Blcjtj_U.005532F8
005532E2 . A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
005532E7 . 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[60B878],0
005A0783 . 74 16 JE SHORT Blcjtj_U.005A079B
005A0785 . A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
005A078A . 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[60B878],0
005D43D0 . 74 16 JE SHORT Blcjtj_U.005D43E8
005D43D2 . A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
005D43D7 . 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[60B878],0
005DC326 . 74 16 JE SHORT Blcjtj_U.005DC33E
005DC328 . A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
005DC32D . 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[60B878],0
005EDE65 . 74 12 JE SHORT Blcjtj_U.005EDE79
005EDE67 . A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
005EDE6C . 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[60B878],0
00601AD1 . 74 16 JE SHORT Blcjtj_U.00601AE9
00601AD3 . A1 78B86000 MOV EAX,DWORD PTR DS:[60B878]
00601AD8 . 8B15 74B86000 MOV EDX,DWORD PTR DS:[60B874]
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:[EAX],EDX
60B874在上面这行内容为机器码;60B878未有数据写入
2、对60B874和60B878二处下硬件访问断点,即:hr 60B874;hr 60B878
a、00404824 $ 8B10 MOV EDX,DWORD PTR DS:[EAX]
60B878在上面这行被访问
b、004048A0 > \8710 XCHG DWORD PTR DS:[EAX],EDX
60B874在上面这行被访问,其内容为机器码
c、00549341 |> \833D 78B86000>CMP DWORD PTR DS:[60B878],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:[60BA2C]
00525CD4 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00525CD6 . 8B15 30B96000 MOV EDX,DWORD PTR DS:[60B930] ; Blcjtj_U.0060B874
00525CDC . 8B12 MOV EDX,DWORD PTR DS:[EDX]
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:[60BA2C]
00532120 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00532122 . 8B15 30B96000 MOV EDX,DWORD PTR DS:[60B930] ; Blcjtj_U.0060B874
00532128 . 8B12 MOV EDX,DWORD PTR DS:[EDX]
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[DFCG] 于 2008-6-1 03:11 编辑 ] |
评分
-
查看全部评分
|