【系统工具】Rundll32:Windows系统中的神奇工具,你知道吗?

news2024/11/6 3:06:48

▒ 目录 ▒

    • 🛫 问题
      • 描述
      • 环境
    • 1️⃣ Rundll32的使用
      • 使用方法 - cmd
      • 使用方法 - 运行窗口/任务管理器/资源管理器
    • 2️⃣ 常见应用场景
      • 运行js或vbs的脚本代码
      • 执行命令绕过杀毒软件的作法?
      • 修改注册表
      • 增加一个服务
      • 修复Internet Explorer
      • 其它常见命令
    • 3️⃣ 原理及使用
      • 原理
      • 编程实现
    • 🛬 结论
    • 📖 参考资料

🛫 问题

描述

Rundll32是什么?如何使用它来修复Windows系统问题?

Windows操作系统是全球最流行的操作系统之一,但是在使用过程中,用户可能会遇到各种各样的问题,例如程序无法正常启动、系统崩溃等等。
这些问题可能会导致用户无法正常使用计算机,给用户带来很大的困扰。为了解决这些问题,Windows操作系统提供了一个非常有用的工具——Rundll32。

环境

版本号描述
文章日期2023-05-29
操作系统Win11 - 21H2 - 22000.1335

1️⃣ Rundll32的使用

Rundll32是Windows操作系统中的一个系统文件,它的主要作用是加载动态链接库(DLL)文件中的函数
在Windows操作系统中,许多程序都是使用DLL文件来实现某些功能的,例如打印、网络连接等等。当用户启动一个程序时,程序会调用相应的DLL文件中的函数来完成相应的任务。而Rundll32就是负责加载这些DLL文件中的函数的。

使用方法 - cmd

  1. 打开命令提示符
    在Windows操作系统中,可以通过按下Win+R键打开运行窗口,然后输入cmd命令来打开命令提示符。
  1. 在命令提示符中输入以下命令:
    rundll32.exe shell32.dll,Control_RunDLL

函数调用格式:rundll32.exe [dll文件名],[函数名] [Arguments]
其中,[dll文件名]是需要加载的DLL文件的文件名,[函数名]是需要调用的函数的名称, [Arguments]是参数,一个字符串。

  1. 输入完命令后,按下回车键即可运行命令。如果命令执行成功,会弹出相应的对话框或者执行相应的操作。
  1. 最终效果如下图:
    在这里插入图片描述

使用方法 - 运行窗口/任务管理器/资源管理器

上小节中,我们使用了cmd方式,但是当我们执行直接带窗口的对话框时,会发现执行命令后,没有任何反应。比如MessageBoxA函数。
完整命令为:rundll32.exe user32.dll,MessageBoxA kkk,111,0,0

【原因】
这是因为,cmd窗口中,没有加载窗口相关的内核资源等,MessageBoxA运行依赖于窗口,所以没有反应。(Win11系统测试效果)

