printspoofer的RPC调用接口的简单代码
🧠 问题背景:为什么不能“啥都不导库”就直接调用 RPC 接口?
因为:
-
你想调用的是 RPC 接口函数,比如
RpcRemoteFindFirstPrinterChangeNotificationEx
; -
它不是像
MessageBox()
那样的普通 API,而是 运行在远程服务(如 Print Spooler)里的接口; -
你要调用它,需要知道:
-
它的接口 ID(UUID)
-
函数编号(OpNum)
-
参数格式(结构体、顺序等)
-
✅ 做法一:使用 Windows 自带的封装 API(推荐新手)
Windows 提供了一个封装好的 API:
BOOL FindFirstPrinterChangeNotificationEx(HANDLE hPrinter,DWORD fdwFlags,DWORD fdwOptions,LPCWSTR pszLocalMachine,DWORD Count,LPVOID pPrinterNotifyOptions,LPVOID pPrinterNotifyInfo
);
这个函数内部会自动构造 RPC 调用,你只需要引入头文件和库即可:
#include <windows.h>
#include <winspool.h>int main() {HANDLE hPrinter;OpenPrinter(L"PrinterName", &hPrinter, NULL); // 一般用 NULL 也行FindFirstPrinterChangeNotificationEx(hPrinter,PRINTER_CHANGE_ADD_JOB, // 监听什么事件0,L"\\\\127.0.0.1\\pipe\\legitname", // 诱导 spooler 去连接此路径0,NULL,NULL);ClosePrinter(hPrinter);return 0;
}
这里的L"\\\\127.0.0.1\\pipe\\legitname", // 诱导 spooler 去连接此路径
其实是错的
正常就是传个ip
L"127.0.0.1"
看起来像 IP 地址,但 Windows 会自动把它当作 UNC 路径处理:
它最终会被解析成
\\127.0.0.1\pipe\spoolss
这个函数在 winspool.drv
里,编译时需要链接:
#pragma comment(lib, "winspool.lib")
✅ 做法二:你手写 RPC 调用(适合深入研究漏洞)
这个就麻烦多了,你要手动:
-
使用
.idl
文件描述 spoolss 接口; -
编译
.idl
➝.h
+.c
(MIDL 工具); -
注册并绑定 RPC 接口;
-
自己调用其中函数;
👨💻 举个最简单例子:你拿到 spoolss 接口的 IDL 后会看到:
[uuid(12345678-1234-abcd-ef00-0123456789ab),version(1.0)
]
interface spoolss {void RpcRemoteFindFirstPrinterChangeNotificationEx([in] handle_t hPrinter,...);
}
你用 rpcview
等工具就能导出这样的接口,然后用 MIDL
编译,生成对应 .h/.c
文件。
🛠 工具推荐:
-
📦
RpcView.exe
(开源):查看系统暴露的 RPC 接口、UUID、OpNum 等。 -
🧰
MIDL.exe
:微软官方的 IDL 编译器(把接口定义文件编译成.h
+.c
)
✅ 总结给你:
方法 | 优点 | 缺点 |
---|---|---|
使用 FindFirstPrinterChangeNotificationEx | 简单、直接、系统封装好了 | 不够底层 |
自己写 RPC 接口代码(手撸) | 灵活、深入理解提权机制 | 麻烦、需要 RPC 基础 |
相关文章:
printspoofer的RPC调用接口的简单代码
🧠 问题背景:为什么不能“啥都不导库”就直接调用 RPC 接口? 因为: 你想调用的是 RPC 接口函数,比如 RpcRemoteFindFirstPrinterChangeNotificationEx; 它不是像 MessageBox() 那样的普通 API,…...
刻录光盘--和炸铁路,tarjan
https://www.luogu.com.cn/problem/P2835 多做多看多想,一切都会水到渠成 受欢迎的牛--tarjan缩点图论出度-CSDN博客 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int> pii; int n,m; ve…...

