首页
社区
课程
招聘
[求助]线程回调可以防远程线程么?
2014-10-20 01:27 6195

[求助]线程回调可以防远程线程么?

2014-10-20 01:27
6195
就是这个回调: PsSetCreateThreadNotifyRoutine

我想在这个回调里面判断是不是远程线程,是的话,就结束这个线程

现在已经能判断是不是远程线程了,但是没法结束这个线程:ZwOpenThread返回0xC000000D, 说是无效参数。。。  但是我用其他的线程ID, 就可以正常打开。唯独打不开这个新创建的“线程”。

PsLookupThreadByThreadId  也不行。。。。。(据说这个在WIN7下可以在线程回调中用,但是我得考虑XP啊)

求解啊,可有其他办法干掉这个线程?

源码:

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (14)
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学雄 1 2014-10-20 07:33
2
0
请勿在WindowsXP下配套使用PsSetCreateThreadNotifyRoutine和ZwOpenThread,因为操作系统有bug.


你没看错,是操作系统的bug~
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学雄 1 2014-10-20 07:38
3
0
http://blog.csdn.net/supercow/article/details/3219115
雪    币: 326
活跃值: (56)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
elapseyear 2014-10-20 09:58
4
0
占个座。
VOID
(*PCREATE_THREAD_NOTIFY_ROUTINE) (
    IN HANDLE  ProcessId,
    IN HANDLE  ThreadId,
    IN BOOLEAN  Create
    );
怎么判断远程线程的,你在回调里结束线程恐怕做不到。
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
何健hj 2014-10-20 10:48
5
0
线程数如果等于1 是进程刚启动的主线程 不是"远程线程"   没法理解这种非A即B的逻辑。
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnxxm 2014-10-20 12:42
6
0
如果进程已经启动了,你再创建一个远程线程,线程数回会是2
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnxxm 2014-10-20 12:46
7
0
如果在回调里面检测到"源进程"和"目的进程"不同,而线程数又是1,说明是进程刚启动
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
何健hj 2014-10-20 15:36
8
0
"源进程"和"目的进程" 不同,线程数>1是什么线程
"源进程"和"目的进程" 相同,线程数>1是什么线程
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
AioliaSky 1 2014-10-20 16:36
9
0
可以防止,终止当前线程就可以了
ZwTerminateThread(NULL, STATUS_SUCCESS) //终止当前线程传递NULL
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnxxm 2014-10-20 16:46
10
0
这样是把"注入者"的线程给终止了...
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnxxm 2014-10-20 16:48
11
0
"源进程"和"目的进程" 不同,线程数>1,是CreateRemoteThread产生的线程 (一般认为是"注入")
"源进程"和"目的进程" 相同,线程数>1,是线程自身CreateThread(一般认为是正常)

"源进程"和"目的进程" 不同,线程数=1,是进程刚启动时候的"主线程"

至少XP下测试是这样
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
何健hj 2014-10-20 17:10
12
0
那么你的远程线程的定义就是 "源进程"和"目的进程" 不同
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
AioliaSky 1 2014-10-20 17:12
13
0
找到线程入口patch,ret 8
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnxxm 2014-10-20 17:22
14
0
差不多是这样,同时得排除掉进程刚启动时候的主线程.
雪    币: 220
活跃值: (117)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
遗失灵魂 2014-10-21 09:59
15
0
把线程address的开头改成ret即可,这样线程就自己退出了
游客
登录 | 注册 方可回帖
返回