阅读:1648回复:16
可不可以在系统HOOK中挂起一个用户态线程等到条件满足再让它运行?
谢谢
|
|
|
沙发#
发布于:2005-05-13 09:10
谢谢 可以将它从就绪链表中去除,满足后在挂入 |
|
|
板凳#
发布于:2005-05-13 10:31
[quote]谢谢 可以将它从就绪链表中去除,满足后在挂入 [/quote] 把细节说说! |
|
|
地板#
发布于:2005-05-13 11:09
核心中有PsActiveProcessHead个东东,它就是所有活动进程链表的头,剩下的就不用说了吧 :D
|
|
|
地下室#
发布于:2005-05-13 11:37
核心中有PsActiveProcessHead个东东,它就是所有活动进程链表的头,剩下的就不用说了吧 :D 说说,我对此一窍不通 |
|
|
5楼#
发布于:2005-05-13 11:43
最简单的做法让线程KeWaitForSingleObject,由上层应用程序,满足条件后,通知驱动程序KeSetEvent,就可以。
bmyyyud,你按照你说的方法实现过吗?PsActiveProcessHead是当前 活动的进程的链表,系统调度的时候,是按照线程调度的,不是按照这个链表调度的吧?当然我们可以看windows的源代码,但这样做毕竟设计到很多undocument的东东,不值得推荐吧。我到是对你说的做法很感兴趣,如果你已经实现了,多多请教 |
|
6楼#
发布于:2005-05-13 12:19
最简单的做法让线程KeWaitForSingleObject,由上层应用程序,满足条件后,通知驱动程序KeSetEvent,就可以。 看过修改PsActiveProcessHead隐藏进程的人就知道它与 调度沾不上边,去除它一样工作,正是隐藏能成功的原理。 说PsActiveProcessHead是funny |
|
7楼#
发布于:2005-05-13 12:26
呵呵,同意
|
|
8楼#
发布于:2005-05-14 09:07
凡是涉及到进程,线程,我认为唯一benign的方法就是PsActiveProcessHead,因为它在WinDbg中公开,我正准备顺藤摸瓜,各位却大谈进程隐藏,不是存心跟我作对 :o :mad: :P :D
难道还要让我用 1 Wowocock以前提过的Hook SWAPCONTEXT及进程线程切换的相关函数 2 暴力枚举PCB http://www.driverdevelop.com/forum/viewthread.php?tid=89239 3 在KPCR上坐等 这些非常的方法把你们挖出来 :P :D PsActiveProcessHead可以找到KPROCESS->KTHREAD,然后用SuspendThread等方法去暂停,让OS去摘钩,或者设置KTHREAD状态或将KTHREAD从调度链表上摘掉 |
|
|
9楼#
发布于:2005-05-14 12:06
<<PsActiveProcessHead,因为它在WinDbg中公开
在windbg中公开什么意思,PsActiveProcessHead没有从ntoskrnl中export吧? |
|
10楼#
发布于:2005-05-15 16:26
<<PsActiveProcessHead,因为它在WinDbg中公开 详见Windbg联机帮助 |
|
|
11楼#
发布于:2005-05-16 09:43
你能不能具体解释一下。我不理解你说的windbg中引出的意思
对你说的唯一的方法,我看也都要涉及到硬编码,比其他方法有什么好处呢,还请赐教 |
|
12楼#
发布于:2005-05-16 10:12
你能不能具体解释一下。我不理解你说的windbg中引出的意思 并不是Windbg中引出,Windbg中作为例子,讲解调试草稿,所以相当于是半Documented,所以一般不会在以后的版本中被改变掉 |
|
|
13楼#
发布于:2005-05-16 10:18
[quote]你能不能具体解释一下。我不理解你说的windbg中引出的意思 并不是Windbg中引出,Windbg中作为例子,讲解调试草稿,所以相当于是半Documented,所以一般不会在以后的版本中被改变掉 [/quote] 建议你看 http://www.xfocus.net/articles/200408/724.html 虽然都是用非常规的方法得到的,但由于是半Documented,所以相对可靠,而对于_KiWaitListHead你要硬编码这些东东,肯定是不如这个可靠 |
|
|
14楼#
发布于:2005-05-16 10:35
1、可以将它从就绪链表中去除,满足后在挂入;这么说是可以的,虽然实现起来很麻烦。 2、但是PsActiveProcessHead本与前面所说的就绪链表没有什么联系。 3、说进程隐藏就是证明2中的“没有联系\"。 4、谁提的Hook SWAPCONTEXT呢?怎么google一下不是你说的情况.这与PsActiveProcessHead联系不大吧? 5、\"PsActiveProcessHead可以找到KPROCESS->KTHREAD\",这么说就很牵强了,那PsGetCurrentThread、甚至暴力搜KTHREAD也跟调度联系上了?! 6、\"PsActiveProcessHead,因为它在WinDbg中公开\" 不大合理吧?未导出不固定的内核变量谈不上公开,不是文档提到名字就叫公开,Inside2k里一堆变量,绝大多数未公开。 [编辑 - 5/16/05 by violin] [编辑 - 5/16/05 by violin] |
|
15楼#
发布于:2005-05-16 12:33
1、可以将它从就绪链表中去除,满足后在挂入;这么说是可以的,虽然实现起来很麻烦。 2、但是PsActiveProcessHead本与前面所说的就绪链表没有什么联系。 顺藤摸瓜之用 3、说进程隐藏就是证明2中的“没有联系\"。 因为PsActiveProcessHead是我们唯一还觉得可靠的接地点,防止以后成为空中楼阁 4、谁提的Hook SWAPCONTEXT呢?怎么google一下不是你说的情况.这与PsActiveProcessHead联系不大吧? 本站wowocock发过,因为本贴不考虑进程被隐藏的问题 而且进程隐藏,居然有老外想用Custom Windows scheduler来做,所谓道高一尺,魔高一丈,你就是从线程就绪链表中都找不到,但这个进程所包含的线程还能运行,所以这里不考虑进程被隐藏的问题 5、\"PsActiveProcessHead可以找到KPROCESS->KTHREAD\",这么说就很牵强了,那PsGetCurrentThread、甚至暴力搜KTHREAD也跟调度联系上了?! 暴力搜索不提倡 6、\"PsActiveProcessHead,因为它在WinDbg中公开\" 不大合理吧?未导出不固定的内核变量谈不上公开,不是文档提到名字就叫公开,Inside2k里一堆变量,绝大多数未公开。 WinDbg的帮助是MS的官方文档 Inside2k书中一开始便说会用到Undocumented的东西 |
|
|
16楼#
发布于:2005-05-16 13:06
再说不知道说到哪里去了,说一下我要表述的结论:
1、硬修改线程就绪链表很难,太多硬编码,应要做还是可以,细节当然更是复杂。 2、线程调度与PsActiveProcessHead毫无关系,从PsActiveProcessHead能找线程这种关系并不属于调度关系,离得太远!断掉ActiveProcess从PsActiveProcessHead就找不到相应的进线程,但这对调度毫无影响,也不可能\"挂起一个用户态线程等到条件满足再让它运行\"。 本来告诉发帖人try try事件等东西就得了,不回了,个人要表达的意思很明白了。 [编辑 - 5/16/05 by violin] |
|