新型智慧园区技术架构深度解析:数字孪生与零碳科技的融合实践
🏭在杭州亚运村零碳园区,光伏板与氢燃料大巴构成的能源网络,正通过数字孪生技术实现智能调度。这不仅是格力电器与龙源电力在新能源领域的创新实践,更是智慧园区4.0时代的标杆案例。当AI算法开始接管能源调度,当BIM建模…...
lo(Loopback 接口)详解
lo(Loopback 接口)详解 lo 是 Loopback(环回)接口,它是一个虚拟网络接口,主要用于 本地通信,不依赖物理网卡。所有操作系统(包括 Linux、Windows、macOS)默认都会创建 l…...
duxapp 2025-03-29 更新 编译结束的复制逻辑等
CLI copy 文件夹内的内容支持全量复制优化小程序配置文件合并逻辑(更新后建议将 project.config.json 文件从git的追踪中移除)新增 copy.build.complete 文件夹的复制逻辑,会在程序编译结束之后将文件复制到指定位置 (模块和用户…...
《构建社交应用的安全结界:双框架对接审核API的底层逻辑与实践》
用户生成内容如潮水般涌来。从日常的生活分享,到激烈的观点碰撞,这些内容赋予社交应用活力,也带来管理难题。虚假信息、暴力言论、侵权内容等不良信息,如同潜藏的暗礁,威胁着社交平台的健康生态。内容审核机制…...
网络世界的“百变身份“:动态IP让连接更自由
深夜的程序调试 凌晨两点,我盯着电脑屏幕上的报错信息:"Connection timed out"。这是本周第三次测试服务器响应时被拒绝访问了——只因为之前同一个IP地址尝试登录太过频繁。正在改代码的朋友小王凑过来看了眼:"老兄&…...

Linux基础开发工具大全
目录 软件包管理器 1>软件包 2>软件生态 3>yum操作 a.查看软件包 b.安装软件 c.卸载软件 4>知识点 vim编辑器 1>基本概念 2>基本操作 3>正常模式命令集 a.模式切换 b.移动光标 c.删除 d.复制 e.替换 f.撤销 g.更改 4>底行模式命令…...
【C/C++】C++中引用类型私有成员的设计与应用
文章目录 C中引用类型私有成员的设计与应用核心意义典型使用场景1. 依赖注入(Dependency Injection)2. 避免拷贝开销3. 实现不可变设计4. 接口约束 注意事项1. 生命周期管理2. 构造函数的强制性3. 不可重新绑定4. 与多态的结合 对比指针的优缺点总结 C中…...

网页工具-OTU/ASV表格物种分类汇总工具
AI辅助下开发了个工具,功能如下,分享给大家: 基于Shiny开发的用户友好型网页应用,专为微生物组数据分析设计。该工具能够自动处理OTU/ASV_taxa表格(支持XLS/XLSX/TSV/CSV格式),通过调用QIIME1&a…...
存储器上如何存储1和0
在计算机存储器中,数据最终以**二进制形式(0和1)**存储,这是由硬件特性和电子电路的物理特性决定的。以下是具体存储方式的详细解析: 一、存储的物理基础:半导体电路与电平信号 计算机存储器(…...

2025第三届盘古初赛(计算机部分)
前言 比赛的时候时间不对,打一会干一会,导致比赛时候思路都跟不上,赛后简单复现一下,希望大家批批一下 计算机取证 1、分析贾韦码计算机检材,计算机系统Build版本为?【标准格式:19000】 183…...

【源码级开发】Qwen3接入MCP,企业级智能体开发实战!
Qwen3接入MCP智能体开发实战(上) 一、MCP技术与Qwen3原生MCP能力介绍 1.智能体开发核心技术—MCP 1.1 Function calling技术回顾 如何快速开发一款智能体应用,最关键的技术难点就在于如何让大模型高效稳定的接入一些外部工具。而在MCP技术…...
文本数据词汇级增强
import nltkfrom nltk.corpus import wordnetfrom nltk.tokenize import word_tokenizeimport random# nltk.download(wordnet)# nltk.download(punkt)def get_synonyms(word):"""获取单词的同义词列表"""synonyms []for syn in wordnet.synset…...

基于EFISH-SCB-RK3576/SAIL-RK3576的消防机器人控制器技术方案
(国产化替代J1900的应急救援智能化解决方案) 一、硬件架构设计 极端环境防护系统 防爆耐高温设计: 采用陶瓷纤维复合装甲(耐温1200℃持续1小时),通过GB 26784-2023消防设备防爆认证IP68防护等级…...

微信小程序:封装request请求、解决请求路径问题
一、创建文件 1、创建请求文件 创建工具类文件request.js,目的是用于发送请求 二、js接口封装 1、写入接口路径 创建一个变量BASE_URL专门存储api请求地址 2、获取全局的token变量 从缓存中取出token的数据 3、执行请求 (1)方法中接收传递的参数 function request(url,…...

【技术原理】ELK技术栈的历史沿革与技术演进
一、起源与早期发展(2010-2015) ELK技术栈的诞生源于互联网时代对海量日志处理的迫切需求。2010年,Elasticsearch作为基于Apache Lucene的分布式搜索引擎问世,其核心能力包括实时全文检索、倒排索引和分片存储机制,填补…...
point3d 视野朝向设置
这里写自定义目录标题 point3d 视野朝向设置三维相机朝向的直观理解 point3d 视野朝向设置 open3d.visualization.Visualizer 中的 get_view_control() 方法返回一个 ViewControl 对象,用来控制 3D 可视化窗口中的相机视角。通过这个对象可以设置视角朝向ÿ…...
windows服务器下自启动后台运行python脚本
前言 最近有个需求,在windows下根据系统的cpu核数,运行python脚本,记录下在windows注册服务,后台运行python脚本 目录 前言✅ 一、目录结构(示例)✅ 二、manager.py(启动与 CPU 数相同的子进程…...
【Elasticsearch】flattened`类型在查询嵌套数组时可能返回不准确结果的情况
好的!为了更清楚地说明flattened类型在查询嵌套数组时可能返回不准确结果的情况,我们可以通过一个具体的例子来展示。这个例子将展示如何在文档中没有完全匹配的嵌套对象时,flattened类型仍然可能返回该文档。 示例文档结构 假设你有以下文…...
Mysql、Oracle、Sql Server、达梦之间sql的差异
1:分页查询 Sql Server: <bind name"startRow" value"(page - 1) * limit 1"/> <bind name"endRow" value"page * limit"/> SELECT *FROM (SELECT ROW_NUMBER() OVER (<if test"sortZd!…...

记录算法笔记(2025.5.15)将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确…...
数学复习笔记 11
前言 向量开始。 矩阵的秩 k 阶子式。从这个概念开始复习。考虑 k 阶子式是否为零,具体是多少我们不在乎,我们只在乎 k 阶子式是否为零。把一套资料复习好就好了。 秩的计算 初等变换秩不发生改变。要么初等变换,要么行列式。用行列式需…...

Kubernetes 运维操作手册:从 etcd 快照进行精确恢复
1 5 步实现 etcd 精确恢复 将快照恢复到本地 etcd 数据目录。使用恢复的数据启动本地 etcd 实例。使用 etcdctl 查询特定键(例如,ConfigMap)。使用 auger 解码以提取干净的 YAML。使用 kubectl 申请恢复到您的实时集群。 本指南将指导您从 et…...

云轴科技ZStack官网上线Support AI,智能助手助力高效技术支持
5月16日,云轴科技ZStack在官网(www.zstack.io)正式上线ZStack Support AI智能助手。该系统是ZStack应用人工智能于技术支持服务领域的重要创新,基于自研ZStack AIOS平台智塔及LLMOPS技术打造。 ZStack Support AI定位为智能客服&…...

UE5中制作动态数字Decal
在进行城市道路编辑时,经常需要绘制人行道、交通标志、停车线等路面元素。如果能够使用具有动态修改功能的 Decal(贴花),将大大提升编辑效率和灵活性。接下来讲解如何制作。 1.首先准备一张包含所需元素的Texture,这里…...

【踩坑】修复Cloudflare的Origin Rules端口重定向不生效
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 网上没人说,目前我是通过以下两种方式成功将二级域名映射到指定端口的。关于如何映射,网上教程很多,这里只说不生效…...

2025 年十大网络安全预测
随着我们逐步迈向 2026 年,网络安全领域正处于一个关键的转折点,技术创新与数字威胁以前所未有的复杂态势交织在一起。 地缘政治环境进一步加剧了这些网络安全挑战,国际犯罪组织利用先进的技术能力来追求战略目标。 人工智能在这一不断演变…...
JS手写代码篇---手写 instanceof 方法
2、手写 instanceof 方法 instancecof用于检测一个对象是否是某个构造函数的实例。它通常用于检查对象的类型,尤其是在处理继承关系时。 eg: const arr [1,2,3,4,5]console.log(arr instanceof Array); // trueconsole.log(arr instanceof Object); // true那这是…...
STM32硬件I2C驱动OLED屏幕
本文基于STM32硬件I2C驱动SSD1306 OLED屏幕,提供完整的代码实现及关键注意事项,适用于128x32或128x64分辨率屏幕。代码通过模块化设计,支持显示字符、数字、汉字及位图,并优化了显存刷新机制。 零、完整代码 完整代码: 1&#x…...