首页
社区
课程
招聘
[原创] 巧妙利用ptehook的特性重建创建调试的调试通道
发表于: 1小时前 65

[原创] 巧妙利用ptehook的特性重建创建调试的调试通道

1小时前
65

前几天不是发了一个利用npt hook重建调试通道的文章:https://bbs.kanxue.com/thread-292825.htm
虽然是老掉牙的技术,但是反响意外的还不错
为了脱壳,这几天在研究创建调试时,发现npt hook一个不可避免的事情,效率太差了,尤其是在虚拟机里。。。
创建调试需要hook两个及其高频的函数:
NtCreatUserProcess,DbgkCreateThread
前者还好,是ssdt里的函数,我们可以用etw hook,效率还行
DbgkCreateThread就糟糕了,他不是ssdt里的函数,而且创建线程这种这种事情几乎是无时无刻不在发生,一hook就卡的系统不能用,我只能另寻其他hook
因为有pg,能够hook这些未导出的内核函数的hook太少了,可以的话我还是不希望搞打pg这么麻烦的事
有没有一种只能针对一个进程的内核函数hook呢?这样子还能避免高频调用导致的系统卡顿
于是我想到ptehook

参考:6b7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5P5W2)9J5k6h3q4D9K9i4W2#2L8W2)9J5k6h3y4G2L8g2)9J5c8X3&6W2N6%4y4Q4x3V1j5I4z5o6V1&6z5b7`.`.
值针对一个进程,不会pg。。。ptehook就是一种挺完美的办法。。吗?
让我们回忆创建调试,调试器调用完NtCreatUserProces,把创建的进程的第一次线程放入等待队列,然后就跑路了,此时是等待cpu去第一次调度
但是对于被调试进程,我们至少要hook DbgkpQueueMessage DbgkForwardException KiDispatchException,难道说我们要抢先cpu第一次调度之前去hook?这显然不可能
但是我突然想起之前调试ptehook时发现的奇怪现象:
我们hook explorer进程的NtCreateFile给hook了,如果检查到参数是tips.txt,就会返回无权限
也就是我们无法打开tips.txt了
我们隔离了exploere.exe,用他打开tips.txt。。。打不开,超级正常
但是我们在桌面双击启动我安装好的notpad++,然后把tips.exe打开。。。打不开????
我们在windbg里切换到notpad++的上下文,使用命令u NtCreateFile,竟然第一条时jmp!这不是明显给hook过了
但是假如你在hook前提前启动一个cmd,然后装载驱动,然后用cmd启动notpad++,欸嘿,正常打开
后来拷打ai发现其原因是:
pml4t具有继承关系,注意我们“在桌面”启动,这时候其实就是explorer启动了notpad++,操作系统为了速度,直接复制了启动者高位的pml4e给他,导致他的也继承了hook了
这太好了,这样子我们的调试器调用NtCreatUserProces创建进程时,也会继承我们的hook
于是我拷打ai,烹饪出来成品:


传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!

最后于 1小时前 被Qmeimei10086编辑 ,原因:
收藏
免费 4
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回