DID辅助dnf现在稳定的辅助么

Hi,这是的腾讯微博,别吝惜你的关注,赶紧登录,和TA互动吧!
(@myb_1987)
在他的广播中搜索
已为您隐藏部分来自游戏、活动、第三方应用等的营销和广告微博,您可查看
Copyright & 1998 - 2017 Tencent. All Rights Reserved后使用快捷导航没有帐号?
查看: 704|回复: 8
最后登录 斗站分0 QQ注册时间阅读权限10精华0积分995帖子
拜师菩提, 积分 995, 距离下一级还需 205 积分
斗站分0 历史贡献0
如题!我发现这游戏都进入攻击至高的误区,我就是这么一问,求不要喷我!
我感觉狐狸治疗能力非常的强!也许可以为新版本大团战做出很多贡献!
最后登录 斗站分0 QQ注册时间阅读权限20精华0积分3969帖子
炉火纯青, 积分 3969, 距离下一级还需 1031 积分
斗站分0 历史贡献764
团队副本还没出,没测试过,不过我已经开了一系了。。
估计还是不错的!
最后登录 斗站分0 QQ注册时间阅读权限10精华0积分965帖子
拜师菩提, 积分 965, 距离下一级还需 235 积分
斗站分0 历史贡献0
楼主的想法是好的,但五行山预更新已经大削毒蜂阵的回血效果了
最后登录 斗站分0 QQ注册时间阅读权限10精华0积分1010帖子
拜师菩提, 积分 1010, 距离下一级还需 190 积分
斗站分0 历史贡献0
纯辅助?别搞笑了,削了后基本上就没辅助功能了,我们的墙还挡人呢,不过当纯输出是不错的,至少我刷本输出不虚2700攻的猴子和2700的罗刹。我骑上熊也就2300攻。
最后登录 斗站分59 注册时间阅读权限150精华0积分48490帖子
玲瓏骰子安紅豆
入骨相思君知否
斗站分59 历史贡献0
我也是狐狸 我喜欢输出,辅助不是我风格。
最后登录 斗站分0 QQ注册时间阅读权限20精华0积分2045帖子
身怀绝技, 积分 2045, 距离下一级还需 455 积分
斗站分0 历史贡献0
楼主可以醒醒了。这个辅助梦也破灭了。。
最后登录 斗站分0 QQ注册时间阅读权限20精华0积分3969帖子
炉火纯青, 积分 3969, 距离下一级还需 1031 积分
斗站分0 历史贡献764
辅助还是可以的
第一:荆棘墙当怪。。。虽然是个诟病,但是如果是类似保护某个人物,在不能拉住怪的情况下,挡一挡还是不错的!
第二:荆棘墙溃烂
第三:荆棘墙眩晕小怪
第四:天雷溃烂+持续眩晕小怪
第五:爆裂团队补血
第六:咒魂印团队补血
第七:毒蜂团队补血+眩晕小怪(补血就聊胜于了。。。)
最后登录 斗站分0 QQ注册时间阅读权限20精华0积分1485帖子
身怀绝技, 积分 1485, 距离下一级还需 1015 积分
斗站分0 历史贡献0
辅助加血就是奶妈了,牛这个T都不需要,要奶妈干嘛?斗战神就是个DPS至上的游戏,狐狸的爆裂,印魂要加满团队加血付出的精修点要多少?加满了回血 DPS就没了,那么就是纯粹的奶妈了,根本不需要个累赘,再说就2个技能回血,华**的CD& &根本不够用........................好好的走DPS之路吧,不是玩家走入误区,而是官方策划把游戏卡死了,路就只有一条。
最后登录 斗站分0 QQ注册时间阅读权限20精华0积分2045帖子
身怀绝技, 积分 2045, 距离下一级还需 455 积分
斗站分0 历史贡献0
疯子终结者 发表于
辅助还是可以的
第一:荆棘墙当怪。。。虽然是个诟病,但是如果是类似保护某个人物,在不能拉住怪的情况下 ...
基本上没那么多精修点的谢谢。。
爆裂谁出补血?才那么一点点。。。才十几秒,2分钟冷却
咒印只有骑熊才有。。才十几秒,2分钟冷却
毒蜂,要改了好不好,一秒2%你慢慢去算。。还要在进阶的时候才有。。
还有一点很重要,现在哪个队需要这些辅助了?改了后,补那么点点的血谁还要?
版面整齐 功劳大大
在官方论坛发过上高质量攻略.牛B也
官方版主团认可的玉狐大神
长期对论坛的繁荣而不断努力.
Powered by千万不要随便说I do 啊_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
千万不要随便说I do 啊
总评分4.3|
浏览量31394
用知识赚钱
&&do 的用法
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢盼望看完这篇文章对大家有所辅助跟鉴戒
  SEO职员生机关键词长期稳定,免遭SEO客户的无情督促。SEO客户愿望关键词长期占住首页,提高公司业务量!那么该如何让关键词尽可能长的稳定在首页呢?
  不要没事乱修改题目,改网站模板等等。许多朋友一段时间没事之后,感到手痒痒想改一下网站的作风。如果你的网站权重不高,就别容易修正,那样会让搜寻引擎受不了的。
  王施帆以为网站平安会越来越重要,现在的黑链太猖獗了。亲眼看见一个网站被一群黑链弄得被K了。如果我们平时有时光,是有必要学习一下网站保险这块的知识的,不求粗通,至少学会自卫。
  4. 零零星碎也重要。
  3. 后期外链需要谨严,再谨慎。
  另外,与其说交换的是友链,还不如说交换的人品。碰到无端撤链、舞弊链接的情况,不用多说,撤掉他没磋商,拉黑不必再理。
  2. 网站内容质量和频率不可粗心。
  1. 再强悍的空间服务器也不为过。
  软文外链,不用多说,太给力了。这里主要是想给那些每天到处发垃圾帖而不乐意写软文的朋友说多少句,发垃圾帖不累吗?花点时间理理思路,写篇很赞的软文,不仅得到了高质量的外链,而且还能营销自己,如我是王施帆,可以在文章旁边接地先容自己,让更多友人意识我。有时候略微一动头脑,就能播种良多。别怕动脑子!
  第三, 软文外链,稳定外链工作中的主力军。
  说到网站的空间选用,王施帆有本人的观点!不是什么网站都需要用品牌空间,个别分为两种情况:第一,网站只是用来试手,没盘算做多久的情况下,可以在淘宝上抉择一家信用比拟好的空间商,廉价而且空间也不差。第二,网站是用来为公司或者个人博客筹备久长作战的,这样的情况需要取舍有品牌的空间商,免得小空间商日后跑路。
  第二, 友链检讨工作,天天不能少。
  好了。今天就聊到这里
