//以后不会写这样的文章了,截图太麻烦了
程序下载: http://115.com/file/belwaox2
打开程序,明显有限制
首先 Peid 检测程序编程语言是Borland C++,运行程序。
程序调用了系统时间函数 GetLocalTime,这样才能判断当前时间是否过期
GetLocalTime 函数原型
VOID GetLocalTime(
LPSYSTEMTIME lpSystemTime // 存放系统时间结构的地址
);
OD载入程序
命令行下断点
bp GetLocalTime
F9运行立即中断
注意它是cw3220.dll的调用,点右键-反汇编中跟随。
来到
因为不是程序领空,所以Ctrl+F9根据 OD信息框提示返回程序领空。
0040108A |. E8 3F040000 CALL <JMP.&cw3220._getdate> //调用运行库中的GetLocalTime函数。
0040108F |. 59 POP ECX ; 0012FD98
00401090 |. 817D F8 CD070>CMP DWORD PTR SS:[EBP-8],7CD //比较7D4(2004)和7CD9(1997)
00401097 |. 7F 0F JG SHORT chap532.004010A8 //大于则跳到错误提示处。
00401099 |. 68 74204000 PUSH chap532.00402074 ; /Text = "Within Demonstration Time"
0040109E |. 6A 65 PUSH 65 ; |ControlID = 65 (101.)
004010A0 |. 53 PUSH EBX ; |hWnd
004010A1 |. E8 5E040000 CALL <JMP.&USER32.SetDlgItemTextA> ; \SetDlgItemTextA
004010A6 |. EB 23 JMP SHORT chap532.004010CB
004010A8 |> 68 00100000 PUSH 1000 //错误提示。 ; /Style = MB_OK|MB_SYSTEMMODAL
004010AD |. 68 CA204000 PUSH chap532.004020CA ; |Title = "Bad Luck"
004010B2 |. 68 8E204000 PUSH chap532.0040208E ; |Text = "The demonstration period for this program has been exceeded"
004010B7 |. 6A 00 PUSH 0 ; |hOwner = NULL
004010B9 |. E8 52040000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA
004010BE |. 68 D3204000 PUSH chap532.004020D3 ; /Text = "Demonstration Period Exceeded"
004010C3 |. 6A 65 PUSH 65 ; |ControlID = 65 (101.)
004010C5 |. 53 PUSH EBX ; |hWnd
004010C6 |. E8 39040000 CALL <JMP.&USER32.SetDlgItemTextA> ; \SetDlgItemTextA
00401097 |. 7F 0F JG SHORT chap532.004010A8 //大于则跳到错误提示处。
修改为
00401097 90 NOP
00401098 90 NOP
成功