当前位置: 首页 > news >正文

第2章 cmd命令基础:执行动态链接库(rundll32)

Hi~ 我是李小咖,主要从事网络安全技术开发和研究。

本文取自《李小咖·网安技术库》,欢迎一起交流学习🫡:https://imbyter.com


rundll32命令是一个Windows命令行实用程序,用于运行动态链接库(DLL)文件,就像它们是可执行文件一样。这对于管理和配置Windows组件,启动应用程序以及执行系统维护等各种任务非常有用。


一、语法

rundll32命令的语法如下:

rundll32.exe <dllname>,<entrypoint> <可选参数>
  • dllname:包含要执行的函数的DLL文件的名称。可以是完整路径或位于Windows系统目录中的文件名。

  • entrypoint:要在DLL文件中执行的函数的名称。可以是数值或序数值,也可以是用引号括起来的字符串值。注意:如果是自己编写的函数,需要按照固定的格式编写,见下文。

  • optional arguments:DLL文件中的函数所需的任何参数。


二、执行系统自带功能

使用rundll32能够执行系统自带的一些功能,比如下面的命令能够快速打开指定的网站:

rundll32 url.dll,FileProtocolHandler https://bing.com
  • url.dll:系统自带的dll文件;

  • FileProtocolHandler:url.dll中的函数;

  • https://bing.com:传给函数FileProtocolHandler的参数。

如下命令可以快速打开“控制面板”:

runDll32.exe shell32.dll,Control_RunDLL

如下命令可锁定主机:

rundll32 user32.dll,LockWorkStation

通过rundll32命令还能对指定进程的内存进行dump:

rundll32.exe comsvcs.dll, MiniDump 14840 memory.dmp full
  • 其中14840是目标进程PID,可根据需要自行修改。

如下命令可用来启动应用程序(比如记事本):

rundll32.exe pcwutl.dll,LaunchApplication C:\Windows\System32\notepad.exe

其他可用的命令:

命令

含义

Rundll32.exe shell32.dll,Control_RunDLL

显示控制面板

RunDll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,0

添加删除程序

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8

删除IE浏览器等上网浏览历史

RunDll32.exe shell32.dll,Control_RunDLL timedate.cpl

调整日期和时间

RunDll32.exe shell32.dll,Control_RunDLL access.cpl,3

轻松使用设置中心

RunDll32.exe devmgr.dll DeviceManager_Execute

设备管理器

RunDll32.exe shell32.dll,Options_RunDLL 0

文件夹选项 - 常规

RunDll32.exe shell32.dll,Options_RunDLL 2

文件夹选项 - 搜索设置

RunDll32.exe shell32.dll,Options_RunDLL 7

文件夹选项 - 查看

RunDll32.exe keymgr.dll,PRShowSaveWizardExW

忘记密码向导

RunDll32.exe powrprof.dll,SetSuspendState

立即进入休眠状态

RunDll32.exe shell32.dll,Control_RunDLL main.cpl @1

键盘设置

Rundll32 User32.dll,SwapMouseButton

鼠标切换左右键

Rundll32 Shell32.dll,Control_RunDLL main.cpl @0,0

鼠标设置

Rundll32 Shell32.dll,SHHelpShortcuts_RunDLL Connect

映射网络驱动器

RunDll32.exe shell32.dll,Control_RunDLL ncpa.cpl

网络连接

Rundll32.exe shdocvw.dll,DoOrganizeFavDlg

管理IE收藏夹

Rundll32 Shell32.dll,OpenAs_RunDLL 文件名

直接打开某文件的对话框

Rundll32 Shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder

打印机管理

RunDll32.exe Shell32.dll,Control_RunDLL powercfg.cpl

电源设置

Rundll32 Shell32.dll,Control_RunDLL Intl.cpl,,0

地区和语言设置

RunDll32.exe keymgr.dll,KRShowKeyMgr

系统保存的密码管理

Rundll32 Shell32.dll,Control_RunDLL HotPlug.dll

安全移除硬件对话框

Rundll32 Shell32.dll,Control_RunDLL Sysdm.cpl,,3

系统属性对话框

Rundll32 Shell32.dll,Control_RunDLL Mmsys.cpl,,0

系统声音设置

RunDll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,4

系统属性 - 系统保护

RunDll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,5

系统属性 - 远程

RunDll32.exe shell32.dll,Options_RunDLL 1