www.029did.com,盼望看完这篇文章对大家有所辅助跟鉴戒。欢送与王施帆交换SEO常识QQ群。本文由深圳工商注册www.jiangsuancha.com原创供给!
  对于网站内容的需要懂得两点。第一,网站的内容品质,不论是前期我们在优化关键词排名的时候,仍是在后期保护首页排名时,都需要我们脚踏实地地为网站内容做足工夫,详细体当初文章相干性强、原创度高、用户休会好。
  博客被官方关闭,也是很让人头疼的事件。独一的方式,只有重视博客内容的建设,让外链建设不太显明。这样,治理员在查看咱们博客的时候,才不会忍心下手。这里王施帆教大家一个小点子,如建设一个股票类的博客,大家能够应用连载教程的情势去更新博客内容,这样很大水平会进步博客的标准性。
  把外链这一环节放到最后的目标,信任大家是清楚的。外链这一环节波及的细节太多,需要当真看待。
  大家想关键词的长期稳定,那么空间的稳定性是不可小觑的。做好这一关会为日后减少太多不用要的懊恼!
  友链的权重可以说和软文外链差未几,所以我们每天需要花10分钟来检查网站的友链情形,被K、被降权、快照10天没更新、网站时常打不开的统统告诉并去掉。另外及时交流一些高质量的友链,淘汰质量低的友链。
  在行业竞争中,假如产品或者服务的质量与对手打平手,那么售后服务将是一个产品或者服务克服竞争对手的关键。SEO也是如斯,其售后服务也就是后期稳定关键词的排名了。为什么王施帆今天要写这篇关于后期稳定关键词排名的办法,是由于这一块在SEO接单进程中,不可或缺的一局部,也是现在更多的SEO客户关怀和担忧的地方。
  外链的稳固很主要,当然内链也不能缺乏啊!公道的内链构造是一个网站内部优化的要害中的症结。增添内链最须要记住的处所就是做作性,要很天然的增加进去。
  论坛账号被版主封了,是SEO工作者最恐怖的事情!它将会导致大批的外链丧失,排名天然也会随着稳定。我们只有一直的发掘新的论坛资源去解脱资源单一的处境,才干不会遭遇太大的影响。
  第一, 外链稳定,论坛、博客是主流。
  第二,网站更新的稳定频率。这里重要捉住更新频率的稳定性,前期可以每天更新一篇文章,等到关键词排名稳定了,可以挑选隔两天更新一次,但频率需要稳定才可。
