题目:去除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日
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)