资源描述:
《本栏目主要讲解如何解除禁止双开方面的各种方案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本栏目主要讲解如何解除禁止双开方面的各种方案.为什么要禁止双开或多开呢?原因很多.但我们的软件中若能有解开多开的功能,可以有很多的好处.比如一台机子可以同时登陆多个帐号上去玩. 要想解除中禁止双开的功能,就得先了解禁止双开方面的原理.其实想要禁止双开并不难.禁止双开的方法也有很多.但其基本的方式,本栏目会都给介绍一下. 在操作系统中每个在运行的进程都是独立的.禁双开的程序在运行时,需要留下一些专有的特征供第二次运行时检测用,当第二次运行时,会去尝试检测有没有某个专有的特征.若该特征已存在则结束自身进程.若不存在则继续运行.通过这种方式,就能简单的达到禁止双开的目的. 本文介绍第一种,是比较常
2、用的.通过窗口标题与窗口类名的特征来达到禁止双开的功能. 如果我们的程序的主要窗口类名与窗口标题是唯一的,一般不会与他人的程序出现相同的情况时,可以用如下API来实现禁止双开功能. 查找窗口的API 在程序运行载入主窗口之前,先通过该API检测一下是否已有存在相应标题的窗口了,若已存在时,自结束自身进程的运行.反之继续运行. 利用窗口标题与类名来防止程序被多开 上面的这段代码,简单的示例了如何使用这个API来达到禁止双开的方式. 根据这种禁止双开的方式.只要我们在运行第二个进程之前,先把第一个进程的标题修改成别的后,就能正常运行第二个进程,也就能达到解除双开的功能了..呵呵,简单吧! 见下面
3、的代码,就能说明这个方法的使用了. 通过修改窗口的标题达到破解利用标题禁多开的程序方式与效果 上面的代码,就是一种极简单的解除窗口标题方式的禁止双开的功能了... 但有些时候,事情可能并不是这么容易能解决的,我们修改了其窗口标题,虽然能使其正常运行了,但该进程若在后期运行过程中,若取自已标题进行一次判断有没有被改变的话,马脚自然就露出来了. 对于这种情况,需要在创建第二个进程之前,修改已存在的进程的窗口标题后,新进程创建出来后马上把其窗口标题改回去.但是,这很难操作.所以并不推荐. 所以若不想通过修改其原窗口标题来达到多开,必需得HOOK其用来检测窗口禁止多开时的那些API.如这里使用的Fi
4、ndWindowA这个API.只要在创建进程时,注入个DLL,对该API进行HOOK.在HOOK到的参数时,判断窗口标题.进行返回0即可. 下面贴上EXE的代码 采用安装线程DLL()的方式注入mydll.dll文件 在注入EXE的代码中,采用2.0版模块中新增的安装线程DLL()方式进行注入. 下面再贴上DLL的代码. 采用APIHOOK来拦截FindWindowA例子程序运行效果 工具、源码可在网站首页公布的网盘中下载 很多的或一些共享软件,都在采用窗口标题方式来进行禁止多开.大家可以试试修改前个已创建进程的窗口标题一段时间,那个进程会不会出错.若不会出错说明修改标题无影响.然后再运行第
5、二个进程看看能不能运行起来. 需要注意的是,并不定都会采用FindWindowA该API来检测窗口,事实上,可用来查窗口的API有很多.只是FindWindowA相对比较常用罢了.对于其它的API检测窗口,可就得调试分析了.另外有些是用文件名来判断的,只要复制一份EXE重新命令后就能双开了前文讲解了有些使用窗口的标题类名特征来禁止程序双开.本文接着讲解使用进程名来禁止双开与解除的方式. 采用程序名来限制双开的情况很多.这类程序进程被创建时,会枚举系统里现有的所有进程,进行名称对照,发现与已相同存在时,就结束自身进程. 见下面的简单例子 使用枚举进程来禁止程序被多开 上述的代码在进程创建后,会
6、枚举所有进程,然后进行程序名称的判断,发现有存在同名时就结束. 对于这类的,可以做个简单的解禁功能,只要把要运行的程序文件复制一份为别的文件名,然后运行之即可.见下面代码. 先复制为临时文件再用创建进程并指定原程序目录来运行 上述代码把目标程序复制一份临时文件,运行之,就可能达解除双开的目的了. 但有些时候,情况并没有这么简单,比如,有些程序进程被运行后,自已再检测自身的进程文件名是不是被改成别的了,禁止被改名的情况下,上述的方式就行不通了. 下面再贴一段APIHOOK枚举进程时的一个API. Process32Next 只需要APIHOOK Process32Next进行程序名的判断,发现
7、同名时,就再调用一次Process32Next取下个进程结构去即可. EXE的代码与上文的一致,下面为DLL的代码. mydll.dll代码.采用APIHOOK拦截Process32Next实现解除多开限制 工具、源码可在网站首页公布的网盘中下载 很显然,这一切并不太难..可以通过APIHOOK实现一些简单的进程隐藏,DLL隐藏等.文章中介绍得简单,只能给大家开扩一下思路.不过需要注意的是,可以用来枚举出进程