DLL注入

1.首先要获取想要注入的进程句柄(OpenProcess)
2.从要注入的进程的地址空间中分配一段内存(VirtualAllocEx)
3.往分配的内存位置写入要注入的DLL名称(WriteProcessMemory)
4.从kernel32.dll中找到LoadLibrary(A或W)函数地址(GetModuleHandle+GetProcAddress)
5.创建远程线程执行加载DLL函数(CreateRemoteThread)

傀儡进程注入

1.首先读取恶意代码的可执行文件并将其解析(按PE结构镜像加载)
2.建立一个挂起的傀儡进程并获取其进程基本信息(CreateProcess函数传入的结构中可获取进程和主线程句柄)
3.获取进程主线程的基本信息(GetThreadContext获取的contex的Ebx为PEB,+8获取进程基址,ReadProcessMemory读取)
4.从ntdll获取NtUnmapViewOfSection远程卸载基址模块(GetModuleHandle+GetProcAddress)
5.从傀儡进程中的恶意镜像指向的基址分配恶意镜像大小的内存然后把恶意镜像写进去(如果选择其他地址则需要修改恶意镜像的基址重定位表_VirtualAllocEx+WriteProcessMemory)
6.修改进程主线程eip指向恶意镜像入口点以及PEB指向的基址(contex的Eax为eip,PEB用WriteProcessMemory修改)
7.将修改的contex设置回去并回复线程运行(SetThreadContext+ResumeThread)

x64下用ntdll中的NtQueryInformationProcess获取PEB,contex的Rcx为eip

HOOK注入

1.加载一个DLL,获取其某个函数地址(LoadLibrary+GetProcAddress)
2.获取一个进程句柄
3.通过系统钩子把指定函数挂上去即可(SetWindowsHookEx,目标进程会加载DLL)

APC注入

1.获取指定进程的ID以及所有线程的集合 (CreateToolhelp32Snapshot)
2.远程分配内存并将指定DLL名称写入(VirtualAllocEx+WriteProcessMemory)
3.迭代打开所有线程依次往APC队列添加加载DLL函数调用(OpenThread+QueueUserAPC+GetProcAddress)
---------------------
作者:zyorz
来源:CSDN
原文:https://blog.csdn.net/zyorz/article/details/78116055
版权声明:本文为博主原创文章,转载请附上博文链接!

R3注入的四种方式的更多相关文章

  1. Spring中依赖注入的四种方式

    在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...

  2. spring的依赖注入的四种方式,数组与集合注入;引用注入;内部bean注入

    三种注入方式 第一种: 基于构造函数 hi.java (bean) package test_one; public class hi { private String name; public hi ...

  3. Spring通过构造方法注入的四种方式

    通过构造方法注入,就相当于给构造方法的参数传值 set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选 的,构造注入的优势是通过构造强制依赖关系,不可能实例化不 完全的或无法使用的bean. Me ...

  4. spring注入的四种方式

    配置文件spring.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...

  5. 六 Spring属性注入的四种方式:set方法、构造方法、P名称空间、SPEL表达式

    Spring的属性注入: 构造方法的属性注入 set方法的属性注入

  6. Spring依赖注入的四种方式

    首先,我们需要定义一个Bean的class类: package framework.spring; import org.springframework.beans.BeansException; i ...

  7. .net core 2.x - 缓存的四种方式

    其实这些微软docs都有现成的,但是现在的人想对浮躁些,去看的不会太多,所以这里就再记录下 ,大家一起懒一起浮躁,呵呵. 0.基础知识 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性 ...

  8. Spring事务管理的四种方式(以银行转账为例)

    Spring事务管理的四种方式(以银行转账为例) 一.事务的作用 将若干的数据库操作作为一个整体控制,一起成功或一起失败.   原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不 ...

  9. 普通java类加入spring容器的四种方式

    今天在自己开发的工具类中使用了spring注入的方式调用了其他类,但是发生的报错,在整理了后今天小结一下. 首先简单介绍下spring容器,spring容器是整个spring框架的核心,通常我们说的s ...

随机推荐

  1. mysql储存引擎

    Mysql数据库常用存储引擎 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使 ...

  2. 若sql语句中order by指定了多个字段,怎么排序?

    举个例子吧: order by id desc,time desc 先是按 id 降序排列 (优先)如果 id 字段 有些是一样的话 再按time 降序排列 (前提是满足id降序排列)

  3. 前端_标签01_input标签

    <c:forEach items="${itemList }" var="item" varStatus="status">&l ...

  4. 16 多校 8 Ball (贪心排序)很巧妙的思路啊~

    ZZX has a sequence of boxes numbered 1,2,...,n1,2,...,n. Each box can contain at most one ball. You ...

  5. sscanf 与 ssprintf 用法 (转载--https://www.cnblogs.com/Anker/p/3351168.html)

    sprintf函数 sprintf函数原型为 int sprintf(char *str, const char *format, ...).作用是格式化字符串,具体功能如下所示: (1)将数字变量转 ...

  6. xdoj 1028 (素数线性筛+dp)

    #include <bits/stdc++.h> using namespace std; ; int prime[N]; int dp[N]; int main () { memset ...

  7. const 和let的本质区别

    在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量. const优于let有几个原因.一个是const可以提醒阅读程序的人,这个变量不应该改变:另一个是c ...

  8. LSOF查看linux中文件打开情况

    如何查看linux中文件打开情况 前言 我们都知道,在linux下,“一切皆文件”,因此有时候查看文件的打开情况,就显得格外重要,而这里有一个命令能够在这件事上很好的帮助我们-它就是lsof. lin ...

  9. oracle 11g(64位)datebase 安装流程

    软件版本:oracle 11g 64位 datebase(二合一,含client) 系统环境:windows 10 专业版 64位操作系统 1)根据自己的操作系统去官网下载相应的安装程序,oracle ...

  10. golang fatal error: concurrent map read and map write

    调试程序的时候,为了打印map中的内容 ,直接 使用seelog 的方法打印 map中的内容到日志,结果出现 “concurrent map read and map write”的错误,导致程序异常 ...