ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:330.85KB ,
资源ID:11858123      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11858123.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(本栏目主要讲解如何解除禁止双开方面的各种方案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

本栏目主要讲解如何解除禁止双开方面的各种方案.docx

1、本栏目主要讲解如何解除禁止双开方面的各种方案本栏目主要讲解如何解除禁止双开方面的各种方案.为什么要禁止双开或多开呢?原因很多.但我们的软件中若能有解开多开的功能,可以有很多的好处.比如一台机子可以同时登陆多个帐号上去玩要想解除中禁止双开的功能,就得先了解禁止双开方面的原理其实想要禁止双开并不难. 禁止双开的方法也有很多但其基本的方式,本栏目会都给介绍一下.在操作系统中每个在运行的进程都是独立的.禁双开的程序在运行时,需要留下一些专有的特征供第二次运行时检测用,当第二次运行时,会去尝试检测有没有某个专有的特征若该特征已存在则结束自身进程.若不存在则继续运行.通过这种方式,就能简单的达到禁止双开的

2、目的.本文介绍第一种,是比较常用的通过 窗口标题 与 窗口类名 的特征来达到禁止双开的功能.如果我们的程序的主要窗口类名与窗口标题是唯一的,一般不会与他人的程序出现相同的情况时,可以用如下AI来实现禁止双开功能.查找窗口的PI在程序运行载入主窗口之前,先通过该API检测一下是否已有存在相应标题的窗口了,若已存在时,自结束自身进程的运行.反之继续运行利用窗口标题与类名来防止程序被多开上面的这段代码,简单的示例了如何使用这个API来达到禁止双开的方式.根据这种禁止双开的方式只要我们在运行第二个进程之前,先把第一个进程的标题修改成别的后,就能正常运行第二个进程,也就能达到解除双开的功能了.呵呵,简单

3、吧!见下面的代码,就能说明这个方法的使用了.通过修改窗口的标题达到破解利用标题禁多开的程序方式与效果上面的代码,就是一种极简单的解除窗口标题方式的禁止双开的功能了.但有些时候,事情可能并不是这么容易能解决的,我们修改了其窗口标题,虽然能使其正常运行了,但该进程若在后期运行过程中,若取自已标题进行一次判断有没有被改变的话,马脚自然就露出来了.对于这种情况,需要在创建第二个进程之前,修改已存在的进程的窗口标题后,新进程创建出来后马上把其窗口标题改回去.但是,这很难操作.所以并不推荐所以若不想通过修改其原窗口标题来达到多开,必需得HOOK其用来检测窗口禁止多开时的那些P如这里使用的 FndWndow

4、A这个API.只要在创建进程时,注入个DL,对该AP进行HOOK.在OO到的参数时,判断窗口标题.进行返回0即可.下面贴上EXE的代码采用安装线程DLL()的方式注入myll.ll文件在注入EXE的代码中,采用2.0版模块中新增的 安装线程DLL() 方式进行注入.下面再贴上DL的代码.采用APIHO来拦截indidow例子程序运行效果工具、源码可在网站首页公布的网盘中下载很多的或一些共享软件,都在采用窗口标题方式来进行禁止多开大家可以试试修改前个已创建进程的窗口标题一段时间,那个进程会不会出错若不会出错说明修改标题无影响.然后再运行第二个进程看看能不能运行起来.需要注意的是,并不定都会采用

5、FindWindoA该API来检测窗口,事实上,可用来查窗口的AP有很多只是 FinidwA相对比较常用罢了.对于其它的API检测窗口,可就得调试分析了.另外有些是用文件名来判断的,只要复制一份EXE重新命令后就能双开了前文讲解了有些使用窗口的标题类名特征来禁止程序双开.本文接着讲解使用进程名来禁止双开与解除的方式采用程序名来限制双开的情况很多.这类程序进程被创建时,会枚举系统里现有的所有进程,进行名称对照,发现与已相同存在时,就结束自身进程见下面的简单例子使用枚举进程来禁止程序被多开上述的代码在进程创建后,会枚举所有进程,然后进行程序名称的判断,发现有存在同名时就结束.对于这类的,可以做个简

6、单的解禁功能,只要把要运行的程序文件复制一份为别的文件名,然后运行之即可.见下面代码.先复制为临时文件再用创建进程并指定原程序目录来运行上述代码把目标程序复制一份临时文件,运行之,就可能达解除双开的目的了.但有些时候,情况并没有这么简单,比如,有些程序进程被运行后,自已再检测自身的进程文件名是不是被改成别的了,禁止被改名的情况下,上述的方式就行不通了.下面再贴一段APIOOK枚举进程时的一个AP.Poces2Next只需要AIHOKProcess2Next 进行程序名的判断,发现同名时,就再调用一次 Poess3Next 取下个进程结构去即可.EXE的代码与上文的一致,下面为DLL的代码.my

7、dll.dl 代码.采用APK拦截 Press32Next实现解除多开限制工具、源码可在网站首页公布的网盘中下载很显然,这一切并不太难.可以通过AIHOO实现一些简单的进程隐藏,DLL隐藏等文章中介绍得简单,只能给大家开扩一下思路不过需要注意的是,可以用来枚举出进程和DL模块等的AP还是蛮多的,例如作坊25模块里的枚举进程线程模块等功能不使用R层的PI实现的,无法被PIOOK给拦截到.本文再介绍一种常用的禁双开的方式,英文名叫 Mute中文名叫 突变体 或 互斥体等. 作坊教程里称它为 互斥体.相同名称的互斥体对象在系统里也是唯一的. 也就是说,若有一个进程已经创建了某个名称的互斥体对象后,其

8、它的进程再去创建该名称的互斥体对象时.不会新建,而且把之前已创建的互斥体对象打开,返回该互斥体对象句柄.如果是打开的话另外会设置 A错误码 13 所以在很多程序中就会使用这个方式来实现禁止多开.例如QQ遊戲大厅就是这种方式.下面为使用互斥体进行禁止多开的简单例子.先贴上本例用到的几个PI下面是如何使用互斥体来实现禁止双开的代码.使用互斥体实现禁止程序多开采用互斥体的程序可以用procexp.exe这个程序查看到.要解除这类的双开,只要在运行新进程前,先尝试着把所有进程中的该名称的互斥体句柄全关掉即可.下面贴上如何枚举所有进程中的句柄,并且取出这些 互斥体 句柄对象的名称.判断是否是 BaseN

9、amebect禁止双开示例” 如果是的话,则使用一个远线程在目标进程里执行 lseHandl 这个API来关掉句柄.注意,枚举出来的其它进程里的句柄,只属于那个进程才能用的,在我们的进程里是不能直接使用的,需要把那个句柄拷贝一份过来,才能在我们的进程中使用.枚举出所有的句柄,找到目标进程里的某种对象句柄使用远线程进行关闭上面的代码有些技术性和技巧性大家慢慢的试着理解吧!同样的,本文也给出了一个AOK的方案,L中的代码见下面.因为创建互斥体时,若互斥体已存在时,会设置 AP错误码 为185.所以我们只需要OOK创建互斥体时的那个API,判断其参数三的互斥体名称然后把PI错误码置为0即可.采用AP

10、IOOK拦截CeMutexA 达到解除双开限制功能工具、源码可在网站首页公布的网盘中下载本文介绍完毕,采用互斥体进行禁止双开的使用率是很高的.除了这三文所介绍的这些方式禁双开外,还有其它如 独占方式打开文件或 共享内存或 注册表 等等都可以做到禁止双开的目的.本节教程采用 解除双开限制-01 里的 禁止双开示例.e 进行.先运行一个 禁止双开示例.xe 进程再用OD载入第二个禁止双开示例.ee 进程.分别下断点在以下两个API上.目的在于断在双开判断后将要终止进程时.ExtrcessTemintePrcess按F运行OD会中断在xitroc.见堆栈窗口内容0012FE5410227CALL到

11、xitProce 来自 rnl.002A20012FE00000ExCe = 0然后在汇编里转到10026D 处 这里krln是易语言的核心支持库.1002A2pushep; 核库某入口12259BECoebp, esp10025B8408moax, dword ptr ebp+800A5E0pheax12A25FB9 E8B9110ovecx, 11B9E8002A64E8D2730cl1005CA0102A2698B4D 8movecx, dwordtp8002A2C51pushcx100A26DFF15E830D10caldwordptr KENL3.ExPoess; ExitProce

12、s1002A2735Dpoebp1002A274C3re; 函数尾为了能追查到是什么地方ALL这个核心库.在该核库函数入口处100228下断点,然后D重载 禁止双开示例.xe .我的的目的需要是一直的往向走,直到在X的领空里为止,因为禁止双开的判断函数都是在EE里的,不太可能会在别的地方按F9运行,会中断在该核库函数入口102A28处.见堆栈窗口内容001FE 0040336 返回到 禁止双开.004067来自 禁止双开.04033E1回到在汇编里转到 00403367 处. 这里的040367已经是禁止双开示例.ex领空了.可以见到如下汇编代码段040155usheb; 子程序入口04032

13、8BCmvebp, es00433248 100000subesp, 10004033A86 FCmvdwodptr bp-4, esp00436 D30000push00303; 入栈窗口标题04033268 E30400ush43E; ACI Ax:0000000:b:1001:10001:0043337B0000movax, 0; 设置EX=0000333CEBE00000al004033F;第一个CAL 调用 FinWindo04033413965 FCcpdd trebp-4, sp04344 Dhot 00403353; 跳转指令00433468 60000pus600403BE8

14、 A90000cal0039; 第二个LL0040335C4 04addesp, 4040335945 movdword pt ebp-C,ex;EX值入栈004033583D F4 0cdrtr ebp-C,0;比较 值0004035A084 0A0000000406; 跳转指令这个跳转指令,比较了一个EAX值与0的大小.一般情况下,EAX寄存器中的值都是来自某CALL执行后的返回值.所以我们得再看看,距离这个EA最近的CALL里会不会有禁止双开的检测.最近的CLL是04334E8 A0000cal04033F9; 第二个CL我们在这第二个CL下断点,然后进行O重载,准备分析这个CLL,但很

15、奇怪,居然没有断在这个断点的第二个CL上.那么就得继续往上分析了以第二个CALL之前,有个比较跳转命令,该命令会跳过第二个CALL.043341965 Fcmpdwd pt e-4, sp04033474jesrt04035;跳转指令此时可以决定第二个AL与禁止双开无关,那么,再往上找,还有个ALL.看来这个CALL一定会是了,因为再之上已经没有其它的CLL指令了下面是第一个CALL的指令,可以在第一个CALL处下断点,04032D68D3040puh3; 入栈窗口标题004036 E0304000pu0030E0; AC Afx:10000000:b:0011:19001:0403337B8

16、 000000moax, 0; 设置AX=00403CE8 BE000000call004033FF; 第一个AL调用 FiWindo然后OD重载XE进行调试,断在了第一个CAL处在这个L之前入栈了两次,可以在查看被入栈了两个参数正好分别是禁止双开示例 与fx:0000:b:1011:90001:0.现在我们跟进这个CLL,需要去更详细的了解它出来如下指令04033FF- F595324000mpwrd p 03295; rnl.02996一个JMP指令,无条件继续跟进.这回跟到了 nln 里了,核心库已经离开了E的领空.100296F50pusheax; 核心库函数体入口102997E8 E

17、7FFFFFca00295C; 返回FindWindowA 入口10029958C4 04sp, 410029978F0mpeax; 跳向AP这段汇编指令不多,一个CLL与一个MP.需要一步步仔细的调试他的变化了.记得注意EX的变化,因为EAX中的值最终会被用来比较而跳向PI函数 EiProces 去第一条指令 00996 不重要第二条指令 是一个CALL,很显然很有必要跟进去了解其详情但是第三条指令 平衡一下堆栈用.第四条指令jmp a 说明了,第二条指令的CALL会返回EA里的值会是某个函数地址.如果不是地址的话,不该出现 JPE进行跳转的.现在我想,先不急着跟进第二条指令CALL.打算先

18、分析第四条指令的J会搞些什么.于是,按F8单步步过 1029970E E7FFFFc10095C 这条指令结果奇迹发生了,见右边的寄存器中的EAX值状态.EAX 77D2D87USER32.FindWinowAECX 001FE0ED03C44 nn1013C4F4E 002FEC0 ASCI rnln.neESP 0012E58EB 00FE78ESI FFFFFFFEI C930738 ntdll.7C930738EIP 1002995rnn.0099EAX中的值是一个user32.d 里的 FinWidowA .下面的JM指令就是跳向该P的.1002997FFE0mpeax下面的进入了

19、dWindowA函数体7D2DE87 8FFmoved,edi; nll.7C307377D2D895pushb7D2DE8Bmovebp,s772DE8C0orea, eax77DD8E50peax72DEFFF5 0Csdwrd ptr epC77DE92F7508puhwo pr ep+877D2E9550puheax772E960puheax7D2DE9E 4CFFFFFcl77D2DDE77D2DE95Dpoebp72DEC2 0800retn堆栈状态001FE5C040334 CALL到FinWndow 来自 禁止双开.040301E60 0040 |Clas Ax:1000000

20、:b:101:1900015:0012FE 040D3 itle =BD, 顾,开示例执行完该API后就回到了EX领空0433C8 E00000call0040F; 第一个ALL 调用 FndidwA004331395Fcdord ptrebp-4, 0433474 jeshort 0040353; 跳转指令现在可以总结,造成禁止双开的祸根就是在执行了 FindnowA 这个AI之后.会比较它的返回值是不是0?不为0时就会跳向 ExtPocess 终止进程的运行.清楚了禁止双开的原因后,接着就可以对症下药了.可以O掉该API就行了.正所谓,光说不练假把式.本篇内容是以QQ游戏大厅程序为例子,本

21、来我是很不情愿再写这篇的,因为此时写的这篇文章,很可能会在一段时间后,游戏更新了,未来本文就会失效.但还是写了,为了大家,也给前面的第四文做个佐证与一点补充.先创建一个游戏进程,然后去创建第二个进程时,会创建失败,并且第一个进程的大厅窗口会被激活置为前台,另外任务栏下的Q游戏按钮也会被闪烁几下.会闪烁可是好事啊,可以给我们找关键的禁止双开的CALL提供很多的帮助QQ游戏闪烁时的效果,是蓝色的,连着闪好几次下面我们在开着第一个大厅的情况下,用O载入第二个游戏大厅程序,然后下断点在以下两个会终止进程的API上ExitProcesermtePces在O里按F9运行,会中断在ExProess 上.见堆

22、栈情况0012FF4 79D45 /CAL到 ExitPocss来自 MSVCRT.77C9D3F0012F0 00000 xitCode =看堆栈提示,是 MSVRT 领空的77C09D3 处指令MSVT是V+的运行时库,与易语言的核心库一样的概念.另外就是易语言与易核心库是用VC编的,所以我们编写的易程序在运行时,也会加载这个 CR 运行库的现在我们在反汇编代码处转到77C09DF.77C938BFFmvei, edi; C运行时库某函数77C09D55usebp77C09D68BEmoveb, esp77C09D68A440BEpus7B40A; ASII mscore.dll77C09

23、D1DF5 E81BE77allwrpr &KERNEL32.eModulHnleA ; kernel32GetModandleACD3C0steax, ea7C09D2574 15jsr 77C09DC77C09D2890E77pus7BE094; ASCICorEitProces77C9D50puheax709D2FF15 D10B7allword tr;krnelGetProcAre77338C0testeax, x7C03574 0jeort 7C093C77C09D37F75 08ushdwd ptr ebp+77C09D3AFD0caleax77C09D3CF8ushdordptr bp+877C9D3FF15 1C12B77 calwd pr KERNEL32.itProes; kernel.EitPrcss7C945CCint37C9D46in3我们当前要做的事就是一级一级的往上找,直到EXE领空为止,所以这

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1