新的注入方法
2010-03-01 15:29
190 查看
上次说了 一个办法 HOOK ntdll.memmove h1d 0{
4C*=8oe_
今天再讲一个 我们先来科普下
!q1^X% a
|xC TX
Windows环境进程的创建包括以下几个步骤: 4B,A+{3yL
AMiFsgBj
打开EXE文件,创建局部的段对象; L*Cf&c`8r
创建Windows执行体进程对象; =1?yS3
创建和初始化主线程(包括栈、上下文、执行体线程块对象的创建); $+N^ s^
通知Windows子系统新的进程已经创建,系统为新的进程运行设置环境; L-TVe
开始执行初始线程(如果在创建进程的时候使用了CREATE_SUSPENDED标志,那么就挂起主线程); ^aMdbB
在新的进程和线程的上下文中,完成地址空间的初始化(如动态链接库的加载等)和开始执行程序。 ^@> Qiy
pZn%g]nRD
在XP/NT系统中CreateProcess函数的调用过程为 d8I:F9
0: CreateProcess i)DXb
1:CreateProcessInternalW ApBThW *E
2:NtCreateProcessEx/NtCreateProcess (`xnA~BN
3:PspCreateProcess SW, Po>Y
P ie!Su`
以上是大概流程 注意 避免误人子弟 如对具体过程有兴趣的童鞋 请自行查询详细资料深入了解
g{(nt5|^l
z$b!J$A1
我们只是需要注入一个DLL 要求很简单 但也不简单 必须在驱动保护加载前注入 bq ]a8tSB
xx8na8
我们的目标是 HOOK NtCreateProcessEx 这个函数一般在内核态中SSDT HOOK 用来监控进程的创建 当然我们R3下HOOK 足以 TQH#sx
Hq$ |j,&?
函数声明如下 T(DE^E@a
iI7~9SCE
NTSTATUS NtCreateProcessEx( Y}U w7\e
OUT PHANDLE ProcessHandle, <Z;BB)I&C`
IN ACCESS_MASK DesiredAccess, F^-4Pyq@
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, (Bz(KyD[
IN HANDLE ParentProcess, `0F IJT
IN BOOLEAN InheritObjectTable, /Z_QCj
IN HANDLE SectionHandle OPTIONAL, *VB*/^6A
IN HANDLE DebugPort OPTIONAL, om6R/K
IN HANDLE ExceptionPort OPTIONAL, z?xd\x
IN HANDLE Unknown OPTIONAL); ~4 ab\hq
F mPF7
我们只关心其中一个参数 OUT PHANDLE ProcessHandle 输出 进程句柄 |wx1 [xZ
O9Aooe4W=
那么答案很明显了 HOOK 他 然后 调用一下原始函数 获取返回的 ProcessHandle 连OpenProcess 都免了 uY,FugWbl
gK /K Z8
就不上代码了 本人代码很挫 就不丢人现眼了
.kVga+la?
eR CG r?e4
最后再加一句
万一你失败了 那我只能说 以上只是理论验证 根据个人理解不同 结果也不同
s6 I]H
tyh%s"
4C*=8oe_
今天再讲一个 我们先来科普下
!q1^X% a
|xC TX
Windows环境进程的创建包括以下几个步骤: 4B,A+{3yL
AMiFsgBj
打开EXE文件,创建局部的段对象; L*Cf&c`8r
创建Windows执行体进程对象; =1?yS3
创建和初始化主线程(包括栈、上下文、执行体线程块对象的创建); $+N^ s^
通知Windows子系统新的进程已经创建,系统为新的进程运行设置环境; L-TVe
开始执行初始线程(如果在创建进程的时候使用了CREATE_SUSPENDED标志,那么就挂起主线程); ^aMdbB
在新的进程和线程的上下文中,完成地址空间的初始化(如动态链接库的加载等)和开始执行程序。 ^@> Qiy
pZn%g]nRD
在XP/NT系统中CreateProcess函数的调用过程为 d8I:F9
0: CreateProcess i)DXb
1:CreateProcessInternalW ApBThW *E
2:NtCreateProcessEx/NtCreateProcess (`xnA~BN
3:PspCreateProcess SW, Po>Y
P ie!Su`
以上是大概流程 注意 避免误人子弟 如对具体过程有兴趣的童鞋 请自行查询详细资料深入了解
g{(nt5|^l
z$b!J$A1
我们只是需要注入一个DLL 要求很简单 但也不简单 必须在驱动保护加载前注入 bq ]a8tSB
xx8na8
我们的目标是 HOOK NtCreateProcessEx 这个函数一般在内核态中SSDT HOOK 用来监控进程的创建 当然我们R3下HOOK 足以 TQH#sx
Hq$ |j,&?
函数声明如下 T(DE^E@a
iI7~9SCE
NTSTATUS NtCreateProcessEx( Y}U w7\e
OUT PHANDLE ProcessHandle, <Z;BB)I&C`
IN ACCESS_MASK DesiredAccess, F^-4Pyq@
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, (Bz(KyD[
IN HANDLE ParentProcess, `0F IJT
IN BOOLEAN InheritObjectTable, /Z_QCj
IN HANDLE SectionHandle OPTIONAL, *VB*/^6A
IN HANDLE DebugPort OPTIONAL, om6R/K
IN HANDLE ExceptionPort OPTIONAL, z?xd\x
IN HANDLE Unknown OPTIONAL); ~4 ab\hq
F mPF7
我们只关心其中一个参数 OUT PHANDLE ProcessHandle 输出 进程句柄 |wx1 [xZ
O9Aooe4W=
那么答案很明显了 HOOK 他 然后 调用一下原始函数 获取返回的 ProcessHandle 连OpenProcess 都免了 uY,FugWbl
gK /K Z8
就不上代码了 本人代码很挫 就不丢人现眼了
.kVga+la?
eR CG r?e4
最后再加一句
万一你失败了 那我只能说 以上只是理论验证 根据个人理解不同 结果也不同
s6 I]H
tyh%s"
相关文章推荐
- 构造方法注入
- FactoryBean在XML中的依赖注入方法
- ASP防注入漏洞方法
- Spring方法注入
- Dll注入经典方法完整版
- php简单实现sql防注入的方法
- php简单实现sql防注入的方法
- 简单高效防注入攻击的动态多参数、动态SQL语句拼接方法,提高网站的安全性
- 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法
- 向其他进程注入代码的三种方法
- spring方法注入
- jersey和spring集成,不能注入service的问题解决方法
- 从头认识Spring-2.4 基于java的标准注解装配-@Inject(2)-通过set方法或者其它方法注入
- 注入方法之介绍
- spring 3.1.13中新增的util @value注解,给类或方法注入值
- 手工注入方法,方便大家测试注入点
- 【转载】注入安卓进程,并hook java世界的方法
- 将动态连接库注入到其他进程中的一种新方法
- PHP防止被xss和sql语 cd6d 句注入攻击的方法(网站和app通用)
- ReactNative更换JSContext增加注入方法