能力值:
( LV4,RANK:50 )
|
-
-
2 楼
有难度啊。基本上不理解。有没有更简单的?
"线程附加到其它进程"是什么,一个线程所属的进程不是固定的嘛?
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
可以临时换嘛,KeStackAttachProcess。像WriteProcessMemory这种函数就是利用这个功能读写远程进程的。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
还是有问题,
执行APC的线程是不是系统线程?还是安装APC的线程?执行APC的时机或者说是check点是什么时候?
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
APC是在目标线程中执行的。执行时机一下子也说不清,我在看的时候对这个问题不太关心所以也没祥细了解 。以下是《windows内核原理与实现》的原话:
APC对象被插入到线程的APC链表中以后,一旦APC_LEVEL软件中断发生,或者IRQL从更高降底到APC_LEVEL以下,则当前线程的APC被交付。
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
谢谢LZ的回答,学到不少东西。
忽然有个想法,如果ReadFile设置了一个APC,然后while(1);进入循环,这样是不是APC就不会执行?因为目标线程不会进程内核。
另外,能稍微具体说下文中的这段嘛?
"另外,挂钩APC相关函数可以达到阻止结束目标进程(ZwTerminateProcess)、阻止创建远程线程(CreateRemoteThread)、阻止对其调用GetContext SetContext等。(但直接读写进程空间或者Attach操作是阻止不了的)。"
|
能力值:
( LV9,RANK:160 )
|
-
-
7 楼
呵呵,APC的牛叉之处在于在线程获得CUP时间片之后在执行线程代码前调用,所以无视了你的死循环了,APC使用很简单,执行机制是很复杂的,涉及线程调度等内容……
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
如楼上所说,使用简单,机制复杂。咱们的代码都是受系统调度的,系统要安插点东西让你执行,你循环再怎么死也是没用的
ZwTerminateProcess、CreateRemoteThread这些函数在实现的时候都用到了APC,所以阻止APC的正常初化或插入就会使这些函数失败。有一个病毒hook KeInitializeApc,然后判断目标线程是否是自己要保护的线程,如果是就把APC对象的Insert域改为True。这样在调用KeInsertQueueApc时就会失败,从而保护了自己(据网上说有的杀软也是这么干的)。像WriteProcessMemory这样的函数是Attach到目标进程再读写进程内的数据,完成后再Detach回来,没有用到APC,所以阻止不了啦。
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
谢谢LZ和楼上的帮忙回答问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
呵呵,大湿的帖子不得不顶啊。
|
能力值:
( LV3,RANK:20 )
|
-
-
11 楼
八百年不露一次脸 好不容易露一次就让你发现了
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
不错
慢慢学习
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
先回复再看~
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
额,正好在纳闷APC这东西滴时候,楼主很低调的出现了
感谢楼主的科普
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
非常好的基础知识讲座,有幸学习了!
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
有难度啊。基本上不理解。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
不懂,但是,也见识一下~
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
不会先来学习下
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
不错,深奥中的浅显易懂
|
能力值:
( LV3,RANK:20 )
|
-
-
20 楼
不懂,但是,也见识一下~
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
了解APC~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
mark
|
|
|