- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本栏目主要讲解如何解除禁止双开方面的各种方案.为什么要禁止双开或多开呢?原因很多.但我们的软件中若能有解开多开的功能,可以有很多的好处.比如一台机子可以同时登陆多个帐号上去玩.
?
要想解除中禁止双开的功能,就得先了解禁止双开方面的原理.其实想要禁止双开并不难. 禁止双开的方法也有很多.但其基本的方式,本栏目会都给介绍一下.
?
在操作系统中每个在运行的进程都是独立的.禁双开的程序在运行时,需要留下一些专有的特征供第二次运行时检测用,当第二次运行时,会去尝试检测有没有某个专有的特征.若该特征已存在则结束自身进程.若不存在则继续运行.通过这种方式,就能简单的达到禁止双开的目的.
?
本文介绍第一种,是比较常用的.通过 窗口标题 与 窗口类名 的特征来达到禁止双开的功能.
?
如果我们的程序的主要窗口类名与窗口标题是唯一的,一般不会与他人的程序出现相同的情况时,可以用如下API来实现禁止双开功能.
?
查找窗口的API
?
在程序运行载入主窗口之前,先通过该API检测一下是否已有存在相应标题的窗口了,若已存在时,自结束自身进程的运行.反之继续运行.
?
利用窗口标题与类名来防止程序被多开
?
上面的这段代码,简单的示例了如何使用这个API来达到禁止双开的方式.
?
根据这种禁止双开的方式.只要我们在运行第二个进程之前,先把第一个进程的标题修改成别的后,就能正常运行第二个进程,也就能达到解除双开的功能了..呵呵,简单吧!
?
见下面的代码,就能说明这个方法的使用了.
?
通过修改窗口的标题达到破解利用标题禁多开的程序方式与效果
?
上面的代码,就是一种极简单的解除窗口标题方式的禁止双开的功能了...
?
但有些时候,事情可能并不是这么容易能解决的,我们修改了其窗口标题,虽然能使其正常运行了,但该进程若在后期运行过程中,若取自已标题进行一次判断有没有被改变的话,马脚自然就露出来了.
?
对于这种情况,需要在创建第二个进程之前,修改已存在的进程的窗口标题后,新进程创建出来后马上把其窗口标题改回去.但是,这很难操作.所以并不推荐.
?
所以若不想通过修改其原窗口标题来达到多开,必需得HOOK其用来检测窗口禁止多开时的那些API.如这里使用的 FindWindowA 这个API.只要在创建进程时,注入个DLL,对该API进行HOOK.在HOOK到的参数时,判断窗口标题.进行返回0即可.
?
下面贴上EXE的代码
?
采用安装线程DLL()的方式注入mydll.dll文件
?
在注入EXE的代码中,采用2.0版模块中新增的 安装线程DLL() 方式进行注入.
?
下面再贴上DLL的代码.
?
采用APIHOOK来拦截FindWindowA例子程序运行效果
?
工具、源码可在网站首页公布的网盘中下载
?
很多的或一些共享软件,都在采用窗口标题方式来进行禁止多开.大家可以试试修改前个已创建进程的窗口标题一段时间,那个进程会不会出错.若不会出错说明修改标题无影响.然后再运行第二个进程看看能不能运行起来.
?
需要注意的是,并不定都会采用 FindWindowA 该API来检测窗口,事实上,可用来查窗口的API有很多.只是 FindWindowA 相对比较常用罢了.对于其它的API检测窗口,可就得调试分析了. 另外有些是用文件名来判断的,只要复制一份EXE重新命令后就能双开了
前文讲解了有些使用窗口的标题类名特征来禁止程序双开.本文接着讲解使用进程名来禁止双开与解除的方式.
?
采用程序名来限制双开的情况很多.这类程序进程被创建时,会枚举系统里现有的所有进程,进行名称对照,发现与已相同存在时,就结束自身进程.
?
见下面的简单例子
?
使用枚举进程来禁止程序被多开
?
上述的代码在进程创建后,会枚举所有进程,然后进行程序名称的判断,发现有存在同名时就结束.
?
对于这类的,可以做个简单的解禁功能,只要把要运行的程序文件复制一份为别的文件名,然后运行之即可.见下面代码.
?
先复制为临时文件再用创建进程并指定原程序目录来运行
?
上述代码把目标程序复制一份临时文件,运行之,就可能达解除双开的目的了.
?
但有些时候,情况并没有这么简单,比如,有些程序进程被运行后,自已再检测自身的进程文件名是不是被改成别的了,禁止被改名的情况下,上述的方式就行不通了.
?
下面再贴一段APIHOOK枚举进程时的一个API.
?
Process32Next
?
只需要APIHOOK?Process32Next 进行程序名的判断,发现同名时,就再调用一次 Process32Next 取下个进程结构去即可.
?
EXE的代码与上文的一致,下面为DLL的代码.
?
mydll.dll 代码.采用APIHOOK拦截 Process32Next实现解除多开限制
?
工具、源码可在网
文档评论(0)