首页
社区
课程
招聘
[分享]有很多时间系列:一种故意调试的反调试
发表于: 2018-4-11 20:59 11430

[分享]有很多时间系列:一种故意调试的反调试

2018-4-11 20:59
11430
//来自神秘驱动的野路子
原理:人工制造一个DebugObject,但是Flag无效,正常附加就别想正常附加了。
直接上代码
ULONG get_debug_offset()
{
	auto pAddress = ddk::util::get_proc_address("PsGetProcessDebugPort");
	if (pAddress)
	{
		return *(ULONG*)((ULONG_PTR)pAddress + 3);
	}
	return 0;
}
void anti_dbg_process(PEPROCESS process)
{
	OBJECT_ATTRIBUTES oa = {};
	ddk::ntos::PDEBUG_OBJECT DebugObject = nullptr;
	InitializeObjectAttributes(&oa, NULL, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
	auto ns = ObCreateObject(KernelMode, *IoFileObjectType, &oa, KernelMode, NULL, sizeof(FILE_OBJECT), 0, 0, (PVOID *)&DebugObject);
	if (NT_SUCCESS(ns))
	{
		ObReferenceObject(DebugObject);
		ObReferenceObject(DebugObject);
		ExInitializeFastMutex(&DebugObject->Mutex);
		InitializeListHead(&DebugObject->EventList);
		KeInitializeEvent(&DebugObject->EventsPresent, NotificationEvent, FALSE);
		DebugObject->KillProcessOnExit = 1;
		DebugObject->DebuggerInactive = 1;
		auto object_header = reinterpret_cast<ddk::ntos::POBJECT_HEADER>((ULONG_PTR)DebugObject - 0x30);
		//由于这是个FileObject所以它还可以有owner,有了owner它就独占了,于是谁也打不开了
		object_header->ExclusiveObject = 1;
		auto pExclusiveInfo = reinterpret_cast<ddk::ntos::POBJECT_HEADER_PROCESS_INFO>((ULONG_PTR)object_header - 0x30);
		pExclusiveInfo->ExclusiveProcess = (ddk::ntos::_EPROCESS *)PsInitialSystemProcess;
		object_header->KernelOnlyAccess = 1;//禁止应用层打开对象
		auto patchoffset = get_debug_offset();
		if (patchoffset)
		{
			auto pDebug = (PVOID *)((PUCHAR)process + patchoffset);
			*pDebug = (PVOID)DebugObject;
		}
		return;
	}
	LOG_DEBUG("CreateDebug %x\r\n", ns);
}


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-4-11 21:00 被cvcvxk编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 115
活跃值: (23)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
2
有人说过他不弄了的。哈哈
2018-4-11 21:21
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
3
我是谁! 有人说过他不弄了的。哈哈
顺手还原野路子的反调试而已。
现在显卡WDDM多机同步才是我的真爱。
2018-4-11 21:30
0
雪    币: 368
活跃值: (431)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
4
最近正在收集这块的资料,雪中送炭。亲下楼主
2018-4-11 23:26
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5
这个不是和AccessMask清零差不多吗
2018-4-12 20:20
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
6
hzqst 这个不是和AccessMask清零差不多吗
AccessMask影响太大,这个更干净一些,只影响特定的进程。
最后于 2018-4-13 09:50 被cvcvxk编辑 ,原因:
2018-4-13 09:49
0
雪    币: 18
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
cvcvxk 顺手还原野路子的反调试而已。 现在显卡WDDM多机同步才是我的真爱。
在国外网站学的吧
2018-4-13 14:33
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
8
ayunaa 在国外网站学的吧
只有天朝才有这么叼的野路子,老外天天搞个CallBack和Miniflt就觉得自己很厉害了。
2018-4-13 16:49
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
牛X,粗暴,野性。如此好贴
2018-4-26 16:26
0
雪    币: 45
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
小白求问,这个是需要加驱才行的吗。
2018-4-26 16:45
0
雪    币: 9941
活跃值: (2143)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
zyla 小白求问,这个是需要加驱才行的吗。
看到直接取"PsGetProcessDebugPort"地址,就知道肯定是驱动了
2018-4-26 21:43
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
学习了 
2018-4-30 16:10
0
雪    币: 290
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
麻烦一下,请教一个问题
        auto  pAddress  =  ddk::util::get_proc_address("PsGetProcessDebugPort");
        if  (pAddress)
        {
                return  *(ULONG*)((ULONG_PTR)pAddress  +  3);
        }
对内核调试不熟悉,这里一段看得不是很明白,获取了PsGetProcessDebugPort函数的地址,然后获取该地址偏移24处的一个ULONG?
这个数字是啥?DebugPort字段在EPROCESS中的偏移?
如果是这样的话,后面那段直接写process->DebugProt  =  DebugObject不是更简单吗
最后于 2018-5-3 16:33 被今天不吃面编辑 ,原因:
2018-5-3 16:24
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
14
今天不吃面 麻烦一下,请教一个问题&nbsp; &nbsp; &nbsp; &nbsp; auto&nbsp; pAddress&nbsp; =&nbsp; ...
process->DebugProt    =    DebugObject当然可以,前提是你有这个系统上EPROCESS完整的结构,可惜你并没有
2018-5-4 09:44
0
雪    币: 290
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
hzqst process->DebugProt = DebugObject当然可以,前提是你有这个系统上EPROCESS完整的结构,可惜你并没有
多谢
2018-5-4 12:45
0
雪    币: 405
活跃值: (2285)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
if    (pAddress)
                {
                                return    *(ULONG*)((ULONG_PTR)pAddress    +    3);
                }
这种地方比较喜欢用反汇编引擎解析指令来定位,这样即使系统变了,也不用改。
2018-5-5 17:19
0
雪    币: 15
活跃值: (3576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
v
2019-1-21 22:46
0
雪    币: 441
活跃值: (1060)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
18
今天不吃面 麻烦一下,请教一个问题&nbsp; &nbsp; &nbsp; &nbsp; auto&nbsp; pAddress&nbsp; =&nbsp; ...
偏移是3 不是24。
2019-3-19 18:18
0
雪    币: 441
活跃值: (1060)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
19
你这代码写的有问题吧?(ULONG_PTR)pAddress + 3
2019-3-19 18:32
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
cvcvxk 只有天朝才有这么叼的野路子,老外天天搞个CallBack和Miniflt就觉得自己很厉害了。
确定说的不是反话吗
2022-6-29 00:29
0
游客
登录 | 注册 方可回帖
返回
//