能力值:
( LV3,RANK:20 )
|
-
-
2 楼
全局钩子呢?
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
你的需求再明确一些
|
能力值:
( LV5,RANK:60 )
|
-
-
4 楼
已优化需求
|
能力值:
( LV5,RANK:60 )
|
-
-
5 楼
全局钩子需要事件驱动,感觉不优啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
R3最好的方法就是全局钩子了
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
没有别的方法了吗
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
appinit_dlls呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
浏览器加启动参数吗?
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
拦截启动参数,我估计也就只能全局钩子了,而且我不确定全局钩子能胜任你的需求,主要是时机问题
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
有,加载驱动,杀毒都不能拦截你注入
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
注入所有程序,会有很多问题出现
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
全局钩子注入到所有打开的进程中,然后Hook了CreateProcess函数,每次启动一个进程都注入一下dll
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
开机启动驱动里面直接修改CreateProcess,这样就是全局的
|
能力值:
( LV5,RANK:70 )
|
-
-
15 楼
rundll32.exe
|
能力值:
( LV5,RANK:60 )
|
-
-
16 楼
感谢各位,最终我采用启动时注入所有非系统进程,Hook创建进程API,每次创建时再进行立即注入。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
hook那个进程的CreateProcess
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
最简单 有效方便的就是 调用 WMI 参数 select * from __instancecreationevent within 1 where TargetInstance isa 'Win32_Process 监控新进程创建 能得到新进程的 各种信息 句柄 父进程ID啥的 随便你干啥
http://blog.csdn.net/zwfgdlc/article/details/6613605 别人写的VC版
|
能力值:
( LV3,RANK:20 )
|
-
-
19 楼
WMI是可以拦截到进程创建,,但考虑到楼主的需求是拦截启动参数,然后修改参数,然后启动
我感觉WMI拦截到进程创建的时候,启动参数部分已经处理完毕了,所以我感觉WMI并不适合他的需求
|
能力值:
( LV3,RANK:20 )
|
-
-
20 楼
不过,也可以换个思路,WMI监视进程创建,然后HOOK CreateProcess,也就是说HOOK楼主需求里的父进程中的CreateProcess,这样当父进程调用此函数创建子进程时可以通过判断子进程的名字等标示来识别也是可以达到楼主的需求的
但,如果WMI拦截的是子进程,由于时机问题是不可行的
既然是拦截父进程,我认为最好的方案还是全局钩子,代码量少,系统处理的我们都不需要考虑,,WMI是一个服务,这个服务是可以手动停止的,也就是说如果目标机器上WMI这个服务停掉了,一切WMI的操作都是浮云了
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
调用 WMI,后面就方便了
|
能力值:
( LV4,RANK:50 )
|
-
-
22 楼
其实给你一个很简单的思路,这个思路是基于优化过的远程线程注入方式:
1.首先搞一个DLL,名字就叫Hook.dll好了。功能就是HOOK一下CreateProcessW函数,判断是否是创建的浏览器进程,然后和谐参数,并且把自身注入到子进程里。
2.然后用查找Shell_TrayWnd的方法取explorer.exe的PID,再取 Handle,取SID,留好备用。
3.遍历所有进程,取进程的SID,和explorer.exe的SID进行对比,如果一致则注入Hook.dll
|
能力值:
( LV5,RANK:60 )
|
-
-
23 楼
感谢大家的回复,最终由于任务紧迫,所以采用方案如下:
编译文件为dll32,dll64与exe32,exe64,并公开初始化函数由exe调用,当exe首次启动时调用初始化函数枚举系统进程注入所有非SYS用户的进程,并将EXE本身设置为系统服务并启动,
已经注入到非SYS进程中的dll会HookCreateProcessInternalW,由于不同系统中函数的来源dll不同所以会通过代码↓进行判断
*(FARPROC*)&g_OldCreateProcessInternalW = GetProcAddress(GetModuleHandle("kernelbase.dll"),"CreateProcessInternalW");//Kernel32
if (!g_OldCreateProcessInternalW)
{
*(FARPROC*)&g_OldCreateProcessInternalW = GetProcAddress(GetModuleHandle("Kernel32.dll"), "CreateProcessInternalW");
if (!g_OldCreateProcessInternalW)
{
DebugPrintA("My::g_OldCreateProcessInternalW() == NULL \n");
return;
}
}
当拦截到创建内容后将会删选启动路径与参数,符合修改条件则通过StringCbCopyW函数对参数指针的内容进行覆盖。
而后放行该进程sleep(1000)而后再进行远程线程注入
由于工作原因所以有些代码不方便放出来与大家一起讨论,所以只能说下思路了
|
|
|