相关的主题文章:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。聊聊游戏辅助那些事上部第一篇——过掉那些讨厌的游戏保护。
这个系列计划分为上下两部,上部是内置型辅助,下部是按键型辅助。我不保证会写完。聊聊游戏辅助那些事上部第一篇——过掉那些讨厌的游戏保护。相对以前那些裸奔游戏,现在的新游戏多少都会有些保护,这是绕不过去的坎。下面针对我发现的几个保护方法,逐个的聊一聊。1、R3应用层下,DebugActiveProcess 加载调试器时,会设置一个远程断点,而这个远程断点其实多此一举,反而有时会触发反调试检测。唯一要做的就是绕过它。这是NtDebugActiveProcess的上层函数,DbgUiDebugActiveProcess的反汇编代码::00:& mov&&&&&&&& edi,edi& 7760FC4C& push&&&&&&& ebp& 7760FC4D& mov&&&&&&&& ebp,esp& 7760FC4F& mov&&&&&&&& eax,dword ptr fs:[h]& 7760FC55& push&&&&&&& esi& 7760FC56& push&&&&&&& dword ptr [eax+0F24h]& 7760FC5C& push&&&&&&& dword ptr [ebp+8]& 7760FC5F& call&&&&&&&
(h)& 7760FC64& mov&&&&&&&& esi,eax& &&&&&&//&原始返回地址7760FC66& test&&&&&&& esi,esi& 7760FC68& jl&&&&&&&&&
(7760FC80h)& 7760FC6A& push&&&&&&& dword ptr [ebp+8]& 7760FC6D& call&&&&&&&
(7760FC03h)& 7760FC72& mov&&&&&&&& esi,eax& 7760FC74& test&&&&&&& esi,esi& 7760FC76& jge&&&&&&&&
(7760FC80h)& 7760FC78& push&&&&&&& dword ptr [ebp+8]& 7760FC7B& call&&&&&&&
(7760FB88h)& 7760FC80& mov&&&&&&&& eax,esi& 7760FC82& pop&&&&&&&& esi& &&&&&&//&+0x1E后的返回地址7760FC83& pop&&&&&&&& ebp& 7760FC84& ret&&&&&&&& 4&下面是64位 WINDOW7 下面的 NtDebugActiveProcess 的钩子函数的具体代码,绕过远程断点的方法是在返回地址上加偏移0x1E//
//&NtDebugActiveProcess
NTSTATUS&WINAPI&DbgNtDebugActiveProcess64(
&__in&HANDLE&ProcessHandle,
&__in&HANDLE&DebugObjectHandle&)
&NTSTATUS&Status&=&TrueNtDebugActiveProcess(ProcessHandle,&DebugObjectHandle);
&KdPrint((_T(&NtDebugActiveProcess&返回值:&0x%08x!\r\n&),&Status));
&//&绕过应用层的远程断点,完全多此一举啊。
&if&(NT_SUCCESS(Status))
&&LPVOID&ReturnAddress&=&(LPSTR)&ProcessHandle&-&sizeof(DWORD);
&&*(LPDWORD)ReturnAddress&+=&0x1E;
}2、如果保护程序有驱动,那么在R0核心层下调试端口清零会是绝大多数游戏保护的选择。进程的调试端口保存了一个调试器对像,当有异常发生时,操作系统的异常处理程序会查询这个端口,如果存在调试器,就会将异常发送给调试器,调试器会优先获得异常处理的权利。网上有不少方法,这儿采用自建调试端口管理的方法绕过它,呵呵,你想清零就清零,反正我又不用它。直接上获取设置调试端口的相关代码。typedef&struct&_DEBUGED_PROCESS_ENTRY
&LIST_ENTRY&EventL
&PEPROCESS&P
&PDEBUG_OBJECT&DebugP
&ULONG&KeExceptionDispatchC
}DEBUGED_PROCESS_ENTRY,&*PDEBUGED_PROCESS_ENTRY;
LIST_ENTRY&DebugedProcessL
PDEBUG_OBJECT&GetDebugPort(PEPROCESS&Process)
&PDEBUG_OBJECT&DebugObject&=&NULL;
&PLIST_ENTRY&E
&PDEBUGED_PROCESS_ENTRY&DebugedP
&ExAcquireFastMutex(&DebugedProcessListMutex);
&for&(Entry&=&DebugedProcessList.F&Entry&!=&&DebugedProcessL&Entry&=&Entry-&Flink)
&&DebugedProcess&=&CONTAINING_RECORD(Entry,&DEBUGED_PROCESS_ENTRY,&EventList);
&&if&(DebugedProcess-&Process&==&Process)
&&&DebugedProcess-&KeExceptionDispatchCount++;
&&&DebugObject&=&DebugedProcess-&DebugP
&ExReleaseFastMutex(&DebugedProcessListMutex);
&return&DebugO
NTSTATUS&SetDebugPort(PEPROCESS&Process,&PDEBUG_OBJECT&DebugProt)
&PDEBUGED_PROCESS_ENTRY&DebugedP
&DebugedProcess&=&(PDEBUGED_PROCESS_ENTRY)ExAllocatePoolWithTag(NonPagedPool,
&&sizeof(DEBUGED_PROCESS_ENTRY),
&&'DotP');
&if&(DebugedProcess)
&&ExAcquireFastMutex(&DebugedProcessListMutex);
&&DebugedProcess-&Process&=&P
&&DebugedProcess-&DebugPort&=&DebugP
&&DebugedProcess-&KeExceptionDispatchCount&=&0;
&&InsertTailList(&DebugedProcessList,&&DebugedProcess-&EventList);
&&ExReleaseFastMutex(&DebugedProcessListMutex);
&&return&STATUS_SUCCESS;
&&return&STATUS_INSUFFICIENT_RESOURCES;
}这是真正的核心代码,注意看注释。后面的 DeviceIoControlDispatch 会调用这个函数。NTSTATUS
OnNtDebugActiveProcess(
&IN&HANDLE&ProcessHandle,
&IN&HANDLE&DebugObjectHandle
&_KdPrint((&NtDebugActiveProcess&%x,&%x\r\n&,&ProcessHandle,&DebugObjectHandle));
&NTSTATUS&S
&KPROCESSOR_MODE&PreviousM
&PEPROCESS&P
&PDEBUG_OBJECT&DebugO
&LIST_ENTRY&TempL
&&PAGED_CODE();
&PreviousMode&=&KeGetPreviousMode();
&Status&=&ObReferenceObjectByHandle(ProcessHandle,
&&PROCESS_SET_PORT,
&&*PsProcessType,
&&PreviousMode,
&&(PVOID*)&Process,
&if&(!NT_SUCCESS(Status))
&&return&S
&DebugObject&=&GetDebugPort(Process);
&if&(DebugObject)
&&Status&=&STATUS_PORT_ALREADY_SET;
&if&(NT_SUCCESS(Status))
&&//&调用系统的调试进程符加函数
&&_KdPrint((&TrueNtDebugActiveProcess&Enter\r\n&));
&&Status&=&NtDebugActiveProcess(ProcessHandle,&DebugObjectHandle);
&&_KdPrint((&TrueNtDebugActiveProcess&Leave\r\n&));
&&if&(NT_SUCCESS(Status))
&&&Status&=&ObReferenceObjectByHandle(DebugObjectHandle,
&&&&DEBUG_PROCESS_ASSIGN,
&&&&*DbgkDebugObjectType,
&&&&PreviousMode,
&&&&(PVOID*)&DebugObject,
&&&&NULL);
&&&if&(NT_SUCCESS(Status))
&&&&//&无痕调试,需要清理调试标志,保存事件列表
&&&&TempList&=&DebugObject-&EventL
&&&&//&从调试对像中移除事件列表
&&&&InitializeListHead(&DebugObject-&EventList);
&&&&//&清理进程的调试端口及调试标志,不用你清零调试端口了,我自己就直接清零了。
&&&&DbgkClearProcessDebugObject(Process,&DebugObject);
&&&&//&恢复调试对像的事件列表
&&&&DebugObject-&EventList&=&TempL
&&&&SetDebugPort(Process,&DebugObject);
&&&&if&(!NT_SUCCESS(Status))
&&&&&ObDereferenceObject(DebugObject);
&if&(!NT_SUCCESS(Status))
&&ObDereferenceObject(Process);
}但是用 OnNtDebugActiveProcess 加载那是完全不调试,因为这个函数不用你清零调试端口了,我自己就直接清零了。然后就要对DbgkForwardException下钩子,让我们自己保存的调试端口发挥作用。具体代码。BOOLEAN
OnDbgkForwardException(
&&&&IN&PEXCEPTION_RECORD&ExceptionRecord,
&&&&IN&BOOLEAN&DebugException,
&&&&IN&BOOLEAN&SecondChance
&&&&DBGKM_APIMSG&m;
&&&&PDBGKM_EXCEPTION&
&&&&NTSTATUS&
&&&&PAGED_CODE();
&if&(!DebugException)
&&return&FALSE;
&//&进程设置了调试端口,或者没有影射当前进程的调试端口
&if&(GetDebugPort(PsGetCurrentProcess())&==&NULL)
&&return&FALSE;
&//&调试端口被置零。
&_KdPrint((&DbgkForwardException&ExceptionAddress&=&%08x,&ExceptionCode&=&%08x&\r\n&,&ExceptionRecord-&ExceptionAddress,&ExceptionRecord-&ExceptionCode));
&args&=&&m.u.E
&//&Initialize&the&debug&LPC&message&with&default&information.
&_KdPrint((&DBGKM_FORMAT_API_MSG\r\n&));
&DBGKM_FORMAT_API_MSG(m,DbgKmExceptionApi,sizeof(*args));
&&&&//&Fill&in&the&remainder&of&the&debug&LPC&message.
&_KdPrint((&args-&ExceptionRecord&=&*ExceptionRecord\r\n&));
&args-&ExceptionRecord&=&*ExceptionR
&&&&args-&FirstChance&=&!SecondC
&&&&//&Send&the&debug&message&to&the&destination&LPC&port.
&_KdPrint((&DbgkpSendApiMessage\r\n&));
&st&=&DbgkpSendApiMessage(&m,DebugException);
&&&&//&If&the&send&was&not&successful,&then&return&a&FALSE&indicating&that
&&&&//&the&port&did&not&handle&the&exception.&Otherwise,&if&the&debug&port
&&&&//&is&specified,&then&look&at&the&return&status&in&the&message.
&&&&if&(!NT_SUCCESS(st)&||
&&&&&&&&((DebugException)&&&
&&&&&&&&(m.ReturnedStatus&==&DBG_EXCEPTION_NOT_HANDLED&||&!NT_SUCCESS(m.ReturnedStatus))))
&&_KdPrint((&DbgkForwardException&FAILED,&STATUS&=&%08x,&DebugException&=&%d,&ReturnedStatus&=&%08x!\r\n&,&st,&DebugException,&m.ReturnedStatus));
&&return&FALSE;
&&_KdPrint((&DbgkForwardException&SUCCESSED!\r\n&));
&&return&TRUE;
}上面的两个函数用到了几个没有导出的核心函数,这就需要自己定位相关的函数了,这里就不再展开定位的方法了。调试器在应用层需要添加钩子函数:DbgNtDebugActiveProcess64,与前面的 DbgNtDebugActiveProcess64 的差别在不再调用 TrueNtDebugActiveProcess,而是通过 DeviceIoControl 调用我们自己的NtDebugActiveProcess//
//&NtDebugActiveProcess
NTSTATUS&WINAPI&DbgNtDebugActiveProcess64(
&__in&HANDLE&ProcessHandle,
&__in&HANDLE&DebugObjectHandle&)
&NTSTATUS&S
&DWORD&lResultL
&PARAM_NtDebugActiveProcess64&
&param.ProcessHandle&=&ProcessH
&param.DebugObjectHandle&=&DebugObjectH
&DeviceIoControl(
&&g_hModuleDbgHelper,
&&IOCTL_NtDebugActiveProcess,
&&sizeof(param),
&&&Status,
&&sizeof(Status),
&&&lResultLength,
&KdPrint((_T(&NtDebugActiveProcess&返回值:&0x%08x!\r\n&),&Status));
&if&(NT_SUCCESS(Status))
&&LPVOID&ReturnAddress&=&(LPSTR)&ProcessHandle&-&sizeof(DWORD);
&&*(LPDWORD)ReturnAddress&+=&0x1E;
}3、调试器对像降权。当系统的调试器对像的访问权限被设置为零时,表现为附加不上所有程序,游戏保护让我们创建的调试对像成为没有调试权限的调试对像。处理方法:重建一个调试对像类型,然后替换掉系统的调试对像类型。NTSTATUS
DbgkCreateDebugObjectType(
&POBJECT_TYPE*&DebugObjectType
&NTSTATUS&S
&UNICODE_STRING&N
&POBJECT_TYPE&SysDebugObjectT
&POBJECT_TYPE&ObpTypeObjectT
&PAGED_CODE();
&//&先打开系统本身的调试对像
&RtlInitUnicodeString(&Name,&L&\\ObjectTypes\\DebugObject&);
&ObpTypeObjectType&=&ObGetObjectType(*PsProcessType);
&Status&=&ObReferenceObjectByName(&Name,&OBJ_CASE_INSENSITIVE,&NULL,&0,&ObpTypeObjectType,&KernelMode,&NULL,&(PVOID*)&SysDebugObjectType);
&if&(NT_SUCCESS(Status))
&&//&系统调试器的对像关闭函数
&&(OB_CLOSE_METHOD&)SysDbgkpCloseObject&=&SysDebugObjectType-&TypeInfo.CloseP
&&//&先试着打开我们的调试对像类型,如果打开成功,直接使用即可
&&RtlInitUnicodeString(&Name,&L&\\ObjectTypes\\NewDebugObject&);
&&Status&=&ObReferenceObjectByName(&Name,&OBJ_CASE_INSENSITIVE,&NULL,&0,&ObpTypeObjectType,&KernelMode,&NULL,&(PVOID*)DebugObjectType);
&&if&(Status&==&STATUS_OBJECT_NAME_NOT_FOUND)
&&&RtlInitUnicodeString(&Name,&L&NewDebugObject&);
&&&GENERIC_MAPPING&GenericMapping&=&{&STANDARD_RIGHTS_READ&|&DEBUG_READ_EVENT,
&&&&STANDARD_RIGHTS_WRITE&|&DEBUG_PROCESS_ASSIGN,
&&&&STANDARD_RIGHTS_EXECUTE&|&SYNCHRONIZE,
&&&&DEBUG_ALL_ACCESS&};
&&&OBJECT_TYPE_INITIALIZER&oti&=&{&0&};
&&&oti.Length&=&sizeof(oti);
&&&oti.SecurityRequired&=&TRUE;
&&&oti.InvalidAttributes&=&0;
&&&oti.PoolType&=&NonPagedP
&&&oti.DeleteProcedure&=&SysDebugObjectType-&TypeInfo.DeleteP
&&&oti.CloseProcedure&=&(OB_CLOSE_METHOD)DbgkpCloseO
&&&oti.ValidAccessMask&=&DEBUG_ALL_ACCESS;
&&&oti.GenericMapping&=&GenericM
&&&oti.DefaultPagedPoolCharge&=&0;
&&&oti.DefaultNonPagedPoolCharge&=&0;
&&&Status&=&ObCreateObjectType(&Name,&&oti,&NULL,&DebugObjectType);
&&else&if&(NT_SUCCESS(Status))
&&&(*DebugObjectType)-&TypeInfo.CloseProcedure&=&(OB_CLOSE_METHOD)DbgkpCloseO
&&ObDereferenceObject(SysDebugObjectType);
NTSTATUS&DbgkInitialize()
&POBJECT_TYPE&NewDebugObjectT
&Status&=&DbgkCreateDebugObjectType(&NewDebugObjectType);
&if&(NT_SUCCESS(Status))
&&*DbgkDebugObjectType&=&NewDebugObjectT
}DbgkDebugObjectType 为系统内核调试器对像地址,可以通过符号搜索获取地址。TP在启动后会让所用的附加或启动调试失败,然后我们来这么一下,整个世界就安静了。4、这里感谢一下微软,64位的PG帮了我们不少忙,干掉了很多的游戏保护。在64位的系统下,游戏保护基本上过掉这三个就可以了,当然最后还要加上一个过PG的布丁。32位下则一般还还需要过掉 NtOpenProcess,NtReadVirtualMemory,NtWriteVirtualMemory,NtQuerySystemInformation等几个函数,如果采用主动式难度不算很大。所谓主动式就是你走你的阳关道,我走我的独木桥,我另外开辟一条路走,把钩子下在应用层,让所有调用这些函数都转到我的函数上来。而且这些钩子不是加在游戏程序上,而是加在调试器上。贴一个32下的应用层 NtOpenProcess 钩子函数:利用 DeviceIoControl 跳到核心层,调用我们自己的核心层的 NtOpenProcess,其它的就不一一贴了。//
//&NtOpenProcess
NTSTATUS&WINAPI&DbgNtOpenProcess32
&__out&PHANDLE&ProcessHandle,
&__in&ACCESS_MASK&DesiredAccess,
&__in&POBJECT_ATTRIBUTES&ObjectAttributes,
&__in_opt&PCLIENT_ID&ClientId)
&DWORD&lResultL
&NTSTATUS&S
&DeviceIoControl(
&&g_hModuleDbgHelper,
&&IOCTL_NtOpenProcess,
&&&ProcessHandle,
&&DWORD((&ClientId)&+&1)&-&DWORD(&ProcessHandle),
&&&Status,
&&sizeof(Status),
&&&lResultLength,
&KdPrint((_T(&NtOpenProcess&返回值:&0x%08x!\r\n&),&Status));
}5、前面几个应用层的钩子都用到了 DeviceIoControl,所以贴一下驱动中的 DeviceIoControlDispatch 函数。NTSTATUS&DbgHelperDeviceIoControlDispatch
&IN&&PDEVICE_OBJECT&&DeviceObject,
&IN&&PIRP&&&&&&&&&&&&Irp&&&&&)
&PIO_STACK_LOCATION&&&&&&&&&&&&&&irpS
&NTSTATUS&&&&&&&&&&&&&&&&&&&&&&&&
&PDBGHELPER_DEVICE_EXTENSION&&deviceE
&ULONG&&&&&&&&&&&&&&&&&&&&&&&&&&&inputL
&ULONG&&&&&&&&&&&&&&&&&&&&&&&&&&&outputL
&_KdPrint(&(__FUNCTION__&++.&IRP&%p&,&Irp)&);
&deviceExtension&=&(PDBGHELPER_DEVICE_EXTENSION)DeviceObject-&DeviceE
&//&Get&our&IRP&stack&location
&irpStack&=&IoGetCurrentIrpStackLocation(Irp);
&//&Get&the&buffer&lengths
&inputLength&=&irpStack-&Parameters.DeviceIoControl.InputBufferL
&outputLength&=&irpStack-&Parameters.DeviceIoControl.OutputBufferL
&switch&(irpStack-&Parameters.DeviceIoControl.IoControlCode)&
&case&IOCTL_NtOpenProcess:
&&_KdPrint((&IOCTL_NtOpenProcess&));
&&PARAM_NtOpenProcess*&ioBuffer&=&(PARAM_NtOpenProcess*)Irp-&AssociatedIrp.SystemB
&&if&((ioBuffer&==&NULL)&||&(inputLength&!=&sizeof(PARAM_NtOpenProcess))&||&(outputLength&&&sizeof(NTSTATUS)))
&&&return&CompleteIrp(Irp,&STATUS_INVALID_PARAMETER,&0);
&&&//&调用真正的函数&NtOpenProcess
&&&status&=&DbgHelperNtOpenProcess(ioBuffer-&ProcessHandle,&ioBuffer-&DesiredAccess,&ioBuffer-&ObjectAttributes,&ioBuffer-&ClientId);
&&&_KdPrint((&STATUS&=&0x%08x,&ProcessHandle&=&0x%08x,&ProcessId&=&0x%08x,&ThreadId&=&0x%08x&,&status,&ioBuffer-&ProcessHandle&?&*ioBuffer-&ProcessHandle&:&(PHANDLE)-1,&ioBuffer-&ClientId-&UniqueProcess,&ioBuffer-&ClientId-&UniqueThread));
&&&*(NTSTATUS&*)ioBuffer&=&
&&&return&CompleteIrp(Irp,&STATUS_SUCCESS,&sizeof(NTSTATUS));
&case&IOCTL_NtCreateDebugObject:
&&_KdPrint((&IOCTL_NtCreateDebugObject&Enter\n&));
&&PARAM_NtCreateDebugObject*&ioBuffer&=&(PARAM_NtCreateDebugObject*)Irp-&AssociatedIrp.SystemB
&&if&((ioBuffer&==&NULL)&||&(inputLength&!=&sizeof(PARAM_NtCreateDebugObject))&||&(outputLength&&&sizeof(NTSTATUS)))
&&&return&CompleteIrp(Irp,&STATUS_INVALID_PARAMETER,&0);
&&&//&调用我们自己的函数&NtCreateDebugObject,返回的&DebugObjectHandle&兼容系统的调试对像
&&&status&=&OnNtCreateDebugObject(ioBuffer-&DebugObjectHandle,&ioBuffer-&DesiredAccess,&ioBuffer-&ObjectAttributes,&ioBuffer-&Flags);
&&&_KdPrint((&STATUS&=&0x%08x,&DebugObjectHandle&=&0x%08x,&DesiredAccess&=&0x%08x,&Flags&=&&0x%08x&,&status,&ioBuffer-&DebugObjectHandle&?&*ioBuffer-&DebugObjectHandle&:&(HANDLE)-1,&ioBuffer-&DesiredAccess,&ioBuffer-&Flags));
&&&*(NTSTATUS&*)ioBuffer&=&
&&&_KdPrint((&IOCTL_NtCreateDebugObject&Leave\n&));
&&&return&CompleteIrp(Irp,&STATUS_SUCCESS,&sizeof(NTSTATUS));
&case&IOCTL_NtDebugActiveProcess:
&&_KdPrint((&IOCTL_NtDebugActiveProcess&Enter\n&));
&&PARAM_NtDebugActiveProcess*&ioBuffer&=&(PARAM_NtDebugActiveProcess*)Irp-&AssociatedIrp.SystemB
&&if&((ioBuffer&==&NULL)&||&(inputLength&!=&sizeof(PARAM_NtDebugActiveProcess))&||&(outputLength&&&sizeof(NTSTATUS)))
&&&return&CompleteIrp(Irp,&STATUS_INVALID_PARAMETER,&0);
&&&//&调用我们自己的函数&NtDebugActiveProcess
&&&status&=&OnNtDebugActiveProcess(ioBuffer-&ProcessHandle,&ioBuffer-&DebugObjectHandle);
&&&_KdPrint((&STATUS&=&0x%08x,&ProcessHandle&=&0x%08x,&DebugObjectHandle&=&0x%08x&,&status,&ioBuffer-&ProcessHandle,&ioBuffer-&DebugObjectHandle));
&&&*(NTSTATUS&*)ioBuffer&=&
&&&_KdPrint((&IOCTL_NtDebugActiveProcess&Leave\n&));
&&&return&CompleteIrp(Irp,&STATUS_SUCCESS,&sizeof(NTSTATUS));
&case&IOCTL_NtRemoveProcessDebug:
&&_KdPrint((&IOCTL_NtRemoveProcessDebug&Enter\n&));
&&PARAM_NtRemoveProcessDebug*&ioBuffer&=&(PARAM_NtRemoveProcessDebug*)Irp-&AssociatedIrp.SystemB
&&if&((ioBuffer&==&NULL)&||&(inputLength&!=&sizeof(PARAM_NtRemoveProcessDebug))&||&(outputLength&&&sizeof(NTSTATUS)))
&&&return&CompleteIrp(Irp,&STATUS_INVALID_PARAMETER,&0);
&&&//&调用我们自己的函数&NtRemoveProcessDebug
&&&status&=&OnNtRemoveProcessDebug(ioBuffer-&ProcessHandle,&ioBuffer-&DebugObjectHandle);
&&&_KdPrint((&STATUS&=&0x%08x,&ProcessHandle&=&0x%08x,&DebugObjectHandle&=&0x%08x&,&status,&ioBuffer-&ProcessHandle,&ioBuffer-&DebugObjectHandle));
&&&*(NTSTATUS&*)ioBuffer&=&
&&&_KdPrint((&IOCTL_NtRemoveProcessDebug&Leave\n&));
&&&return&CompleteIrp(Irp,&STATUS_SUCCESS,&sizeof(NTSTATUS));
&case&IOCTL_NtReadVirtualMemory:
&&_KdPrint((&IOCTL_NtReadVirtualMemory&));
&&PARAM_NtReadVirtualMemory*&ioBuffer&=&(PARAM_NtReadVirtualMemory*)Irp-&AssociatedIrp.SystemB
&&if&((ioBuffer&==&NULL)&||&(inputLength&!=&sizeof(PARAM_NtReadVirtualMemory))&||&(outputLength&&&sizeof(NTSTATUS)))
&&&return&CompleteIrp(Irp,&STATUS_INVALID_PARAMETER,&0);
&&&//&调用我们自己的&NtReadVirtualMemory&函数
&&&status&=&DbgHelperNtReadVirtualMemory(ioBuffer-&ProcessHandle,&ioBuffer-&BaseAddress,&ioBuffer-&Buffer,&ioBuffer-&BufferSize,&ioBuffer-&NumberOfBytesWritten);
&&&_KdPrint((&STATUS&=&0x%08x,&ProcessHandle&=&0x%08x,&BaseAddress&=&0x%08x,&BufferSize&=&0x%08x&,&status,&ioBuffer-&ProcessHandle,&ioBuffer-&BaseAddress,&ioBuffer-&BufferSize));
&&&*(NTSTATUS&*)ioBuffer&=&
&&&return&CompleteIrp(Irp,&STATUS_SUCCESS,&sizeof(NTSTATUS));
&case&IOCTL_NtWriteVirtualMemory:
&&_KdPrint((&IOCTL_NtWriteVirtualMemory&));
&&PARAM_NtWriteVirtualMemory*&ioBuffer&=&(PARAM_NtWriteVirtualMemory*)Irp-&AssociatedIrp.SystemB
&&if&((ioBuffer&==&NULL)&||&(inputLength&!=&sizeof(PARAM_NtWriteVirtualMemory))&||&(outputLength&&&sizeof(NTSTATUS)))
&&&return&CompleteIrp(Irp,&STATUS_INVALID_PARAMETER,&0);
&&&//&调用我们自己的&NtWriteVirtualMemory&函数
&&&status&=&DbgHelperNtWriteVirtualMemory(ioBuffer-&ProcessHandle,&ioBuffer-&BaseAddress,&ioBuffer-&Buffer,&ioBuffer-&BufferSize,&ioBuffer-&NumberOfBytesWritten);
&&&_KdPrint((&STATUS&=&0x%08x,&ProcessHandle&=&0x%08x,&BaseAddress&=&0x%08x,&BufferSize&=&0x%08x&,&status,&ioBuffer-&ProcessHandle,&ioBuffer-&BaseAddress,&ioBuffer-&BufferSize));
&&&*(NTSTATUS&*)ioBuffer&=&
&&&return&CompleteIrp(Irp,&STATUS_SUCCESS,&sizeof(NTSTATUS));
&case&IOCTL_NtQuerySystemInformation:
&&_KdPrint((&IOCTL_NtQuerySystemInformation&Enter\n&));
&&PARAM_NtQuerySystemInformation*&ioBuffer&=&(PARAM_NtQuerySystemInformation*)Irp-&AssociatedIrp.SystemB
&&if&((ioBuffer&==&NULL)&||&(inputLength&!=&sizeof(PARAM_NtQuerySystemInformation))&||&(outputLength&&&sizeof(NTSTATUS)))
&&&return&CompleteIrp(Irp,&STATUS_INVALID_PARAMETER,&0);
&&&//&调用我们自己的函数&NtRemoveProcessDebug
&&&status&=&NtQuerySystemInformation(ioBuffer-&SystemInformationClass,&ioBuffer-&SystemInformation,&ioBuffer-&SystemInformationLength,&ioBuffer-&ReturnLength);
&&&_KdPrint((&STATUS&=&0x%08x,&SystemInformationClass&=&%d,&SystemInformation&=&%d&,&status,&ioBuffer-&SystemInformationClass,&ioBuffer-&SystemInformation));
&&&*(NTSTATUS&*)ioBuffer&=&
&&&_KdPrint((&IOCTL_NtQuerySystemInformation&Leave\n&));
&&&return&CompleteIrp(Irp,&STATUS_SUCCESS,&sizeof(NTSTATUS));
&&status&=&STATUS_INVALID_DEVICE_REQUEST;
&&Irp-&IoStatus.Status&=&
&&IoCompleteRequest&(Irp,&IO_NO_INCREMENT);
&_KdPrint(&(__FUNCTION__&--.&IRP&%p&STATUS&%x&,&Irp,&status)&);
}最后预告一下,本系列的第二篇,聊聊游戏辅助那些事上部第二篇——跟踪是个苦力活,调试器有什么好建议?当然什么时候发我自己也不知道了,因为还没写呢。想看的就自己关注了。
支付方式:
最新回复 (63)
好期待这一系列的文章
mark,顺便问一下,收藏贴子功能在那里?
mark,简单明了
╮(╯▽╰)╭,过调试真是个体力活
膜拜大表哥
莫一个,说不定我用得着
..怎么不支持旧论坛的表情了
请问下能过南极动物的驱动不
可以& 可以
mark一下,还是旧版的论坛看着舒服。
Mark,已收藏
mark& 收藏
好文章,mark一下
跟帖& 收藏
win4& 64位上的游戏保护知识终于放出来了,O(∩_∩)O哈哈~
可以、很强势,mark先~
新版的收藏在哪里···
回帖收藏!!!
mark一下!
膜拜大表哥
mark!!!
一直在找这类的文章,感谢楼主
都是干货啊
膜拜大神......
mark,希望大神完成这个系列
mark!!膜拜大神啊!
哎,,,还是看不懂
我们调试器如何使用我们的驱动呢
1.请先关注公众号。
2.点击菜单"更多"。
3.选择获取下载码。}

我要回帖

更多关于 绝地稳定辅助购买 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信