20楼#
发布于:2008-04-06 14:41
主要是提供一种想法,而且很多人动不动就清CALLBACK例程,经过我这么一折腾,他再要清我的CALLBACK就没那么容易了.至于2K同样的处理更简单,不过考虑靠MS从今年6月以后就放弃XP了,所以不考虑也罢.
|
|
|
21楼#
发布于:2008-04-06 14:51
只要把你那个清了就都清了,,他们都省事了。。。
|
|
|
22楼#
发布于:2008-04-06 22:10
汗,的确是我看错题目了。难怪驱动加载不起。
要过他的call back 不难。Terminate之前: 到pspCidTable表里把把psxx的 eprocess地址拷贝到自己的在pspCidTable的偏移地址,然后用你的PID覆盖psxx eprocess中的PID和 psxx 线程ethread 里头的PID。 然后通过自己的PID zwopenprocess,这时获得句柄其实就是psxx进程的句柄了。这时再 Terminate ,是可以绕过他的call back的,但是依然无法终止进程。唉。因为这个程序实在太强了。sys启动后,notify函数里只判断当前进程及线程的创建是否与psxx PID相同,只要相同不管创建还是终止,直接KeDelayExecutionThread。而psxxxexe在sleep的也不知咋滴就创建了一个线程,不是人为代码创建,系统自己创建的,虽然是自身创建,但由于它在psxx里头,因此自己的线程在notify的时候直接就被自己的驱动直接KeDelayExecutionThread。 所以你在zwterminate哪怕过了notify,也只能关闭ring3 sleeep那个线程。整个进程无法被关闭,因为在等待自己另一个线程从KeDelayExecutionThread中返回。而这个函数不返回。就这样保护了自己的进程。就不知道是故意安排还是歪打正着??? |
|
23楼#
发布于:2008-04-06 22:17
当然是故意安排了,PspExitThread和PspExitProcess都要走notify,因此只要你用这两条路退出,基本就必然走notify
一个进程当然至少有一个线程,sleep只是把线程切换出去而已 |
|
|
24楼#
发布于:2008-04-07 14:03
不知道这个答案是不是一个让人信服的结果啊
|
|
25楼#
发布于:2008-04-07 15:21
引用第24楼powerboot于2008-04-07 14:03发表的 : 信服的结果就是拿个另外进程的PID,TID替换到MJ的进程里,因为在CALLBACK里只能收到PID和TID之类的信息,即使去查EPROCESS也是错的,总而言之就是欺骗.可惜的是CALLBACK里没把EPROCESS也传进去. |
|
|
26楼#
发布于:2008-04-07 16:17
我试过了,还找不到好的关闭方案,在PID替换之后,我先另外插了个内核apc到那个mj那个KeDelayExecutionThread线程里,然后掉pspexitthread,总算把顽固线程关了。然后在zwterminate 关闭进程,zwterminate返回成功,用!process命令看,发现EPROCESS还没被替换出链表,但是mj进程里所有线程都被关闭了。F5后,虽然没线程,但是那个命令行窗口依然在.那叫一个汗啊。尝试terminate后调pspprocessdelete,掉完后,eprocess的确也被替换出链表了,但是F5就兰.
|
|
27楼#
发布于:2008-04-07 16:37
哈哈 这么好玩啊,MJ真是流氓,以后流氓都用这个方法
|
|
28楼#
发布于:2008-04-07 16:46
看看多无聊的家伙们啊~
|
|
29楼#
发布于:2008-04-07 18:49
引用第28楼lazydog于2008-04-07 16:46发表的 : 请LS的把这个保护破掉再来说我们无聊好不好? |
|
30楼#
发布于:2008-04-07 19:14
f5是什么?
WOW巨牛,貌似替换PID的方法被证实不好用。会出问题 |
|
|
31楼#
发布于:2008-04-07 22:25
F5 就是键盘最上面一排地6个键-_-.
启动了ppxx后, kptest.rar中,先用驱动加载工具加载kpsys.sys,然后启动kp.exe.就能把ppxx的进程给关了。 原理就是除了上面说的PID更改+unmapXXXX. 忘了,在xpsp2下测试通过 |
|
|
32楼#
发布于:2008-04-07 22:28
F5估计就是GO的意思.替换的时机应该在调用CALLBACK之前和调用好以后,因为在CALLBACK是没有影响的,所以我认为不做HOOK是不好处理的.
|
|
|
33楼#
发布于:2008-04-07 23:01
且不说这种方法有时候可以有时候不可以.如果把MJ的程序稍做改动,在DEVICEIOCONTROL保存的是当前的EPROCESS,然后在回调里比较传入的PID和自己的EPROCESS里的PID进行比较的话,马上就失效了.
|
|
|
34楼#
发布于:2008-04-07 23:04
wowo老大所言极是,做hook的确是最好的办法。也是最稳定的办法。PID变更在稳定上和hook 没法比。
问题是ppxx有个线程太顽固,我也是没办法。大部分时间是花在了怎么干掉那个顽固线程上,还有的就是线程干掉了,它窗口居然还在。还有一些时间是花在了怎么干它窗口上? |
|
35楼#
发布于:2008-04-08 08:09
因为你的操作干扰了系统的正常行为,所以可能出现很多莫名其妙的问题.整个WINDOWS浩如烟海,即使我们都K,WRK里的东西也不能保证和其保持一致,所以只能是局部处理,把影响的部分最小化.
|
|
|
36楼#
发布于:2008-04-08 15:32
给窗口发关机消息呢?
|
|
|
37楼#
发布于:2008-04-09 11:42
说了一圈,最后又回到我提出的两个办法而已。
1. 清链; 2. 改 pid; 人家都说这是作弊了好不好?你们换个方法吧。偶也学习一下 |
|
38楼#
发布于:2008-04-10 16:46
强烈建议MJ出来公布答案
|
|
39楼#
发布于:2008-05-10 18:22
該進程能否 Inject?
如果可以注入一段代碼,這段代碼執行時,把EIP指到零。 行不行得通? |
|