好友
阅读权限10
听众
最后登录1970-1-1
|
duce
发表于 2008-8-12 22:28
前天在CM区看到总版主发的一个时间限制的CM,下来做练习,前几个对话框没什么难度,F12法或rtcmsgbox断点都可以轻松去掉,时间限制偶花了两个小时,虽除去了但还是没彻底弄明白,发了求助贴,在总版主的指导下总算搞清楚了。为答谢总版主,特作此文。也借这个机会和坛友交流一下,不周之处请坛友指出,使小妹多个学习的机会。
前两个对话框就不多说了,直接说时间限制吧!
首先:OD载入(前两个对话框已除去了),下bpx SetTimer(创建定时器)断点,找到--VbFreeObj这个函数,在每个调用--VbaFreeObj上设置断点。查看断点,发现设了好多断点,哈哈!不用理它。F9运行,发现共断下三次,分别是:
004039C2 .FF15 E4104000 calldword ptr [<&MSVBVM60.__vbaFreeO>;MSVBVM60.__vbaFreeObj第一次
00403A07 .FFD3callebx;MSVBVM60.__vbaFreeObj; <&MSVBVM60.__vbaFreeObj>第2次
00403B43 .FF15 E4104000 calldword ptr [<&MSVBVM60.__vbaFreeO>;MSVBVM60.__vbaFreeObj第三次
在第三次断下时,程序运行起来了,这就是我们要找的咯!
先跟一下试试:
00403B43 .FF15 E4104000 calldword ptr [<&MSVBVM60.__vbaFreeO>;MSVBVM60.__vbaFreeObj
00403B49 .C3retn
下边直接跟retn,到断尾了。偶跟了好几次,直接进系统领空,一会就退出了。这说明程序运行到这里已经判断完了。看这一段:
00403B39 .68 4B3B4000 push00403B4B
00403B3E .EB 0A jmp short 00403B4A
00403B40 .8D4D E8 lea ecx, dword ptr [ebp-18]
00403B43 .FF15 E4104000 calldword ptr [<&MSVBVM60.__vbaFreeO>;MSVBVM60.__vbaFreeObj
00403B49 .C3retn
00403B4A >C3retn ;RET 用作跳转到 00403B4B
在00403B3E .EB 0A jmp 这个跳,跳过了我们断下的地址,走到最下边的那个retn。只要这个Jmp实现了,定时器不就没用了吗?但定时器是不会让它实现的!
玩这个CM时,偶没仔细分析,就用了PYG中流行的那个去对话框的办法咯!但偶这个办法最大的缺点就是弄的人一头雾水,有得过且过的味道。
好,向上翻到段首,我们来到:
00403AB0 > \55pushebp改成Jmp00403B4A
00403AB1 .8BECmov ebp, esp
00403AB3 .83EC 0C sub esp, 0C
00403AB6 .68 B6114000 push<jmp.&MSVBVM60.__vbaExceptHandle>;SE 处理程序安装
00403ABB .64:A1 0000000>mov eax, dword ptr fs:[0]
00403AC1 .50pusheax
00403AC2 .64:8925 00000>mov dword ptr fs:[0], esp
在段首下断。重新载入程序,F9运行,程序也运行起来了,也断下来了。这就说明从这里开始走,定时器会把CM引向退出,我们把它跳过去不就行啦!就从段首改就行了!
00403AB0 > \55pushebp改成Jmp00403B4A
保存试一下,OK成功!
再就是:看在我们改的这个段首,是从前边跳过来的,往上找,(往上找了好久)来到:
00402ACF . /E9 DC0F0000 jmp 00403AB0
在这里改也行啊!把Jmp的地址 00403B4A,道理一样啊!
这就是我的办法咯!不过偶说了呀,没找到控制器啊?当时偶没好好分析,乱跟,当然没收获啦!实在受不了,就发了求助贴,总版主告诉偶就在这一段,还用说啊,哈哈!忽然转过弯来了,低级错误!
偶跟了几次没跟出来的原因是在段首下断后跟了不久就跑系统领空去了,偶一会就受不了重来,不就跟不出来啦!其实总会走回来呀!(偶又上了一课,欲速则不达)
好,段首下断,F9运行,F8单步跟:
00403AB0 > \55pushebp
00403AB1 .8BECmov ebp, esp
00403AB3 .83EC 0C sub esp, 0C
00403AB6 .68 B6114000 push<jmp.&MSVBVM60.__vbaExceptHandle>;SE 处理程序安装
00403ABB .64:A1 0000000>mov eax, dword ptr fs:[0]
00403AC1 .50pusheax
00403AC2 .64:8925 00000>mov dword ptr fs:[0], esp
00403AC9 .83EC 14 sub esp, 14
00403ACC .53pushebx
00403ACD .56pushesi
00403ACE .57pushedi
00403ACF .8965 F4 mov dword ptr [ebp-C], esp
00403AD2 .C745 F8 98114>mov dword ptr [ebp-8], 00401198
00403AD9 .8B75 08 mov esi, dword ptr [ebp+8]
00403ADC .8BC6mov eax, esi
00403ADE .83E0 01 and eax, 1
00403AE1 .8945 FC mov dword ptr [ebp-4], eax
00403AE4 .83E6 FE and esi, FFFFFFFE
00403AE7 .56pushesi
00403AE8 .8975 08 mov dword ptr [ebp+8], esi
00403AEB .8B0Emov ecx, dword ptr [esi]
00403AED .FF51 04 calldword ptr [ecx+4]
00403AF0 .33FFxor edi, edi
00403AF2 .897D E8 mov dword ptr [ebp-18], edi
00403AF5 .FF15 1C104000 calldword ptr [<&MSVBVM60.__vbaEnd>] ;MSVBVM60.__vbaEnd过了这里就进系统领空了,进系统领空后N次F8回到程序的领空,到我们第一次下的断点0043B43了,不用继续跟了吧?
这不找到啦。00403AF5不就是定时器的那个Call吗?我们Nop掉它不就行啦!
再说一下爆破吧!
OD载入,下__vbaStrCmp断点,输入用户名:duce, 注册码随便啦!点注册。断下来啦:
660E8A03 >FF7424 08 pushdword ptr [esp+8]断在这里,看寄存器,比较用户名!比较用户名干嘛???duce和1974比较!!!
660E8A07FF7424 08 pushdword ptr [esp+8]
660E8A0B6A 00 push0
660E8A0DE8 B426F3FF call__vbaStrComp
660E8A12C2 0800 retn8 过了这里,进程序领空
来到:
0040355F .8BF8mov edi, eax
00403561 .8D4D D8 lea ecx, dword ptr [ebp-28]
00403564 .F7DFneg edi
00403566 .1BFFsbb edi, edi
00403568 .F7DFneg edi
0040356A .F7DFneg edi
0040356C .FF15 E0104000 calldword ptr [<&MSVBVM60.__vbaFreeS>;MSVBVM60.__vbaFreeStr这里释放啦!!!
00403572 .8D4D D0 lea ecx, dword ptr [ebp-30]
00403575 .FF15 E4104000 calldword ptr [<&MSVBVM60.__vbaFreeO>;MSVBVM60.__vbaFreeObj 关键Call啦!!!
0040357B .66:3BFE cmp di, si
0040357E .0F84 8D000000 je00403611 关键跳可以改成Jne,jmp让它跳就行!
00403584 .8B0Bmov ecx, dword ptr [ebx]
00403586 .53pushebx
爆破完成了。
偶又跟了好久,没发现有注册码,后来试了试,直接用户名1974就行了,总版主开了个玩笑,哈哈!
从这个CM偶又学到了不少东西,偶没弄过时间限制的CM,菜菜嘛!到看雪找的资料。跟各位老师学呗!这个CM弄了两个多小时,有点心得就拿出来给大家交流一下,偶的进步源于大家的帮助哦!
最后感谢总版主小生我怕怕为我们提供了这么好的平台,又给了偶个人这么大的帮助,谢谢!祝愿52pojie越办越好! |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|