首页
社区
课程
招聘
[求助]关于Ow反调试
发表于: 2017-5-29 16:52 7519

[求助]关于Ow反调试

2017-5-29 16:52
7519

最近在分析Ow   使CE能附加上游戏调试 
问题1:
游戏里有几个线程一直在制造异常,通过自己的异常处理,来防止调试器附加,于是我通过修改CE源码 (VEH)过滤了他的异常 ,就能附加上调试器,但是下了硬件断点后,游戏几秒钟就能检测到硬件断点。
我又Hook了 NtGetThreadContext 并没有发现游戏调用这个api来检测硬件断点。
于是我猜测它是在异常处理检测硬件断点的。
可是我通过Hook AddVectoredExceptionHandler 也没有发现他添加异常处理   

现在我想知道怎么找到他的SEH处理函数 或者其他可能的异常处理

问题2:

游戏中代码都被给予了 PAGE_EXECUTE_READ 保护,导致不能修改内存 ,我调用VirtualProtect 来修改保护,可是怎样都修改不了,返回错误代码:87 ,于是想通过hook NtProtectVirtualMemory 来拦截他改内存保护,可是他并没有通过 VirtualProtect VirtualProtectEx来修改内存保护。根本拦截不到!!  

我太菜实在是找不到什么办法来改他的虚拟保护。

只求各位哥哥姐姐叔叔阿姨弟弟妹妹能给个思路




问题二找到了解决办法:

在Github找到的X64dbg插件代码可以有效修改内存保护(貌似游戏还有效验)

附上地址:给需要的朋友 https://codeload.github.com/changeofpace/Force-Page-Protection/zip/master


这是介绍


NtProtectVirtualMemory will fail for memory mapped views with valid arguments in these scenarios:

  1. The view is mapped with the undocumented allocation type:SEC_NO_CHANGE(0x00400000).

  2. The desired protection is incompatible with the view's initial protection. Example: trying to set the protection for a view with an initial protection ofPAGE_READONLYtoPAGE_EXECUTE_READWRITE.

  3. The view and/or backing section are created using large pages (unconfirmed / not currently supported).

A process can utilize these cases as an anti-patching mechanism. A demo of this can be foundhere.

This plugin defeats this technique by remapping the view with the desired protection.



[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 12848
活跃值: (9108)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
改什么virtualprotect,直接读写他物理内存啊,顺便87肯定是你自己参数填错了。
检测硬断只需要在VEH或者UEH里做就行了,anti方法这里不多说,也不要继续问我。
2017-5-29 17:31
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Ow是什么游戏?
2017-5-29 17:43
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
hzqst 改什么virtualprotect,直接读写他物理内存啊,顺便87肯定是你自己参数填错了。 检测硬断只需要在VEH或者UEH里做就行了,anti方法这里不多说,也不要继续问我。
参数没错  CE    AST  都不能修改
2017-5-29 18:24
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
无边 Ow是什么游戏?
守望先锋
2017-5-29 18:24
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
虽然我不弄游戏,也看出你的方法有问题,游戏接管VEH,你需要去替他接管,然后返回给他,这样才是一般的套路。
2017-5-29 18:43
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
无边 虽然我不弄游戏,也看出你的方法有问题,游戏接管VEH,你需要去替他接管,然后返回给他,这样才是一般的套路。
谢谢  我会尝试一下    那关于无法修改内存保护  是为什么呢  我用AST  和CE  都无法修改保护
2017-5-29 19:34
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
先看看87是什么啦

#define  ERROR_INVALID_PARAMETER                    87L        //  dderror

从VirtualProtect一层层往下跟不就知道是谁的错了
2017-5-30 00:38
0
雪    币: 8756
活跃值: (5940)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
问题1和2都是一个问题。你在R3层想对抗R1层  普通方法是行不通的,
别人驱动层做了钩子和检测,驱动层拦截了NtProtectVirtualMemory  和对线程调试寄存器检测。
2017-5-30 03:10
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mudebug 问题1和2都是一个问题。你在R3层想对抗R1层 普通方法是行不通的, 别人驱动层做了钩子和检测,驱动层拦截了NtProtectVirtualMemory 和对线程调试寄存器检测。
可我看了并没有什么钩子啊    他好像并没有加载驱动
2017-5-30 15:10
0
雪    币: 70
活跃值: (1317)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
屁股  ring3的代码段是用特殊方式分配的内存,所以PAGE的属性需要特殊方法更改
2017-5-31 09:50
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
mknanren 屁股 ring3的代码段是用特殊方式分配的内存,所以PAGE的属性需要特殊方法更改
大牛可否给个思路    谢谢!!!
2017-5-31 17:29
0
雪    币: 44
活跃值: (127)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
谢谢问题二的解决思路,拿走顶帖
2017-9-4 00:07
0
雪    币: 3
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
问题1、他在VEH里检测硬断
问题2、代码段重新配置过,我是在驱动里改,但有CRC检测。
目前在想办法接管异常,他在异常管理也有检测。
2018-9-18 20:21
0
游客
登录 | 注册 方可回帖
返回
//