首页
社区
课程
招聘
[原创]过双机调试检测。
发表于: 2013-7-26 21:36 14738

[原创]过双机调试检测。

2013-7-26 21:36
14738
ULONG clearaddr1=0;
ULONG clearaddr2=0;
ULONG KiDebugRoutineaddr=0;
ULONG returnaddr2=0;
ULONG calltimes=0;
typedef unsigned char byte;
void my_kddisabledebugger();
VOID MY_PloadImageNotifyRoutine(IN PUNICODE_STRING  FullImageName,IN HANDLE  ProcessId,IN PIMAGE_INFO  ImageInfo)
{
	if (NULL!=wcsstr(FullImageName->Buffer,L"TesSafe.sys"))
	{
		KdPrint(("要加载的内存映像名称为%ws,进程ID=%x,映像基地址=%x,映像大小=%x\r\n",FullImageName->Buffer,ProcessId,ImageInfo->ImageBase,ImageInfo->ImageSize));
		_asm int 3;
		clearaddr1=(ULONG)ImageInfo->ImageBase+0x17b6c;
		clearaddr2=(ULONG)ImageInfo->ImageBase+0x13268;
		KiDebugRoutineaddr=*PULONG((ULONG)KdDisableDebugger+0x4a);
		returnaddr2=(ULONG)ImageInfo->ImageBase+0x7008;
		WPOFF();
		byte jmpcode[6];
		jmpcode[0]=0x90;
		jmpcode[1]=0xe9;
		*(ULONG*)(jmpcode+2)=(ULONG)my_kddisabledebugger-((ULONG)KdDisableDebugger+1+5);
		RtlCopyMemory((PVOID)KdDisableDebugger,jmpcode,6);
		WPON();
	}
	
}
void showhookkddisabledeguggermessage()
{
	KdPrint(("tp还在调用kddisabledebugger,当前线程ID=%d\r\n",PsGetCurrentThreadId()));
}
void _declspec (naked) my_kddisabledebugger()
{
	showhookkddisabledeguggermessage();
//将第一个数改为39f1	//17b68
//读取KiDebugRoutine里面的数值,付给13268
	__asm
	{
		mov eax,calltimes
		cmp eax,0
		jne return3
		mov eax,clearaddr1
		mov eax,[eax]
		mov edi,[eax+0x28]
		sub edi,1
		mov [eax+0x28],edi
		mov edi,[esp]
		cmp edi,returnaddr2
		jne return2
		sub esi,1
return2:
		mov edi,[KiDebugRoutineaddr]
		mov edi,[edi]
		mov eax,clearaddr2
		mov [eax],edi
		lea eax,calltimes
		mov edi,calltimes
		add edi,1
		mov [eax],edi
return3:
		ret
	}
}

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

收藏
免费 5
支持
分享
最新回复 (16)
雪    币: 167
活跃值: (190)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
又一大牛,MARK之,十分感谢
2013-7-26 21:54
0
雪    币: 42
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
先前看了小烦的代码还是没懂它的原理。看了这帖子后恍然大悟。
感谢楼主
2013-7-26 22:10
0
雪    币: 7395
活跃值: (4582)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
共享精神可嘉,非常感谢!
2013-7-26 22:21
0
雪    币: 167
活跃值: (190)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
哪里不懂点哪里 说
2013-7-26 22:27
0
雪    币: 42
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
呵呵。
也是因为我懂驱动知识不多,基础不好。
在你的代码里我不知道_pMirror这这么大的数组有什么用。。。
在看你代码里的Inline Hook KdDisableDebugge时只知道你修改了堆栈的值、但是弄不清为什么要修改、、、
2013-7-26 22:52
0
雪    币: 167
活跃值: (190)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
其实就是copy块tp的镜像 懒得自己写
2013-7-26 22:55
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主说的3我搞过,吧那个页交换到硬盘上,之后利用缺页中断来HOOK页面的值,不过极度不稳定,但是杀伤力超强
2013-7-26 23:45
0
雪    币: 15
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
是吧,冥冥之中我怎么就感觉通过异常,能搞定N多保护?
2013-7-27 08:38
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最主要的是不稳定而且非常麻烦,
2013-7-27 09:04
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
搞的太麻烦了,将内核里操作kdenable的代码,改成操作别的地址不就完了,现在玩保护的人啊,水平和思路还是太低了
2013-7-27 09:11
0
雪    币: 167
活跃值: (190)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
关于重加载内核A盾的源码可以扣,但是对TP好像没用,可能是我太菜只会copy
2013-7-27 10:08
0
雪    币: 15
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
对啊~我怎么就没有想到呢。。。。开贴交流就是好。拓展思路。
2013-7-27 10:56
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
大神的意思是不是把原来tp的保证addr的指针改成你copy的addr?
2013-7-27 15:24
0
雪    币: 134
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
回去再看……先顶
2013-7-27 17:32
0
雪    币: 346
活跃值: (129)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
恩 不错的教程!
2013-7-28 21:50
0
雪    币: 39
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
clearaddr1=(ULONG)ImageInfo->ImageBase+0x17b6c;
clearaddr2=(ULONG)ImageInfo->ImageBase+0x13268;

兄弟请教:你这0x17b6c 和 0x13268的偏移是怎么来的?
2013-10-26 08:02
0
游客
登录 | 注册 方可回帖
返回
//