[原创] 第一次使用OllyDbg

前阵子在VBGood论坛上看到了一篇帖子:求助 跨进程解锁 CreateMutex 函数 互斥体
楼主问的内容是这样的:

附件为互斥体 防止双开,   如何解锁让附件的程序可以多开…  不要用修改 exe 的方法, 求助代码如何实现.
查看进程的互斥体可用 Process Explorer 工具,如附件的图.还可以手动右击互斥体解锁..
Process Explorer 工具比较大无法上传.
知道大概流程如下 ..无法实现..求助.. 感谢

  1. 遍历进程.
  2. 取得进程的所有 Handle 是否包含 互斥体关键字, 有的话关闭
    下面找到的是倒霉蛋儿大仙改炉子大仙的的代码好像…  PB的..
    [代码略]

于是,想帮忙解决问题的欲望来了(哈哈),起初是想用API Hook来实现

但是该程序是在Form_Load事件中运行CreateMutex的(汗),所以程序一打开运行后就会调用CreateMutex创建互斥体,这是才来Hook该API是没有用的。

因为笔者功力不住,不会实现全局Hook,所以想了又想,突然有位大大作出了回复

我看修改exe的方法最好了,把某个jmp屏蔽掉,或者把CreateMutex挂钩了

挂钩我想我是实现不了的,于是试试看了修改exe的方法,但是一个星期过了,我一直懒得动手(懒虫一只-.-),直到今天,我才无意间看到了Start Menu中的Olly Dbg时才回想起来那个帖子,点击之、下载楼主的附件、解压、速速拖入OD的主窗口,进度条拼命的跑啊跑,终于好了。
于是,我展开了我的漫长之旅
很少接触OD的笔者,只会几个快捷键——F7(Step into,单行执行,就是遇到call时,跳转到call的目的地),F8(Step Over,跟F7大同小异,但是不进入call的目的地)
先打开原本的程序,然后返回OD。
应为程序发现到多开的话,就会弹出一个Msgbox出来,滑啊滑
终于找到了这个:

image

00401C41     FF15 28104000  CALL DWORD PTR DS:[<&MSVBVM60.#595>]     ;  MSVBVM60.rtcMsgBox

MSVBVM60.rtcMsgBox ,根据名称,一定是Msgbox的函数了(VB6竟然也封装了这个函数,难道是直接调用MessageBoxA/MessageBoxW?)
不过更加显眼的是:

00401C62     FF15 0C104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaEnd>] ;  MSVBVM60.__vbaEnd

MSVBVM60.__vbaEnd ,End,即退出!退出!

当这个程序首次运行时,就会调用CreateMutex,如果这个程序再次运行,它也会调用CreateMutex,但是由于第一个副本已经创建同样名称的Mutex,所以API就会执行失败,失败后就会调用Msgbox提示,然后直接退出。
所以说呢,只要把MSVBVM60.rtcMsgBox 函数干掉,或者不让他Call,程序就不会退出啦!(笔者花了至少1个小时才想到这个办法、正确来说是:花了一个小时才看到此函数,囧。。。)
要怎么样去掉呢?或者是说:要怎么样屏蔽call呢?

看过罗云彬大大的《Windows环境下32位汇编语言程序设计》一定看过这个页的:

image
nop指令!机器码为90h
选这__vbaEnd那行,右键,Binary>Fill with NOPs

image
哈哈,OD帮我们弄好了!

image
按F9(Run),Msgbox 又弹出来了,但是,点击OK后,哈哈,主界面出来啦!

image
可以多开了!
问题是:要怎么样保存修改后的exe文件呢?

笔者用的方法是,下载WinHex,直接修改exe的hex!
先看看OD,00401C62到00401C67都填上了NOP(即机器码90h)
打开WinHex,拖入exe,滑到00001C60处,从00001C62开始填90一直到00001C67

image
Ctrl + S,保存,运行!哈哈成功啦!

源程序和修改后的程序在这里下载:http://www.mediafire.com/download.php?clmrzg1yv1byfaa

« [其他] 开放友情链接申请 [紧急] 本站DropBox中毒了 »
comments powered by Disqus