题目:去除Bassline WinPopUp时间限制
软件功能:此软件是在LAN内发送短信息,文件,EMAIL和聊天的工具。50天试用期限。

破解目的:去除50天限制

工具:Softice,OD,PEID

引子:今天试用了一下这个在局域网内聊天的工具,50天限制,没有注册码输入的地方,只有爆掉了:)。拿出PEID查看一下,是VC写的,没有带壳。把时间调快1年,再次启动程序,提示已经过期。下断点bpx getlocaltime,F5退出,启动程序,被拦截,按
F10跟踪,来到如下代码处:
004536ED   75 06            JNZ SHORT POPUP.004536F5
004536EF   8B4D F0          MOV ECX,DWORD PTR SS:[EBP-10]
004536F2   8948 1C          MOV DWORD PTR DS:[EAX+1C],ECX
004536F5   FF75 0C          PUSH DWORD PTR SS:[EBP+C]
004536F8   8B07             MOV EAX,DWORD PTR DS:[EDI]
004536FA   8BCF             MOV ECX,EDI
004536FC   56               PUSH ESI
004536FD   FF75 F0          PUSH DWORD PTR SS:[EBP-10]
00453700   FF50 7C          CALL DWORD PTR DS:[EAX+7C]  //这个CALL出现提示框NAG。F8跟入。
00453703   8BC6             MOV EAX,ESI
00453705   8B4D F4          MOV ECX,DWORD PTR SS:[EBP-C]                         ; KERNEL32.BFFC0D90
00453708   5F               POP EDI                                              ; KERNEL32.BFF8B86C
00453709   5E               POP ESI                                              ; KERNEL32.BFF8B86C
0045370A   64:890D 00000000 MOV DWORD PTR FS:[0],ECX
00453711   5B               POP EBX                                              ; KERNEL32.BFF8B86C
00453712   C9               LEAVE
00453713   C2 0800          RETN 8
==================================================================
按F10跟踪来到如下代码处。
0045BDC3  |. E8 CB5B0000    CALL POPUP.00461993
0045BDC8  |. 8B40 04        MOV EAX,DWORD PTR DS:[EAX+4]
0045BDCB  |. 3B70 1C        CMP ESI,DWORD PTR DS:[EAX+1C]
0045BDCE  |. 75 07          JNZ SHORT POPUP.0045BDD7
0045BDD0  |. 8B58 74        MOV EBX,DWORD PTR DS:[EAX+74]
0045BDD3  |. 8348 74 FF     OR DWORD PTR DS:[EAX+74],FFFFFFFF
0045BDD7  |> 8B06           MOV EAX,DWORD PTR DS:[ESI]
0045BDD9  |. 53             PUSH EBX
0045BDDA  |. 8BCE           MOV ECX,ESI
0045BDDC  |. FF90 D4000000  CALL DWORD PTR DS:[EAX+D4] //这个地方出NAG,F8跟入。
0045BDE2  |. 85FF           TEST EDI,EDI
0045BDE4  |. 74 0E          JE SHORT POPUP.0045BDF4
0045BDE6  |. 8B07           MOV EAX,DWORD PTR DS:[EDI]
==================================================================
我们很快来到下面代码处了:
00402044   . E9 65010000    JMP POPUP.004021AE
00402049   > B9 32000000    MOV ECX,32         //这里把50天的16进制送ECX。
0040204E   . 2BCF           SUB ECX,EDI        //试用天数减掉已用天数,剩余天数在ECX,如果超期则为负数。
00402050   . 898E C0020000  MOV DWORD PTR DS:[ESI+2C0],ECX //ECX值送内存保存。
00402056   . 8D4C24 2C      LEA ECX,DWORD PTR SS:[ESP+2C] 
0040205A   . E8 1B600400    CALL POPUP.0044807A
0040205F   . 8B86 C0020000  MOV EAX,DWORD PTR DS:[ESI+2C0] //剩余天数送EAX。
00402065   . C64424 24 01   MOV BYTE PTR SS:[ESP+24],1
0040206A   . 3BC3           CMP EAX,EBX        //如果超期EAX为负数,与EBX内的0比较。下面这个就不跳了,不跳则出过期对话框。
0040206C   . 7D 10          JGE SHORT POPUP.0040207E  //修改为直接JMP 到4020D5即可跳过下面好几个不同情况的对话框。
0040206E   . 68 3CE34800    PUSH POPUP.0048E33C                                  ;  ASCII "This program has expired"
00402073   . 8D4C24 30      LEA ECX,DWORD PTR SS:[ESP+30]
00402077   . E8 91620400    CALL POPUP.0044830D
0040207C   . EB 13          JMP SHORT POPUP.00402091  //跳到下面提示信息框。
0040207E   > 50             PUSH EAX                                             ;  POPUP.<ModuleEntryPoint>//如果没有过期,则显示下面这个提示框。
0040207F   . 8D5424 30      LEA EDX,DWORD PTR SS:[ESP+30]
00402083   . 68 10E34800    PUSH POPUP.0048E310                                  ;  ASCII "You have %d days to evaluate this software"
00402088   . 52             PUSH EDX
00402089   . E8 52430400    CALL POPUP.004463E0
0040208E   . 83C4 0C        ADD ESP,0C
00402091   > 68 D8E24800    PUSH POPUP.0048E2D8                                  ;  ASCII "
 Would you see the registration information in WWW?"