任务栏属性

RunDll32.exe shell32.dll,Control_RunDLL nusrmgr.cpl

用户帐户管理

RunDll32.exe shell32.dll,Control_RunDLL wscui.cpl

控制面板 - 安全和维护

RunDll32.exe SHELL32.DLL,ShellAboutW

Windows - 关于

Rundll32 Shell32.dll,SHHelpShortcuts_RunDLL FontsFolder

Windows 字体安装文件夹

RunDll32.exe shell32.dll,Control_RunDLL firewall.cpl

Windows防火墙

Rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2

控制面板 - Windows功能

Rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3

应用 - 默认应用

Rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1

屏幕保护设置


三、执行自写DLL功能

使用rundll32可以执行我们自己编写的dll文件,但dll中的导出函数要遵循如下规则编写:

void CALLBACK EntryPoint( HWND hwnd,        // handle to owner windowHINSTANCE hinst,  // instance handle for the DLL  LPTSTR lpCmdLine, // string the DLL will parse  int nCmdShow      // show state
);
  • EntryPoint:导出函数名,可以任意指定;

  • hinst:dll的句柄文件;

  • lpCmdLine:传入dll的参数;

  • nCmdShow:窗口显示方式。

如下示例是一个标准的rundll32支持运行的dll模板:

#include "pch.h"
#include <windows.h>extern "C" __declspec(dllexport) void test1(HWND hwnd,        // handle to owner window   HINSTANCE hinst,  // instance handle for the DLL   LPSTR lpCmdLine, // string the DLL will parse   int nCmdShow      // show state   
)
{if (strlen(lpCmdLine) != 0){MessageBoxA(hwnd, lpCmdLine, "测试", MB_OK | MB_ICONINFORMATION);}else{MessageBoxA(NULL, "这是默认弹框内容", "测试", MB_OK | MB_ICONINFORMATION);}
}BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}

上述程序支持用rundll32执行,当传入参数时,弹框显示传入的参数。当没传入参数时,弹框显示“测试”。

用如下方式调用执行:

E:\>rundll32.exe demo.dll,test1 "测试传入的参数"

执行效果:


参考链接:

  • rundll32 | Microsoft Learn


http://www.dtcms.com/a/345076.html

相关文章:

  • 大视协作码垛机器人:定制圆形吸盘破解桶型码垛难题
  • HEVC(H.265)与HVC1的关系及区别
  • 【C初阶】数据在内存中的存储
  • 【LeetCode 热题 100】139. 单词拆分——(解法一)记忆化搜索
  • Vue 插槽(Slots)全解析1
  • 所做过的笔试真题
  • 阿里云RDS MySQL数据归档全攻略:方案选择指南
  • (LeetCode 面试经典 150 题) 124. 二叉树中的最大路径和 (深度优先搜索dfs)
  • 大麦盒子DM4036刷包推荐
  • 停车场道闸的常见形式
  • 【会议跟踪】Model-Based Systems Engineering (MBSE) in Practice 2025
  • 场景题:内存溢出 和 内存泄漏 有啥区别?
  • Python-UV
  • Android夜间模式切换及自定义夜间模式切换按钮实现快速适配夜间模式
  • LeetCode Hot 100 第一天
  • 《器件在EMC中的应用》---TVS在EMC中的应用
  • 中国大学MOOC--C语言第十一周结构类型
  • 开源版CRM客户关系管理系统源码包+搭建部署教程
  • 3D打印小批量低成本打印玩具工艺品模型-中科米堆CASAIM
  • MTK Linux DRM分析(十三)- Mediatek KMS实现mtk_drm_drv.c(Part.1)
  • 深入解析TCP/UDP协议与网络编程
  • LeetCode100-239滑动窗口最大值
  • 利用DeepSeek编写从xlsx数据源调用duckdb执行已保存的查询SQL语句,并把查询结果保存到xlsx文件的程序
  • 电机驱动实现插补算法之脉冲和方向接收(以stm32主控为例)
  • 飞算JavaAI开发助手: 新手开发任务管理系统实战流程
  • STM32G4-比较器
  • Autosar之Com模块
  • Redis面试精讲 Day 27:Redis 7.0/8.0新特性深度解析
  • 基于STM32+Python+MySQL实现在线温度计设计和制作
  • 【高等数学笔记-极限(4)】极限的运算法则