【解决方案】
我们通过带窗口的进程运行rundll32.exe即可解决。
具体操作如下面的三种方式:

  1. 运行窗口(系统快捷键Win+R
    在这里插入图片描述
  2. 任务管理器 > 运行新任务
    在这里插入图片描述
    在这里插入图片描述
  3. 资源管理器
    资源管理器的路径栏中输入命令并执行回车。
    在这里插入图片描述

2️⃣ 常见应用场景

运行js或vbs的脚本代码

rundll32 javascript:"\..\mshtml,RunHTMLApplication ";window.execScript("msgbox('a')","vbs");window.close()
运行窗口中执行上面命令,程序执行下面操作

  • 弹出对话框。(msgbox)
  • 显示窗口3。
  • 关闭窗口3。(window.close())
    在这里插入图片描述

执行命令绕过杀毒软件的作法?

执行url.dll的OpenURLFileProtocolHandler函数。
这是经过反汇编分析url.dll得出的结果,请记住这3条命令,活学活用,这是干货。上边的三条命令都可以绕开我本机的火绒。你可以多分析system32下的dll,说不定你还有惊喜。

rundll32.exe url.dll, OpenURL file://c:\windows\system32\calc.exe

rundll32.exe url.dll, OpenURLA file://c:\windows\system32\calc.exe

rundll32.exe url.dll, FileProtocolHandler calc.exe

ps: 可能失效了

修改注册表

写一个c:/reg.inf文件,增加注册表启动项,代码如下:
然后我们运行rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:/reg.inf

[Version]
Signature="$WINDOWS NT$"

[DefaultInstall]
AddReg=My_AddReg_Name
DelReg=My_DelReg_Name

[My_AddReg_Name]
HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Run,KAVRun,0x00000000,c:/muma.exe

增加一个服务

写一个srv.inf,内容如下:
然后执行命令,会增加一个名字为inetsvr的服务。
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:/srv.inf

[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
AddService=inetsvr,,My_AddService_Name
[My_AddService_Name]
DisplayName=Windows Internet Service
Description=提供对 Internet 信息服务管理的支持。
ServiceType=0x10
StartType=2
ErrorControl=0
ServiceBinary=%11%\muma.exe

修复Internet Explorer

Internet Explorer是Windows操作系统中自带的浏览器,如果出现问题,可能会导致用户无法正常上网。使用Rundll32可以修复Internet Explorer中的一些问题。
rundll32.exe inetcpl.cpl,ResetIEtoDefaults

其它常见命令

这个不多说了,系统中提供了各种dll,这些dll可以实现各种功能,具体参考文章《打开控制面板DOS命令和RUNDLL32使用大全 https://blog.csdn.net/ycj911/article/details/6504596》。

ps: 需要注意的是,不同系统中命令的运行结果是不一样的。

3️⃣ 原理及使用

原理

    1. 通过LoadLibraryEx加载该DLL,此时会调用DllMain,且第二参数是DLL_PROCESS_ATTACH。
    1. 通过GetProcAddress获得指定的导出函数地址。
    1. 1 函数地址存在,传参并调用函数。
    1. 2 函数地址不存在,通过LoadStringW获得资源ID为400的字符串(“%s 出错\n丢失条目: %s”);然后格式化弹窗字符串
      在这里插入图片描述
    1. 点击确定后rundll32会通过FreeLibrary卸载该DLL。
    1. 最后rundll32通过ExitProcess结束自身进程。

编程实现

通过原理我们已经了解,编写一个dll,并导出一个函数即可通过rundll32.exe调用。
导出函数格式:void FuncName(HWND hWnd, HINSTANCE hInst, LPCSTR pCommand, DWORD nCmdShow);
示例代码如下:
代码地址为(https://gitcode.net/yemao/kernel-win/MyOpen)下的MyOpen\course\WinDriver\tools\tools\dllmain.cpp文件中。

extern "C"
{
    // CALLBACK
    __declspec(dllexport) void Foo(HWND hWindow, HINSTANCE hInstance, LPSTR lpszCommandLine, int nCmdShow)
    {
        if (strlen(lpszCommandLine) != 0)
        {
            ::MessageBoxA(hWindow, lpszCommandLine, "我是标题", MB_OK);
        }
        else
        {
            ::MessageBoxA(hWindow, "lpszCommandLine is NULL", "我是标题", MB_OK);
        }
    }
}

分别执行不带参命令和带参数命令,运行结果如下:
在这里插入图片描述

🛬 结论

Rundll32是Windows操作系统中非常有用的一个工具,它可以用来加载DLL文件中的函数,还可以用来修复Windows系统中的一些问题。
使用Rundll32可以帮助用户解决一些常见的Windows系统问题,提高计算机的稳定性和可靠性。
我们也可以自己编写dll,通过Rundll32调用,执行相关功能。

📖 参考资料

  • rundll32.exe和regsvr32.exe https://blog.csdn.net/qq_42814021/article/details/123736534
  • Rundll32.exe原理及使用, 参数传递问题解决方法(可用于批处理中) https://blog.csdn.net/guyue35/article/details/49404217
  • 打开控制面板DOS命令和RUNDLL32使用大全 https://blog.csdn.net/ycj911/article/details/6504596

ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。

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

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

相关文章

使用LoRA对大语言模型LLaMA做Fine-tune

使用LoRA对大语言模型LLaMA做Fine-tune 前言下载配置环境模型的训练 Fine-tune模型的使用 Inference参考 前言 目前有大量对LLM(大语言模型)做Fine-tune的方式,不过需要消耗的资源非常高,例如 Stanford Alpaca: 对LLaMA-7B做Fine-…

springboot + vue3实现视频播放Demo(video.js Vue3-video-play)

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

物联网GPRS模块流量计算

物联网GPRS模块流量计算 MQTT(消息队列遥测传输) 是ISO 标准下一个基于TCP/IP的消息发布/订阅传输协议。 一、TCP消耗流量计算 以太网数据包结构: 以太网首部 IP首部 TCP首部 APPL首部 用户数据 以太网尾部 以太网首部为14个字节 IP首部为20个字节 TCP首部…

阿里云对象oss

1\RAM 首页 https://ram.console.aliyun.com/overview 点击用户进去 点击里面的一个用户,然后新建 id 和secret 上面灰色按钮,因为我已经绑定了两个。 "yourAccessKeyId", "yourAccessKeySecret" 这两个参数就对应上了 // 阿里云账…

【详解Collection接口、迭代器和Colletions工具类】

🌠作者:TheMythWS. 🎆专栏:《集合与数据结构》 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 👀Collection接口的常用方法 💨…

java循环结构

文章目录 一、Java 循环结构 - for, while 及 do...while1、while 循环2、do…while 循环3、for循环4、break 关键字5、continue 关键字 总结 一、Java 循环结构 - for, while 及 do…while 顺序结构的程序语句只能被执行一次。 如果您想要同样的操作执行多次,就需…

企业bpm业务流程管理系统网站如何在外网访问?

企业在已有ERP系统的基础上去实施BPM业务流程管理系统,是非常有必要的。什么是BPM业务流程管理系统呢? BPM是英文BPM-Business Process Management的缩写,指的是通过对企业内部及外部业务流程的整个生命周期进行建模、自动化、管理监控和优化…

2023年6月18日DAMA-CDGA/CDGP认证北京/上海/深圳报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

[NOIP2004 普及组] FBI 树 递归解法

[NOIP2004 普及组] FBI 树 题目描述: 我们可以把由 0 和 1 组成的字符串分为三类:全 0 串称为 B 串,全 1 串称为 I 串,既含 0 又含 1 的串则称为 F 串。 FBI 树是一种二叉树,它的结点类型也包括 F 结点,B 结点和 I …

SpringMVC 学习笔记

SpringMVC 学习笔记 1、回顾MVC1.1、什么是MVC1.2、Model1时代1.3、Model2时代1.4、回顾Servlet 2、什么是SpringMVC2.1、概述2.2、中心控制器2.3、SpringMVC执行原理 【重要】 3、HelloSpring3.1、配置版3.2、注解版3.3、小结 4、Controller 及 RestFul4.1、Controller 控制器…

2.算法与数据结构

算法与数据结构 文章目录 算法与数据结构一、算法相关1、十大排序算法总结冒泡排序插入排序选择排序快速排序基数排序桶排序希尔排序归并排序堆排序 2、经典算法介绍递归算法回溯算法贪心算法深度优先遍历广度优先遍历动态规划算法 3、常见算法1、迪杰斯特拉(Dijkstra)算法介绍…

C++中的函数组合:用std::function实现编程艺术

C中的函数组合:用std::function实现编程艺术 1. 引言1.1 C中的函数式编程 (Functional Programming in C)1.2 函数组合的概念和价值 (Concept and Value of Function Composition)1.3 std::function概述 (Overview of std::function) 2. 如何在C中实现函数组合 (Imp…

【网络协议详解】——万维网WWW系统协议(学习笔记)

目录 🕒 1. 概述🕒 2. 文本传输协议HTTP🕒 3. HTTP的报文格式🕒 4. Cookie🕒 5. 万维网缓冲与代理服务器 🕒 1. 概述 万维网www(World Wide Web)并非某种特殊的计算机网络。它是一个…

两个iframe同时滚动实现界面内容对比功能

背景:因为要实现一个版本对比功能,所以要保证两个界面能同时滚动。(本文只讲同时滚动,对比功能文本只讲思路,具体代码实现如有需要 可以联系我),因为过程中有部分收获特此记录。 本文参考&…

Jetson硬件 升级jetpack系统 版本流程

前言: 准备一个linux系统电脑,一个跳线帽,以及一条usb线 以及英伟达开发者账号,点击https://developer.nvidia.com/zh-cn/embedded/jetpack进行注册 注意:烧录的目标硬件是以前装过低版本的jetpack,以下步…

工业自动化新引擎:工业机器人引领制造业转型升级

自2010年开始,我国15-64岁人口比例下滑,截至2022年我国总人数出现负增长,同比下滑0.1%,因人口老龄化加剧和出生率的持续走低,致使进入生产体系的劳动力越来越少。 随着我国经济进入新常态,制造业面临着产能…

通过训练NLP制作一个自己的简易输入法

最近开始研究NLP,然后根据手写CV UP主的视频,写了一个N Gram的NLP模型,算是该领域里的hello world吧。然后我又添加了几行代码实现了一个非常简易的输入法。 项目说明: 数据集可以自创,导入txt文件即可; …

K8s in Action 阅读笔记——【6】Volumes: attaching disk storage to containers

K8s in Action 阅读笔记——【6】Volumes: attaching disk storage to containers 在前三章中,我们介绍了Pods以及它们与ReplicationControllers、ReplicaSets、DaemonSets、Jobs和Services等Kubernetes资源的交互。现在,我们将回到Pod内部,…

【java 基础一】 纯语法基础记录

一、基础 1.1 变量 Java 变量是程序中存储数据的容器。 在 Java 中,变量需要先声明再使用,并且必须先声明再赋值。 声明变量:声明变量时需要指定变量的类型、名称和初始值。例如,声明一个整型变量可以如下所示: in…

水处理施工方案合集

编制说明及工程简介 (一) 编制说明 本施工组织设计是依据建设单位提供的招标文件、施工图、同类工程施工资料和国家有关施工规范及验收标准进行编制的。本施工组织设计针对本工程施工中的关键点、难点及其处理措施,主要施工方法,施工组织部署&#xff…