亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inject.c

?? 鍵盤鎖
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***********************************************************
 * Restore the subclassed remote process window procedure. *
 * Return: 0=failure, 1=success                            *
 ***********************************************************/

#pragma optimize("", off)
#pragma check_stack(off)

static DWORD WINAPI EjectFunc (INJDATA *pData) 
{
	return (pData->fnSetWindowLong(pData->hwnd, GWL_WNDPROC, (long)pData->fnOldSASWndProc) != 0);
}


static int AfterEjectFunc(void) {return 3;}



/**************************************************************
 * Return the window handle of the remote process (Winlogon). *
 **************************************************************/

#pragma optimize("", off)
#pragma check_stack(off)

static HWND WINAPI GetSASWnd (INJDATA *pData) 
{
	return (pData->fnFindWindow(pData->szClassName, pData->szWindowName));
}


static int AfterGetSASWnd(void) {return 4;}



/***************************************************************************
 * Copies InjectFunc(), GetSASWnd() , SASWindowProc() and INJDATA to the   *
 * remote process.                                                         *
 * Starts the execution of the remote InjectFunc(), which subclasses the   *
 * remote process default window procedure handler.                        *
 *                                                                         *
 * Return value: 0=failure, 1=success                                      *
 ***************************************************************************/

int InjectCode ()
{
	HANDLE		hProcess = 0;			// Process handle
	HMODULE		hUser32  = 0;			// Handle of user32.dll
	BYTE		*pCodeRemote;			// Address of InjectFunc() in the remote process.
	BYTE		*pGetSASWndRemote;		// Address of GetSASWnd() in the remote process.
	HANDLE		hThread	= 0;			// The handle and ID of the thread executing
	DWORD		dwThreadId = 0;			//   the remote InjectFunc().
	INJDATA		DataLocal;				// INJDATA structure
	BOOL		fUnicode;				// TRUE if remote process is Unicode
	int			nSuccess = 0;			// Subclassing succeded?
	DWORD		dwNumBytesCopied = 0;	// Number of bytes written to the remote process.
	DWORD		size;					// Calculated function size (= AfterFunc() - Func())
	int			SearchSize;				// SASWindowProc() dummy addr. search size
	int			nDummyOffset;			// Offset in SASWindowProc() of dummy addr.
	BOOL		FoundDummyAddr;			// Dummy INJDATA reference found in SASWindowProc() ?
	HWND		hSASWnd;				// Window handle of Winlogon process
	BYTE		*p;

	// Enable Debug privilege (needed for some processes)
    if (!EnablePrivilege(SE_DEBUG_NAME, TRUE))
		return 0;

	// Get handle of "USER32.DLL"
	hUser32 = GetModuleHandle("user32");
	if (!hUser32)
		return 0;

	// Get remote process ID
    PID = GetPIDFromName(szProcessName);
    if (PID == -1)
		return 0;

	// Open remote process
	hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
	if (!hProcess)
		return 0;

	__try 
	{
		// Initialize INJDATA for GetSASWnd() call
		strcpy(DataLocal.szClassName, "SAS Window class");
		strcpy(DataLocal.szWindowName, "SAS window");
		DataLocal.fnFindWindow = (FINDWINDOW) GetProcAddress(hUser32, "FindWindowA");
		if (DataLocal.fnFindWindow == NULL)
			__leave;

		// Allocate memory in the remote process and write a copy of initialized INJDATA into it
		size = sizeof(INJDATA);
		pDataRemote = (PBYTE) VirtualAllocEx(hProcess, 0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);		
		if (!pDataRemote)
			__leave;
		if (!WriteProcessMemory(hProcess, pDataRemote, &DataLocal, size, &dwNumBytesCopied) || dwNumBytesCopied != size)
			__leave;

		// Allocate memory in remote process and write a copy of GetSASWnd() into it
		size = (PBYTE)AfterGetSASWnd - (PBYTE)GetSASWnd;
		pGetSASWndRemote = (PBYTE) VirtualAllocEx(hProcess, 0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);		
		if (!pGetSASWndRemote)
			__leave;
		if (!WriteProcessMemory(hProcess, pGetSASWndRemote, &GetSASWnd, size, &dwNumBytesCopied) || dwNumBytesCopied != size)
			__leave;
		
		// Start execution of remote GetSASWnd()
		hThread = CreateRemoteThread(hProcess, 
									 NULL, 
									 0, 
									 (LPTHREAD_START_ROUTINE) pGetSASWndRemote,
									 pDataRemote, 
									 0 , 
									 &dwThreadId);
		// Failed
		if (!hThread)
			__leave;

		// Wait for GetSASWnd() to terminate and get return code (SAS Wnd handle)
		WaitForSingleObject(hThread, INFINITE);
		GetExitCodeThread(hThread, (PDWORD) &hSASWnd);

		// Didn't found "SAS window"
		if (!hSASWnd)
			__leave;

		// Cleanup
		VirtualFreeEx(hProcess, pGetSASWndRemote, 0, MEM_RELEASE);
		VirtualFreeEx(hProcess, pDataRemote, 0, MEM_RELEASE);
		pGetSASWndRemote = NULL;
		pDataRemote = NULL;
		
		// Allocate memory in remote process and write a copy of SASWindowProc() into it
		size = (PBYTE)AfterSASWindowProc - (PBYTE)SASWindowProc;
		pSASWinProcRemote = (PBYTE) VirtualAllocEx(hProcess, 0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);		
		if (!pSASWinProcRemote)
			__leave;
		if (!WriteProcessMemory(hProcess, pSASWinProcRemote, &SASWindowProc, size, &dwNumBytesCopied) || dwNumBytesCopied != size)
			__leave;

		// Is remote process unicode ?
		fUnicode = IsWindowUnicode(hSASWnd);

		// Initialize the INJDATA structure
		DataLocal.fnSetWindowLong = (SETWINDOWLONG)  GetProcAddress(hUser32, fUnicode ? "SetWindowLongW" : "SetWindowLongA");
		DataLocal.fnCallWindowProc = (CALLWINDOWPROC) GetProcAddress(hUser32, fUnicode ? "CallWindowProcW": "CallWindowProcA");
		DataLocal.fnSASWndProc = (WNDPROC) pSASWinProcRemote;
		DataLocal.hwnd = hSASWnd;

		if (DataLocal.fnSetWindowLong  == NULL || 			
			DataLocal.fnCallWindowProc == NULL)
		{
			__leave;		
		}

		// Allocate memory in the remote process and write a copy of initialized INJDATA into it
		size = sizeof(INJDATA);
		pDataRemote = (PBYTE) VirtualAllocEx(hProcess, 0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);		
		if (!pDataRemote)
			__leave;
		if (!WriteProcessMemory(hProcess, pDataRemote, &DataLocal, size, &dwNumBytesCopied) || dwNumBytesCopied != size)
			__leave;

		// Change dummy INJDATA address in SASWindowProc() by the real INJDATA pointer
		p = (PBYTE)&SASWindowProc;
		size = (PBYTE)AfterSASWindowProc - (PBYTE)SASWindowProc;
		SearchSize = size - sizeof(DWORD) + 1;
		FoundDummyAddr = FALSE;

		for (; SearchSize > 0; p++, SearchSize--)
		{
			if (*(DWORD *)p == DUMMY_ADDR)	// Found 
			{
				nDummyOffset = p - (PBYTE)&SASWindowProc; 
				if (!WriteProcessMemory(hProcess, pSASWinProcRemote + nDummyOffset, &pDataRemote, sizeof(pDataRemote), &dwNumBytesCopied) ||
					dwNumBytesCopied != sizeof(pDataRemote))
				{
					__leave;
				}
				FoundDummyAddr = TRUE;
				break;
			}
		}

		// Couldn't change the dummy INJDATA addr. by the real addr. in SASWindowProc() !?!
		// Don't execute the remote copy of SASWindowProc() because the pData pointer is invalid !
		if (!FoundDummyAddr)
		{
			__leave;
		}

		// Allocate memory in the remote process and write a copy of InjectFunc() to the allocated memory
		size = (PBYTE)AfterInjectFunc - (PBYTE)InjectFunc;
		pCodeRemote = (PBYTE) VirtualAllocEx(hProcess, 0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
		if (!pCodeRemote)
			__leave;
		if (!WriteProcessMemory(hProcess, pCodeRemote, &InjectFunc, size, &dwNumBytesCopied) || dwNumBytesCopied != size)
			__leave;

		// Start execution of remote InjectFunc()
		hThread = CreateRemoteThread(hProcess, 
									 NULL, 
									 0, 
									 (LPTHREAD_START_ROUTINE) pCodeRemote,
									 pDataRemote, 
									 0 , 
									 &dwThreadId);
		if (!hThread)
			__leave;

		// Wait for InjectFunc() to terminate and get return code
		WaitForSingleObject(hThread, INFINITE);
		GetExitCodeThread(hThread, (PDWORD) &nSuccess);

		// InjectFunc() successfull
//		if (nSuccess)
//			MessageBeep(0);
	}

	__finally 
	{
		// Failed ?
		if (!nSuccess)
		{
			// Release memory for INJDATA and SASWindowProc()
			if (pDataRemote)
				VirtualFreeEx(hProcess, pDataRemote, 0, MEM_RELEASE);
			if (pSASWinProcRemote)
				VirtualFreeEx(hProcess, pSASWinProcRemote, 0, MEM_RELEASE);
			pDataRemote = NULL;
			pSASWinProcRemote = NULL;
		}

		// Release remote GetSASWnd()
		if (pGetSASWndRemote)	
			VirtualFreeEx(hProcess, pGetSASWndRemote, 0, MEM_RELEASE);

		// Release remote InjectFunc() (no longer needed)
		if (pCodeRemote)	
			VirtualFreeEx(hProcess, pCodeRemote, 0, MEM_RELEASE);

		if (hThread)			
			CloseHandle(hThread);

	}

	CloseHandle(hProcess);

	// Disable the DEBUG privilege
	EnablePrivilege(SE_DEBUG_NAME, FALSE);

	return nSuccess;	// 0=failure; 1=success
}


/**********************************************************************
 * Copies EjectFunc() to the remote process and starts its execution. *
 * The remote EjectFunc() restores the old window procedure.          *
 *                                                                    *
 *	Return value: 0=failure, 1=success                                *
 **********************************************************************/

int EjectCode ()
{
	HANDLE		hProcess;				// Remote process handle
	DWORD		*pCodeRemote;			// Address of EjectFunc() in the remote process
	HANDLE		hThread = NULL;			// The handle and ID of the thread executing
	DWORD		dwThreadId = 0;			//   the remote EjectFunc().
	int			nSuccess	= 0;		// EjectFunc() success ?
	DWORD		dwNumBytesCopied = 0;	// Number of bytes written to the remote process. 
	DWORD		size;					// Calculated function size (= AfterFunc() - Func())

	// Enable Debug privilege (needed for some processes)
	EnablePrivilege(SE_DEBUG_NAME, TRUE);

	// Remote INDATA and SASWindowProc() must exist 
	if (!pDataRemote || !pSASWinProcRemote)
		return 0;

	// Open the process
	hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
	if (hProcess == NULL)
		return 0;

	// Allocate memory in the remote process and write a copy of EjectFunc() to the allocated memory
	size = (PBYTE)AfterEjectFunc - (PBYTE)EjectFunc;
	pCodeRemote = (PDWORD) VirtualAllocEx(hProcess, 0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	if (!pCodeRemote)
	{
		CloseHandle(hProcess);
		return 0;
	}
	if (!WriteProcessMemory(hProcess, pCodeRemote, &EjectFunc, size, &dwNumBytesCopied) || dwNumBytesCopied != size)
	{
		VirtualFreeEx(hProcess, pCodeRemote, 0, MEM_RELEASE);
		CloseHandle(hProcess);
		return 0;
	}

	// Start execution of the remote EjectFunc()
	hThread = CreateRemoteThread(hProcess, 
								 NULL, 
								 0, 
								 (LPTHREAD_START_ROUTINE) pCodeRemote,
								 pDataRemote, 
								 0 , 
								 &dwThreadId);
	// Failed
	if (!hThread)
	{
		goto END;
	}

	// Wait for EjectFunc() to terminate and get return code
	WaitForSingleObject(hThread, INFINITE);	
	GetExitCodeThread(hThread, (PDWORD) &nSuccess);	

	// Failed to restore old window procedure ?
	// Then leave INJDATA and the SASWindowProc()
	if (nSuccess == 0)		
		goto END;			
							
	// Release memory for remote INJDATA and SASWindowProc()
	if (pDataRemote)
		VirtualFreeEx(hProcess, pDataRemote, 0, MEM_RELEASE);
	if (pSASWinProcRemote)
		VirtualFreeEx(hProcess, pSASWinProcRemote, 0, MEM_RELEASE);
	pDataRemote = NULL;
	pSASWinProcRemote = NULL;

//	MessageBeep(0);		// success

END:		
	if (hThread)
		CloseHandle(hThread);

	// Release EjectFunc() memory
	if (pCodeRemote)
		VirtualFreeEx(hProcess, pCodeRemote, 0, MEM_RELEASE);

	CloseHandle(hProcess);

	// Disable the DEBUG privilege
	EnablePrivilege(SE_DEBUG_NAME, FALSE);

	return nSuccess;	// 0=failure; 1=success
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕中文字幕在线一区 | 国产精品毛片高清在线完整版| 日韩精品一级二级| 欧美久久久久久蜜桃| 天堂蜜桃一区二区三区| 9191精品国产综合久久久久久| 日韩精品每日更新| 精品欧美一区二区久久| 国产成人午夜精品5599| 17c精品麻豆一区二区免费| 在线视频国产一区| 日本在线播放一区二区三区| 久久综合一区二区| 91丨九色丨黑人外教| 亚洲一区二区三区四区在线免费观看| 欧美日韩午夜在线| 国产综合久久久久影院| 国产精品美女久久久久久| 久久新电视剧免费观看| 男女性色大片免费观看一区二区 | 中文字幕一区二区三区在线观看| 中文字幕不卡在线| 亚洲精品福利视频网站| 午夜欧美视频在线观看| 国产一区欧美一区| 91视频观看视频| 91精品国产综合久久香蕉麻豆 | 色先锋资源久久综合| 欧美麻豆精品久久久久久| 日韩免费一区二区三区在线播放| 国产清纯白嫩初高生在线观看91| 亚洲综合无码一区二区| 国产一区免费电影| 99riav一区二区三区| 日韩一卡二卡三卡| 亚洲六月丁香色婷婷综合久久| 三级亚洲高清视频| 99久精品国产| 日韩精品一区二区三区三区免费| 亚洲三级在线看| 极品瑜伽女神91| 99久久99久久精品免费看蜜桃| 91精品国产麻豆| 亚洲理论在线观看| 国产成人av自拍| 51久久夜色精品国产麻豆| 国产精品久久久久久亚洲伦| 欧美aⅴ一区二区三区视频| 波多野洁衣一区| 精品国产一区二区三区av性色| 亚洲免费色视频| 大胆亚洲人体视频| 精品人在线二区三区| 亚洲国产精品久久人人爱| 风间由美一区二区三区在线观看| 日韩视频一区在线观看| 夜夜嗨av一区二区三区四季av | 欧美三级午夜理伦三级中视频| 亚洲国产成人在线| 国产美女一区二区| 日韩欧美在线一区二区三区| 图片区日韩欧美亚洲| 欧美一a一片一级一片| 亚洲三级电影全部在线观看高清| 国产精品123区| 久久综合九色综合97_久久久| 毛片av一区二区三区| 欧美高清一级片在线| 亚洲国产另类av| 在线观看亚洲精品| 亚洲激情男女视频| 欧美主播一区二区三区美女| 亚洲夂夂婷婷色拍ww47| 91国在线观看| 亚洲午夜久久久久中文字幕久| 在线一区二区三区四区五区| 亚洲男同1069视频| 日本精品裸体写真集在线观看| 亚洲视频资源在线| 欧美亚洲日本一区| 午夜精品一区二区三区电影天堂 | 久久天天做天天爱综合色| 久久国产生活片100| 欧美精品一区二区三区一线天视频| 日本午夜精品一区二区三区电影| 日韩一区二区三区视频| 激情都市一区二区| 国产精品美日韩| 在线观看视频一区二区欧美日韩| 亚洲一区二区三区四区在线观看| 欧美日韩精品欧美日韩精品一 | 欧美乱熟臀69xxxxxx| 舔着乳尖日韩一区| 欧美大尺度电影在线| 国产综合一区二区| 18涩涩午夜精品.www| 欧美色精品在线视频| 免费观看30秒视频久久| 国产亚洲精品7777| 色先锋资源久久综合| 青青草国产精品97视觉盛宴| 久久久久成人黄色影片| 99久久99久久综合| 青青草伊人久久| 国产精品视频免费看| 欧美日韩成人在线| 懂色av一区二区三区免费看| 亚洲精品videosex极品| 欧美成人一级视频| 日本精品视频一区二区三区| 久久国产精品色婷婷| 亚洲美腿欧美偷拍| 精品国产电影一区二区| 91网址在线看| 国产一区二区在线观看视频| 亚洲自拍偷拍网站| 久久久精品国产免大香伊| 91福利区一区二区三区| 国产风韵犹存在线视精品| 亚洲成精国产精品女| 日韩一区有码在线| 精品国产91乱码一区二区三区| 色视频欧美一区二区三区| 韩国女主播一区| 亚洲成av人片在www色猫咪| 国产精品国产三级国产三级人妇| 在线综合+亚洲+欧美中文字幕| 99久久久无码国产精品| 国模一区二区三区白浆| 日韩国产欧美三级| 亚洲午夜久久久久久久久久久| 日本一区二区动态图| 久久尤物电影视频在线观看| 欧美一区二区三区白人| 欧美在线不卡一区| 99re成人精品视频| 成人在线视频首页| 国产丶欧美丶日本不卡视频| 久久国产婷婷国产香蕉| 热久久久久久久| 亚洲成人免费看| 一区二区三区91| 亚洲激情在线播放| 一二三四社区欧美黄| 一区二区视频在线| 亚洲色图在线播放| 亚洲丝袜美腿综合| 亚洲美女电影在线| 亚洲精品日韩一| 亚洲免费看黄网站| 亚洲一区二区中文在线| 一级中文字幕一区二区| 一区二区三区日韩精品视频| 一区二区三区在线免费播放| 一区二区三区中文字幕| 亚洲影视在线观看| 婷婷国产在线综合| 免费在线观看一区二区三区| 蜜桃视频在线观看一区| 精品一区二区在线免费观看| 狠狠色丁香久久婷婷综合丁香| 黄色成人免费在线| 成人午夜视频福利| 色婷婷精品久久二区二区蜜臀av | 国产精品久久久久影院亚瑟 | 喷白浆一区二区| 麻豆国产精品一区二区三区 | 精品污污网站免费看| 4438x亚洲最大成人网| 欧美一区二区成人6969| 久久综合国产精品| 亚洲欧洲三级电影| 亚洲综合色自拍一区| 男女男精品网站| 成人综合激情网| 欧美三级韩国三级日本三斤 | 99视频热这里只有精品免费| 一本一本大道香蕉久在线精品 | 麻豆91在线播放免费| 精品一区二区三区免费观看| 成人开心网精品视频| 在线精品亚洲一区二区不卡| 91精品福利在线一区二区三区| 国产欧美一区二区在线| 最新中文字幕一区二区三区| 午夜在线成人av| 国产经典欧美精品| 欧美性高清videossexo| 久久免费美女视频| 一区二区三区 在线观看视频| 狠狠色伊人亚洲综合成人| 色偷偷88欧美精品久久久| 精品卡一卡二卡三卡四在线| 亚洲摸摸操操av| 国产老妇另类xxxxx| 91浏览器在线视频| 久久亚洲捆绑美女| 日韩精品一级中文字幕精品视频免费观看| 国产精品一区二区久久不卡| 欧美日韩中文精品|