题目:去掉WinPOP 30天试用限制和NAG窗口
程度:Very Easy!
工具:Ollydbg ,PEID
软件功能:在局域网内收发信息。
引子:
今天看到一个WINPOP2001 2.4,安装并实验了一下,就拿它来解闷。结果有30天限制,而且在30天之内时,提示你还剩XX天需要注册,过了30天则提示你30天已过,希望注册,如果不注册就不可以发信息了。当然注册是通过在线方式注册的,在程序窗口找不到注册的地方,只有通过爆破了,没有办法呀!!:)。通过用PEID查看,该程序用VB开发。
用OD打开这个程序,上下翻页,仔细观察。我们来到下面程序代码处:
0047E28A . FF15 08124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaI4Var>; 取已经用过的天数,在 EAX返回。
0047E290 . 8D4D B0 LEA ECX,DWORD PTR SS:[EBP-50]
0047E293 . 8945 E0 MOV DWORD PTR SS:[EBP-20],EAX ; 用过天数 放在EBP-20内存
0047E296 . FF15 18104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>
0047E29C . 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20] ;用过天数放在EAX
0047E29F . 3BC7 CMP EAX,EDI
0047E2A1 . 0F8C 52010000 JL WINPOP2.0047E3F9
0047E2A7 . 83F8 1E CMP EAX,1E ;跟1EH比较,就是跟十进制30比较。
0047E2AA . 0F8F 49010000 JG WINPOP2.0047E3F9 ;如果大于30天则出现“已经超过30天,需要注册”的提示框。
0047E2B0 . B9 1E000000 MOV ECX,1E 否则出现“还有多少天需要注册”的 提示框。
0047E2B5 . 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
0047E2B8 . 2BC8 SUB ECX,EAX ;计算剩余天数,后边的提示框要用到。
0047E2BA . 8D85 70FFFFFF LEA EAX,DWORD PTR SS:[EBP-90]
0047E2C0 . 0F80 48020000 JO WINPOP2.0047E50E
0047E2C6 . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
0047E2C7 . 66:893D 485048>MOV WORD PTR DS:[485048],DI
0047E2CE . 894D E0 MOV DWORD PTR SS:[EBP-20],ECX
0047E2D1 . 8995 78FFFFFF MOV DWORD PTR SS:[EBP-88],EDX
0047E2D7 . C785 70FFFFFF >MOV DWORD PTR SS:[EBP-90],4003
0047E2E1 . FF15 B4114000 CALL DWORD PTR DS:[<&MSVBVM60.#536>] ; MSVBVM60.rtcStrFromVar
0047E2E7 . 8BD0 MOV EDX,EAX ; WINPOP2.<ModuleEntryPoint>
0047E2E9 . 8D4D C4 LEA ECX,DWORD PTR SS:[EBP-3C]
0047E2EC . FFD6 CALL ESI
0047E2EE . B9 04000280 MOV ECX,80020004
0047E2F3 . B8 0A000000 MOV EAX,0A
0047E2F8 . 894D 88 MOV DWORD PTR SS:[EBP-78],ECX
0047E2FB . 894D 98 MOV DWORD PTR SS:[EBP-68],ECX
0047E2FE . 8D95 60FFFFFF LEA EDX,DWORD PTR SS:[EBP-A0]
0047E304 . 8D4D A0 LEA ECX,DWORD PTR SS:[EBP-60]
0047E307 . 8945 80 MOV DWORD PTR SS:[EBP-80],EAX ; 下面开始准备提示框的内容
0047E30A . 8945 90 MOV DWORD PTR SS:[EBP-70],EAX ;
0047E30D . C785 68FFFFFF >MOV DWORD PTR SS:[EBP-98],WINPOP2.004326>; UNICODE "WinPop 2000 Information"
0047E317 . C785 60FFFFFF >MOV DWORD PTR SS:[EBP-A0],8
0047E321 . FF15 24124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarDu>; MSVBVM60.__vbaVarDup
0047E327 . 8B5D C4 MOV EBX,DWORD PTR SS:[EBP-3C]
0047E32A . 897D C4 MOV DWORD PTR SS:[EBP-3C],EDI
0047E32D . 8B3D 50104000 MOV EDI,DWORD PTR DS:[<&MSVBVM60.__vbaSt>; MSVBVM60.__vbaStrCat
0047E333 . 68 04264300 PUSH WINPOP2.00432604 ; UNICODE "You have"
0047E338 . 68 58064300 PUSH WINPOP2.00430658
0047E33D . FFD7 CALL EDI ; <&MSVBVM60.__vbaStrCat>
0047E33F . 8BD0 MOV EDX,EAX ; WINPOP2.<ModuleEntryPoint>
0047E341 . 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
0047E344 . FFD6 CALL ESI
0047E346 . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
0047E347 . 8BD3 MOV EDX,EBX
0047E349 . 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
0047E34C . FFD6 CALL ESI
0047E34E . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
0047E34F . FFD7 CALL EDI
0047E351 . 8BD0 MOV EDX,EAX ; WINPOP2.<ModuleEntryPoint>
0047E353 . 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
0047E356 . FFD6 CALL ESI
0047E358 . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
0047E359 . 68 58064300 PUSH WINPOP2.00430658
0047E35E . FFD7 CALL EDI
0047E360 . 8BD0 MOV EDX,EAX ; WINPOP2.<ModuleEntryPoint>
0047E362 . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
0047E365 . FFD6 CALL ESI
0047E367 . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
0047E368 . 68 1C264300 PUSH WINPOP2.0043261C ; UNICODE "days to Register..."
0047E36D . FFD7 CALL EDI
0047E36F . 8BD0 MOV EDX,EAX ; WINPOP2.<ModuleEntryPoint>
0047E371 . 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
0047E374 . FFD6 CALL ESI
0047E376 . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
0047E377 . 68 CC104300 PUSH WINPOP2.004310CC ; UNICODE "
"
0047E37C . FFD7 CALL EDI
0047E37E . 8BD0 MOV EDX,EAX ; WINPOP2.<ModuleEntryPoint>
0047E380 . 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
0047E383 . FFD6 CALL ESI
0047E385 . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
0047E386 . 68 84264300 PUSH WINPOP2.00432684 ; UNICODE "For only 25$ to
708K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4@1j5i4c8A6L8$3&6Q4x3X3c8E0k6h3c8A6j5g2)9J5k6h3y4G2L8b7`.`."
0047E38B . FFD7 CALL EDI
0047E38D . 8D4D 80 LEA ECX,DWORD PTR SS:[EBP-80]
0047E390 . 8945 B8 MOV DWORD PTR SS:[EBP-48],EAX ; WINPOP2.<ModuleEntryPoint>
0047E393 . 8D55 90 LEA EDX,DWORD PTR SS:[EBP-70]
0047E396 . 51 PUSH ECX
0047E397 . 8D45 A0 LEA EAX,DWORD PTR SS:[EBP-60]
0047E39A . 52 PUSH EDX
0047E39B . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
0047E39C . 8D4D B0 LEA ECX,DWORD PTR SS:[EBP-50]
0047E39F . 6A 40 PUSH 40
0047E3A1 . 51 PUSH ECX
0047E3A2 . C745 B0 080000>MOV DWORD PTR SS:[EBP-50],8
0047E3A9 . FF15 88104000 CALL DWORD PTR DS:[<&MSVBVM60.#595>] ; MSVBVM60.rtcMsgBox这里显示提示框
0047E3AF . 8D55 C4 LEA EDX,DWORD PTR SS:[EBP-3C]
0047E3B2 . 8D45 C8 LEA EAX,DWORD PTR SS:[EBP-38]
0047E3B5 . 52 PUSH EDX
0047E3B6 . 50 PUSH EAX ; WINPOP2.<ModuleEntryPoint>
=========================
解决方案:
1.把下面两条指令修改为AND EAX,0,机器码是25 00000000,刚好替换下面5个字节。
0047E29C . 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20] ;用过天数放在EAX
0047E29F . 3BC7 CMP EAX,EDI
这样EAX的值总是取0,总是执行到第一个提示框。所以必须把第一个提示框NOP掉。
2.把下面的CALL NOP掉,需要6个NOP。
0047E3A9 . FF15 88104000 CALL DWORD PTR DS:[<&MSVBVM60.#595>]->nop nop nop nop nop nop
注意:0047E2A1和0047E2AA 处的跳转指令不能够随便修改后面的目标地址,否则因为堆栈不能保持平衡,程序出错。
后记:
第一次使用OD,还不是那么自如,比如怎么才能从任意想要的地址处开始执行呢?怎么象SICE那样执行程序呢?我还没有摸到门道。
QduWg
qduwg@163.com
破解时间:2005年12月29日
[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!