R3注入的四种方式
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注入的四种方式的更多相关文章
- Spring中依赖注入的四种方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...
- spring的依赖注入的四种方式,数组与集合注入;引用注入;内部bean注入
三种注入方式 第一种: 基于构造函数 hi.java (bean) package test_one; public class hi { private String name; public hi ...
- Spring通过构造方法注入的四种方式
通过构造方法注入,就相当于给构造方法的参数传值 set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选 的,构造注入的优势是通过构造强制依赖关系,不可能实例化不 完全的或无法使用的bean. Me ...
- spring注入的四种方式
配置文件spring.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...
- 六 Spring属性注入的四种方式:set方法、构造方法、P名称空间、SPEL表达式
Spring的属性注入: 构造方法的属性注入 set方法的属性注入
- Spring依赖注入的四种方式
首先,我们需要定义一个Bean的class类: package framework.spring; import org.springframework.beans.BeansException; i ...
- .net core 2.x - 缓存的四种方式
其实这些微软docs都有现成的,但是现在的人想对浮躁些,去看的不会太多,所以这里就再记录下 ,大家一起懒一起浮躁,呵呵. 0.基础知识 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性 ...
- Spring事务管理的四种方式(以银行转账为例)
Spring事务管理的四种方式(以银行转账为例) 一.事务的作用 将若干的数据库操作作为一个整体控制,一起成功或一起失败. 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不 ...
- 普通java类加入spring容器的四种方式
今天在自己开发的工具类中使用了spring注入的方式调用了其他类,但是发生的报错,在整理了后今天小结一下. 首先简单介绍下spring容器,spring容器是整个spring框架的核心,通常我们说的s ...
随机推荐
- python基础举例应用
将下述两个变量的值交换s1='alex's2='SB's1,s2=s2,s1print(s1,s2) 判断下述结果msg1='alex say my name is alex,my age is 73 ...
- LimeSDR Getting Started Quickly | LimeSDR上手指南
0x00 概览 LimeSDR部分特性: USB 3.0 : 4 x Tx 发射天线接口 6 x Rx 接收天线接口: 可用于Wi-Fi, GSM, UMTS, LTE, LoRa, Bluetoot ...
- python,monkey-patch【猴子补丁】
用来运行时动态修改已有的代码,而不需要修改原始代码,在gevent[协程]中.会在开头的地方gevent.monkey.patch_all(),把标准库中thead.sockcet等给替换掉,这样我们 ...
- springboot (spring mvc)集成swagger
最近用springboot构建rest接口,考虑到最方便的验证接口,想到了引入swagger. 基本的步骤大致如下: 1.pom中引入swagger依赖: <dependency> < ...
- Python 内置函数2
print(list("胡辣汤")) lst = ["河南话", "四川话", "东北", "山东" ...
- LeetCode--219、268、283、414、448 Array(Easy)
219. Contains Duplicate II Given an array of integers and an integer k, find out whether there are t ...
- phantomjs 抓取、截图中文网站乱码的问题的解决
用phantomjs抓取html乱码的解决方案: phantomjs --output-encoding=gbk test.js http://webscan.360.cn/index/checkwe ...
- PHP设计模式之观察者模式(转)
开篇还是从名字说起,“观察者模式”的观察者三个字信息量很大.玩过很多网络游戏的童鞋们应该知道,即便是斗地主,除了玩家,还有一个角色叫“观察者".在我们今天他谈论的模式设计中,观察者也是如此. ...
- Linux如何在(localhost)本地打开html
自己实验的结果,可能不是最好的办法,方法不唯一 1. 下载Tomcat https://www.cnblogs.com/liangweiping/p/5113857.html 如何查看本机的端口服务 ...
- Django--路由控制 ——URL反向解析
Django--路由控制 本文目录 一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 回到目录 一 Djan ...