00402096   . 8D4C24 30      LEA ECX,DWORD PTR SS:[ESP+30]
0040209A   . E8 C2640400    CALL POPUP.00448561
0040209F   . 8B86 C0020000  MOV EAX,DWORD PTR DS:[ESI+2C0]
004020A5   . 3BC3           CMP EAX,EBX
004020A7   . 7C 09          JL SHORT POPUP.004020B2
004020A9   . 83F8 14        CMP EAX,14
004020AC   . 7F 04          JG SHORT POPUP.004020B2
004020AE   . 33C0           XOR EAX,EAX                                          ;  POPUP.<ModuleEntryPoint>
004020B0   . EB 05          JMP SHORT POPUP.004020B7
004020B2   > B8 00010000    MOV EAX,100
004020B7   > 8B4C24 2C      MOV ECX,DWORD PTR SS:[ESP+2C]
004020BB   . 0C 04          OR AL,4
004020BD   . 50             PUSH EAX                                             ;  POPUP.<ModuleEntryPoint>
004020BE   . 8B4424 14      MOV EAX,DWORD PTR SS:[ESP+14]
004020C2   . 50             PUSH EAX                                             ;  POPUP.<ModuleEntryPoint>
004020C3   . 51             PUSH ECX
004020C4   . 8BCE           MOV ECX,ESI
004020C6   . E8 206B0500    CALL POPUP.00458BEB         //显示对话框的函数。如果按"Cancel"按钮,则返回7,否则返回6。
004020CB   . 83F8 06        CMP EAX,6                   //如果返回7则比较结果不为0。
004020CE   . 75 05          JNZ SHORT POPUP.004020D5    //不为0则跳到主程序运行。所以跳到这里,就可以掠过前面所有垃圾。
004020D0   . E8 CB860200    CALL POPUP.0042A7A0
004020D5   > 399E C0020000  CMP DWORD PTR DS:[ESI+2C0],EBX   
004020DB   . 7D 1B          JGE SHORT POPUP.004020F8
004020DD   . 8B56 1C        MOV EDX,DWORD PTR DS:[ESI+1C]
004020E0   . 53             PUSH EBX                                             ; /lParam = 5D0000
004020E1   . 53             PUSH EBX                                             ; |wParam = 5D0000
004020E2   . 6A 10          PUSH 10                                              ; |Message = WM_CLOSE
004020E4   . 52             PUSH EDX                                             ; |hWnd = 8172463C
004020E5   . FF15 C4364700  CALL DWORD PTR DS:[<&USER32.PostMessageA>]           ; \PostMessageA
004020EB   . 885C24 24      MOV BYTE PTR SS:[ESP+24],BL
004020EF   . 8D4C24 2C      LEA ECX,DWORD PTR SS:[ESP+2C]
004020F3   . E9 B1000000    JMP POPUP.004021A9
==================================================================
后记:
打开UltraEdit把上面所指地方修改一下即可。 程序比较简单,设防也比较简单,用30分钟写出此文,没有多少含金量,希望大侠不要取笑。

结论:把0040206C处的7D 10  改为EB 67。

qduwg

qduwg@163.com
 
2006年1月21日