首页
社区
课程
招聘
注入系统所有应用程序
发表于: 2016-4-25 15:13 15380

注入系统所有应用程序

2016-4-25 15:13
15380
接到一个需求,需要拦截软件的启动参数,而后修改成自己的启动参数,需要注入系统内所有的程序。
lpk复制所有目录下这个方法不行- -,远程线程注入所有进程感觉不是最优的方法,还有木有!求帮助。
我的理想方法是dll只有一个,不需要复制让系统所有程序运行的时候都加载我的dll。不知道有没有方法实现呢

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

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 292
活跃值: (132)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
2
全局钩子呢?
2016-4-25 15:40
0
雪    币: 292
活跃值: (132)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
3
你的需求再明确一些
2016-4-25 15:41
0
雪    币: 457
活跃值: (218)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
已优化需求
2016-4-25 15:49
0
雪    币: 457
活跃值: (218)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
全局钩子需要事件驱动,感觉不优啊?
2016-4-25 15:50
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
R3最好的方法就是全局钩子了
2016-4-25 16:05
0
雪    币: 457
活跃值: (218)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
没有别的方法了吗
2016-4-25 16:27
0
雪    币: 110
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
appinit_dlls呢?
2016-4-25 16:45
0
雪    币: 5
活跃值: (1131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
浏览器加启动参数吗?
2016-4-25 16:52
0
雪    币: 292
活跃值: (132)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
10
拦截启动参数,我估计也就只能全局钩子了,而且我不确定全局钩子能胜任你的需求,主要是时机问题
2016-4-25 16:55
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
有,加载驱动,杀毒都不能拦截你注入
2016-4-25 16:59
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
注入所有程序,会有很多问题出现
2016-4-25 18:02
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
全局钩子注入到所有打开的进程中,然后Hook了CreateProcess函数,每次启动一个进程都注入一下dll
2016-4-26 09:47
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
开机启动驱动里面直接修改CreateProcess,这样就是全局的
2016-4-26 09:53
0
雪    币: 3097
活跃值: (3426)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
rundll32.exe
2016-4-26 10:54
0
雪    币: 457
活跃值: (218)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
感谢各位,最终我采用启动时注入所有非系统进程,Hook创建进程API,每次创建时再进行立即注入。
2016-4-26 16:37
0
雪    币: 2168
活跃值: (1997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
hook那个进程的CreateProcess
2016-4-26 17:34
0
雪    币: 995
活跃值: (669)
能力值: ( 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版
2016-4-26 18:02
0
雪    币: 292
活跃值: (132)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
19
WMI是可以拦截到进程创建,,但考虑到楼主的需求是拦截启动参数,然后修改参数,然后启动

我感觉WMI拦截到进程创建的时候,启动参数部分已经处理完毕了,所以我感觉WMI并不适合他的需求
2016-4-28 08:23
0
雪    币: 292
活跃值: (132)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
20
不过,也可以换个思路,WMI监视进程创建,然后HOOK CreateProcess,也就是说HOOK楼主需求里的父进程中的CreateProcess,这样当父进程调用此函数创建子进程时可以通过判断子进程的名字等标示来识别也是可以达到楼主的需求的

但,如果WMI拦截的是子进程,由于时机问题是不可行的

既然是拦截父进程,我认为最好的方案还是全局钩子,代码量少,系统处理的我们都不需要考虑,,WMI是一个服务,这个服务是可以手动停止的,也就是说如果目标机器上WMI这个服务停掉了,一切WMI的操作都是浮云了
2016-4-28 08:31
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
调用 WMI,后面就方便了
2016-4-28 10:24
0
雪    币: 608
活跃值: (648)
能力值: ( 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
2016-4-28 11:23
0
雪    币: 457
活跃值: (218)
能力值: ( 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)而后再进行远程线程注入

由于工作原因所以有些代码不方便放出来与大家一起讨论,所以只能说下思路了
2016-5-11 15:01
0
游客
登录 | 注册 方可回帖
返回
//