能力值:
( LV2,RANK:10 )
2 楼
我也研究了一段时间,确实没找到好的办法,改名都不行的
能力值:
( 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的时候变成了什么不就行了?
能力值:
( LV2,RANK:10 )
4 楼
恩,跟了不是。
这个API非常奇怪,为啥HOOK他CreateRemoteThread联级注入就失败。
用OD跟,单步走程序10次里边有只有2次能注入。
如果程序自己跑,完全注入不了,CreateRemoteThread错误8
能力值:
( LV2,RANK:10 )
5 楼
LZ找到可以创建挂起的进程方法了吗?怎么写?
能力值:
( LV9,RANK:610 )
6 楼
看了一下,NtCreateUserProcess创建的进程本来就是挂起的,如果用户没指定CREATE_SUSPENDED,那么就再执行NtResumeThread恢复执行
能力值:
( 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);
到底是哪里出错了。。。。大牛指导啊!
能力值:
( LV2,RANK:10 )
8 楼
呵呵,他说的是hook后的问题。。。
@楼主 问题都描述不清楚怎么来提问啊
你应该是说hook后怎么修改参数让他暂停的问题吧,这是做不到的
因为CreateProcessInternal流程如果判断上层函数没有设置suspend,就会主动调用NtResumeThread,而对NtCreateUserProcess来说,就如他上面讲的,默认就是传入suspend参数的
所以你要暂停它,要么hook CreateProcessInternal/createprocess修改上层参数,要么hook ntresumethread阻止他启动
但是这样一样解决不了你remote thread的问题,你是要注入services进程吧(又是问题不说清),跨session注入不做处理是调用不了createremotethread的,可以看看论坛里的跨session注入老帖
能力值:
( 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
能力值:
( LV2,RANK:10 )
10 楼
钩ZwCreateThread,判断是否是第一个线程,threadcontext->eax就是OEP,然后写shellcode,这样会不会好一些.
能力值:
( LV2,RANK:10 )
11 楼
未尝试过, 但如果是可行的, 又学到一招, 赞之~
能力值:
( LV2,RANK:10 )
12 楼
挂CreateProcessInternal/createprocess远程注入成功,为啥挂NtCreateUserProcess远程线程注入就失败呢。任意进程都失败。
能力值:
( LV2,RANK:10 )
13 楼
不是说了因为createprocess内部就会resume么?
能力值:
( LV12,RANK:380 )
14 楼
我正好碰见一个问题 怎么在OD下ZwCreateThread 创建的线程的断点
它用ZwResumeThread 一下子就飞了,断不住
能力值:
( LV2,RANK:10 )
15 楼
NtCreateUserProcess执行返回之后判断resume不resume。
这和我创建线程注入到子进程没关系啊。
能力值:
( LV12,RANK:380 )
16 楼
这个是我昨晚刚好遇到的问题 借用下帖子