首页
论坛
课程
招聘
[原创]win7 x64内核调试函数逆向还原C代码,自建调试体系
2020-6-10 20:53 7366

[原创]win7 x64内核调试函数逆向还原C代码,自建调试体系

2020-6-10 20:53
7366

一、前言
网上公开的自建调试体系大都是基于wrk xp的,其中mengwuji的为win7 x86,想把该项目用于x64,于是自给自足陆陆续续花了一个月时间成功在win7 x64 sp1上跑起来,该项目参考了前面所述开源代码,在看雪白嫖了这么多干货,不敢藏私,取之于看雪开源于看雪。

 

二、项目概述
采用Vs2019+WDK,提供完整的解决方案,下载即可编译运行。注意事项:
1、PsGetNextProcessThread DbgkDebugObjectType这两个常用的函数、变量采用特征码定位,其余采用解析pdb符号定位函数地址

 

2、采用InlinHook替换以下内核函数:
NtDebugActiveProcess
NtCreateDebugObject
NtRemoveProcessDebug
NtWaitForDebugEvent
NtDebugContinue
DbgkExitProcess
DbgkExitThread
DbgkCopyProcessDebugPort
DbgkForwardException
DbgkMapViewOfSection
DbgkUnMapViewOfSection
DbgkClearProcessDebugObject
DbgkCreateThread
DbgkDebugObjectType-调试对象类型
DbgkpQueueMessage-这换这个的原因是由于偷懒没有重写DbgkpPostModuleMessages,而这个函数内部有调用DbgkpQueueMessage
3、基于win7 x64不负责过PG,有需要的项目里带了老v的时光倒流过pg代码.
4、
图片描述
DebugPort除了在函数内部使用的还需要替换这几处的偏移,我只是做了简单处理把DebugPort移位到ExitTime,这种方案不保险,因为EPROCESS里的其他未使用的成员也可能被列入关照对象,在x64这样干的反调试驱动估计少,为了完美解决可以参考看雪大老xiaofu的这篇帖子扩充EPROCESS结构体https://bbs.pediy.com/thread-246625.htm,使用这种方法也有缺陷,只对之后的新进程有效,使用之前需要创建进程回调记录新加载的进程,自己维护判断进程EPROCESS是否经过扩充。
三、其他
1、由于异常相关函数不能windbg下断调试,嫌麻烦没有处理,只是简单的在KiDispatchException里改了DebugPort偏移,后面有时间会把异常相关的一起处理掉
2、由于在代码里面直接对PEB里的BeingDebugged调试标志写False,所以在进程附加的时候不会被断下。

 

管杀不管埋,蓝屏概不负责!
其他的自己参照代码改吧


【公告】看雪团队招聘安全工程师,将兴趣和工作融合在一起!看雪20年安全圈的口碑,助你快速成长!

上传的附件:
收藏
点赞5
打赏
分享
最新回复 (23)
雪    币: 430
活跃值: 活跃值 (1103)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
萌克力 活跃值 2020-6-10 21:22
2
0
沙发
雪    币: 166
活跃值: 活跃值 (510)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
柒雪天尚 活跃值 2020-6-10 22:17
3
0
就是嫖了一下mengwuji呗
雪    币: 198
活跃值: 活跃值 (1241)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yy虫子yy 活跃值 2020-6-10 23:54
4
0
谢谢分享,花了不少时间吧
雪    币: 0
活跃值: 活跃值 (854)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmflxw 活跃值 2020-6-11 00:10
5
0
yy虫子yy 谢谢分享,花了不少时间吧
技术不到家,花了一个月
雪    币: 1804
活跃值: 活跃值 (555)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
拍拖 活跃值 2 2020-6-11 08:50
6
0
支持。
雪    币: 57
活跃值: 活跃值 (988)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
实都 活跃值 2020-6-11 09:11
7
0
这尼玛全是体力活啊  感谢楼主
雪    币: 6
活跃值: 活跃值 (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
三千羽杀净 活跃值 2020-6-11 09:41
8
0
F5都按烂了 终于等来了
雪    币: 21
活跃值: 活跃值 (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_团 活跃值 2020-6-11 10:30
9
0
前排支持下。。。
雪    币: 6999
活跃值: 活跃值 (1087)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
gamehack 活跃值 2020-6-11 10:51
10
0
这个看着就好历害,感谢分享,收藏一波
雪    币: 256
活跃值: 活跃值 (208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwCopyAll 活跃值 2020-6-11 15:55
11
0
牛逼
雪    币: 15
活跃值: 活跃值 (183)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaohucode 活跃值 2020-6-14 18:49
12
0
感谢分享!
雪    币: 218
活跃值: 活跃值 (772)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kakasasa 活跃值 2020-6-14 20:50
13
0
mark  3q
雪    币: 1890
活跃值: 活跃值 (1558)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
默NJ 活跃值 2020-6-14 21:46
14
0
mark
雪    币: 1449
活跃值: 活跃值 (766)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
冰雄 活跃值 2020-6-16 17:06
15
0
楼主有玩过X64内核重载吗
雪    币: 133
活跃值: 活跃值 (663)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
niuzuoquan 活跃值 2020-6-17 11:54
16
0
mark
雪    币: 0
活跃值: 活跃值 (854)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmflxw 活跃值 2020-6-18 19:49
17
0
Ps:  看了下已经有150多次下载了,不得不说一句,源码里面有处坑,有几处需要判断进程是否为64位进程,是的话就写入64位数据否则写入32位数据,而源码里面的把这步判断忽略了,遇到32位进程的时候会写入64位数据造成覆盖其他成员。
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_靖~live 活跃值 2020-6-19 17:58
18
0
大佬重写X64的NtReadVirtualMemory 为什么会卡死
雪    币: 60
活跃值: 活跃值 (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaojunxin 活跃值 2020-7-1 10:00
19
0
借鉴代码,开始搞win10x64
雪    币: 60
活跃值: 活跃值 (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaojunxin 活跃值 2020-7-1 19:21
20
0

在 Windows Vista 版本的 WDK 之前,用于驱动程序开发的主要头文件为 Wdm.h、Ntddk.h 和 Ntifs.h,它们包含很多重复声明。
从 Windows Vista 版本的 WDK 开始,Wdm.h、Ntddk.h 和 Ntifs.h 将按层次结构来组织并且不包含重复信息。上层的文件将包含下层的文件。每个函数和结构声明仅出现一次。
Ntifs.h 包含 Ntddk.h,而 Ntddk.h 又包含 Wdm.h。下图显示了此结构。

在这里插入图片描述

最后于 2020-7-1 19:21 被gaojunxin编辑 ,原因:
雪    币: 0
活跃值: 活跃值 (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
拉闸太子 活跃值 2020-8-10 14:40
21
0
来个 老弟
雪    币: 653
活跃值: 活跃值 (260)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
闲人_ 活跃值 2020-9-1 02:05
22
0
Mark
雪    币: 884
活跃值: 活跃值 (1084)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小希希 活跃值 2020-9-2 11:26
23
0
不错,感谢分享
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_榆一 活跃值 2021-12-15 13:55
24
0
tmflxw Ps: 看了下已经有150多次下载了,不得不说一句,源码里面有处坑,有几处需要判断进程是否为64位进程,是的话就写入64位数据否则写入32位数据,而源码里面的把这步判断忽略了,遇到32位进程的时候会 ...
哪几处要判断
游客
登录 | 注册 方可回帖
返回