某游戏的反调试

最近比较无聊,有朋友就喊我去玩玩打枪的小游戏,然后由于我怕麻烦所以把游戏安装到虚拟机中了,然后我虚拟机开了双机调试器,其实是由于我比较懒不想关双机调试,导致游戏弹出窗口要求我关闭调试器。

小样,你叫我关就关岂不是很没有面子,然后我做了下面的事情。

首先看是不是检测了SharedUserData->KdDebuggerEnabled

这里手动在windbg修改KUSER_SHARED_DATA 的KdDebuggerEnabled,如下图

修改的命令是eb 0xFFFFF780`00000000+0x2d4 0

然后继续看有木有变化,发现没有变化,还是一样的弹出来,后来在ntloaddriver下一个断点看看,发现就没有加载驱动,算了,那就直接hook  NtQueryInformationThread、NtQuerySystemInformation、NtQueryObject这三个都是反调试的常见函数相信对反调试有了解的都知道,我这里是在内核中hook的,代码是cv的抄的titanhide,也是github上的一个项目。

还真是用的api去做的反调试,之后又用了单步来过反调试,(原理是由于调试器handle了单步异常,就不会发给异常处理函数,异常处理函数接收不到代表有调试器)如下图

这个解决方法也很简单hook KdpTrap在这里面直接过滤异常,代码如下

NTSTATUS HookKdpTrap(
	IN PKTRAP_FRAME 	TrapFrame,
	IN PKEXCEPTION_FRAME 	ExceptionFrame,
	IN PEXCEPTION_RECORD 	ExceptionRecord,
	IN PCONTEXT 	ContextRecord,
	IN KPROCESSOR_MODE 	PreviousMode,
	IN BOOLEAN 	SecondChanceException){
	
	PEPROCESS hp = PsGetCurrentProcess();
	//TASLogin
	//这里判单是不是单步异常 0x4000001E
	if (!_stricmp((char *)PsGetProcessImageFileName(hp), "hyxd.exe")&& ExceptionRecord->ExceptionCode== 0x4000001E){
		return STATUS_SUCCESS;
	}
	
	return hdbktrap(TrapFrame, ExceptionFrame, ExceptionRecord, ContextRecord, PreviousMode, SecondChanceException);
}

 

然后就没有然后了,游戏加载起来了

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值