首页
社区
课程
招聘
[求助]ZwCreateUserProcess怎么创建一个挂起的进程
发表于: 2016-3-16 22:08 12366

[求助]ZwCreateUserProcess怎么创建一个挂起的进程

2016-3-16 22:08
12366
ZwCreateUserProcess怎么创建一个挂起的进程
像CreateProcess那样,挂起线程,注入,再回复线程。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 95
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我也研究了一段时间,确实没找到好的办法,改名都不行的
2016-3-17 09:56
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
NTSTATUS NtCreateUserProcess(
    OUT PHANDLE ProcessHandle,
    OUT PHANDLE ThreadHandle,
    IN ACCESS_MASK ProcessDesiredAccess,
    IN ACCESS_MASK ThreadDesiredAccess,
    IN POBJECT_ATTRIBUTES ProcessObjectAttributes OPTIONAL,
    IN POBJECT_ATTRIBUTES ThreadObjectAttributes OPTIONAL,
    IN ULONG CreateProcessFlags,
    IN ULONG CreateThreadFlags,
    IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
    IN PVOID Parameter9,
    IN PNT_PROC_THREAD_ATTRIBUTE_LIST AttributeList
);


第七个参数 ULONG CreateProcessFlags不就是吗?
你先自己用CreateProcess创建一个挂起的进程,然后跟踪一下,看看这个标志到调用ZwCreateUserProcess的时候变成了什么不就行了?
2016-3-17 12:26
0
雪    币: 8
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
恩,跟了不是。
这个API非常奇怪,为啥HOOK他CreateRemoteThread联级注入就失败。
用OD跟,单步走程序10次里边有只有2次能注入。
如果程序自己跑,完全注入不了,CreateRemoteThread错误8
2016-3-17 14:18
0
雪    币: 49
活跃值: (261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
LZ找到可以创建挂起的进程方法了吗?怎么写?
2016-3-30 16:52
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6
看了一下,NtCreateUserProcess创建的进程本来就是挂起的,如果用户没指定CREATE_SUSPENDED,那么就再执行NtResumeThread恢复执行
2016-3-31 13:21
0
雪    币: 49
活跃值: (261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
LONG stat =TrueNtCreateUserProcess(
                    ProcessHandle,
                    ThreadHandle,
                    Parameter2,
                    Parameter3,
                    ProcessSecurityDescriptor,
                    ThreadObjectAttributes,
                    CreateProcessFlags,
                    CreateThreadFlags,
                    ProcessParameters,
                    Parameter9,
                    ppuUnknown);

        return stat;

什么也不做,返回句柄后,程序直接就运行了,不用NtResumeThread函数啊。

LONG stat =TrueNtCreateUserProcess(
                    ProcessHandle,
                    ThreadHandle,
                    Parameter2,
                    Parameter3,
                    ProcessSecurityDescriptor,
                    ThreadObjectAttributes,
                    CREATE_SUSPENDED,            //修改这里也停不下来。。。。
                    CreateThreadFlags,
                    ProcessParameters,
                    Parameter9,
                    ppuUnknown);

到底是哪里出错了。。。。大牛指导啊!
2016-3-31 15:04
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
呵呵,他说的是hook后的问题。。。

@楼主 问题都描述不清楚怎么来提问啊

你应该是说hook后怎么修改参数让他暂停的问题吧,这是做不到的

因为CreateProcessInternal流程如果判断上层函数没有设置suspend,就会主动调用NtResumeThread,而对NtCreateUserProcess来说,就如他上面讲的,默认就是传入suspend参数的

所以你要暂停它,要么hook CreateProcessInternal/createprocess修改上层参数,要么hook ntresumethread阻止他启动

但是这样一样解决不了你remote thread的问题,你是要注入services进程吧(又是问题不说清),跨session注入不做处理是调用不了createremotethread的,可以看看论坛里的跨session注入老帖
2016-4-1 00:16
0
雪    币: 13
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
ntdll.ZwCreateUserProcess 无论上层是否设置CREATE_SUSPENDED, 其返回时创建的进程都是挂起的
既然是挂起的, 也就没有必要纠结这个问题了, 直接完做该做的事, 得到想要的结果即可

可行的步骤如下:

1. Hook ntdll.ZwCreateUserProcess
2. 得到hProcess, hThread
3. 定位目标进程OEP
4. Shellcode写入目标进程
5. 修改目标进程OEP, JMP Shellcode (Shellcode中恢复原始OEP并跳回)
6. ntdll.ZwCreateUserProcess 返回
7. 坐等目标进程加载DLL
2016-4-4 15:52
0
雪    币: 68
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
钩ZwCreateThread,判断是否是第一个线程,threadcontext->eax就是OEP,然后写shellcode,这样会不会好一些.
2016-4-4 17:22
0
雪    币: 13
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
未尝试过, 但如果是可行的, 又学到一招, 赞之~
2016-4-8 22:28
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
挂CreateProcessInternal/createprocess远程注入成功,为啥挂NtCreateUserProcess远程线程注入就失败呢。任意进程都失败。
2016-4-12 19:07
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不是说了因为createprocess内部就会resume么?
2016-4-12 22:59
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
14
我正好碰见一个问题  怎么在OD下ZwCreateThread创建的线程的断点

它用ZwResumeThread一下子就飞了,断不住
2016-4-12 23:12
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
NtCreateUserProcess执行返回之后判断resume不resume。
这和我创建线程注入到子进程没关系啊。
2016-4-12 23:53
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
16
这个是我昨晚刚好遇到的问题 借用下帖子
2016-4-13 08:37
0
游客
登录 | 注册 方可回帖
返回
//