1. 程式人生 > >基於VC++實現APC注入

基於VC++實現APC注入

請見程式碼,向指定程序插入鉤子

#include "stdafx.h"


#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <TlHelp32.h>

#include <iostream>
#include <string>
using namespace std;

#define DEF_BUF_SIZE 1024

// 用於儲存注入模組DLL的路徑全名
char szDllPath[DEF_BUF_SIZE] = {0} ;

// 使用APC機制向指定ID的程序注入模組
BOOL InjectModuleToProcessById ( DWORD dwProcessId )
{
	DWORD	dwRet = 0 ;
	BOOL	bStatus = FALSE ;
	LPVOID	lpData = NULL ;
	UINT	uLen = strlen(szDllPath) + 1;
	// 開啟目標程序
	HANDLE hProcess = OpenProcess ( PROCESS_ALL_ACCESS, FALSE, dwProcessId ) ;
	if ( hProcess )
	{
		// 分配空間
		lpData = VirtualAllocEx ( hProcess, NULL, uLen, MEM_COMMIT, PAGE_EXECUTE_READWRITE ) ;
		if ( lpData )
		{
			// 寫入需要注入的模組路徑全名
			bStatus = WriteProcessMemory ( hProcess, lpData, szDllPath, uLen, &dwRet ) ;
		}
		CloseHandle ( hProcess ) ;
	}

	if ( bStatus == FALSE )
		return FALSE ;

	// 建立執行緒快照
	THREADENTRY32 te32 = { sizeof(THREADENTRY32) } ;
	HANDLE hThreadSnap = CreateToolhelp32Snapshot ( TH32CS_SNAPTHREAD, 0 ) ;
	if ( hThreadSnap == INVALID_HANDLE_VALUE ) 
		return FALSE ; 

	bStatus = FALSE ;
	// 列舉所有執行緒
	if ( Thread32First ( hThreadSnap, &te32 ) )
	{
		do{
			// 判斷是否目標程序中的執行緒
			if ( te32.th32OwnerProcessID == dwProcessId )
			{
				// 開啟執行緒
				HANDLE hThread = OpenThread ( THREAD_ALL_ACCESS, FALSE, te32.th32ThreadID ) ;
				if ( hThread )
				{
					// 向指定執行緒新增APC
					DWORD dwRet = QueueUserAPC ( (PAPCFUNC)LoadLibraryA, hThread, (ULONG_PTR)lpData ) ;
					if ( dwRet > 0 )
						bStatus = TRUE ;
					CloseHandle ( hThread ) ;
				}
			} 

		}while ( Thread32Next ( hThreadSnap, &te32 ) ) ;
	}

	CloseHandle ( hThreadSnap ) ;
	return bStatus;
}

int _tmain(int argc, _TCHAR* argv[])
{
	// 取得當前工作目錄路徑
	GetCurrentDirectoryA ( DEF_BUF_SIZE, szDllPath ) ;

	// 生成注入模組DLL的路徑全名
	strcat ( szDllPath, "\\DLLSample.dll" ) ;

	DWORD dwProcessId = 0 ;
	// 接收使用者輸入的目標程序ID
	while ( cout << "請輸入目標程序ID:" && cin >> dwProcessId && dwProcessId > 0 ) 
	{
		BOOL bRet = InjectModuleToProcessById ( dwProcessId ) ;
		cout << (bRet ? "注入成功!":"注入失敗!") << endl ;
	}
	return 0;
}

相關推薦

基於VC++實現APC注入

請見程式碼,向指定程序插入鉤子#include "stdafx.h" #define _WIN32_WINNT 0x0400 #include <windows.h> #include

[原始碼和文件分享]基於VC++實現的支援視訊和圖片的車牌定位與識別系統

1 引言 在建設平安城市的程序中,安全是政府日常管理工作中的重要任務。隨著城市報警和監控系統的建設,對於監控資料的分析也日顯重要。 目前需要對重點街道或路口採集的視訊資料進行分析,主要包括兩點: 對於視訊中過往機動車輛的機動車牌提取出來,生成截圖圖片; 對提取的圖片中機

VC++實現DLL注入

所謂DLL注入就是將一個DLL放進某個程序的地址空間裡,讓它成為那個程序的一部分。要實現DLL注入,首先需要開啟目標程序。   hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD | //允許遠端建立執行緒   PROCES

在net Core3.1上基於winform實現依賴注入例項

目錄 在net Core3.1上基於winform實現依賴注入例項 1.背景 2.依賴注入 2.1依賴注入是什麼? 2.1依賴注入的目的 2.2依賴注入帶來的好處

[Go]基於GoProxy實現HTTP代理,攔截智慧樹注入JS實現自動刷課

這幾天各種網課都快截至了,鄙人也是被逼得煩的不行 雖然網上有刷課的瀏覽器,但是每次換個地方就得重新拷貝一邊 所以就想能不能寫一個HTTP代理,丟在伺服器上,自己不管到哪裡,設定上代理就能刷課 從本質來說其實都是注入JS,跟瀏覽器相比換個注入方式而已 既然要寫HTTP代理,第一時間就想到了大名鼎鼎的Go

基於VC++的人臉美化的實現實踐篇(含程式碼)

作者:張皓霖 上海電力學院 課程老師:秦倫明 上篇我將人臉美化的過程列出來了,這篇我是用VS2012(VC++)+MFC+OpenCv 將這些功能實現。 實驗目的 利用VC++實現人臉美化軟體,要求: 1、具有人臉美化介面; 2、具有磨皮功能,引數可調; 3、具有

基於VC++2010實現雜湊簽名與驗證

                數字簽名即如何給一個計算機檔案進行簽字。數字簽字可以用對稱演算法實現,也可以用公鑰演算法實現。但前者除了檔案簽字者和檔案接受者雙方,還需要第三方認證,較麻煩;通過公鑰加密演算法的實現方法,由於用祕密金鑰加密的檔案,需要靠公開金鑰來解密,因此這可以作為數字簽名,簽名者用祕密金鑰加

[原始碼和文件分享]VC++實現基於人眼狀態的疲勞駕駛識別系統

一、文件說明 文件主要對專案的程式進行說明和描述程式的思想。 程式的功能 程式的思想 程式的原始碼 注意之處(程式中比較難理解,比較特殊的地方) 待改進之處(能使得效果更好的地方) 二、程式內容 1. main()函式

最簡單的基於VC的日誌檔案類庫實現

- if(strPath.Find(_T(":"))<=0)  {  strPath.Format(_T("%s\\%s"), GetExePath(FALSE), strCurFileName);  }  }  return strPath;  }  #define LOG_EVENT _T("Chy

APC 基本概念及APC注入實現(Ring3 + Ring0)----概念介紹

APC 基本概念及APC注入的實現(Ring3 + Ring0)—-概念介紹 基本術語 中斷—-一個非同步事件,可能在任何時候發生,與處理器當前正在執行的程式碼無任何關係。—-中斷的產生主要有:I/O 裝置、處理器始終,或者定時器,另外,

基於VC++2010實現截獲Windows 7密碼

Windows外殼,安裝Windows密碼截獲器 void dey()//解密 { printf("/r/n請不要移動原密碼檔案!"); system("pause"); char buffer[100

基於VC++2010實現哈希簽名與驗證

內存空間 嚴格 選擇 efi idea amp ont 責任 實的 分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net 數字簽名即如何給一個計算機文

VC++基於winpcap實現數據包分析

number 存取 mask clas net war ESS defined 返回 分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net winpc

Asp.net基於session實現購物車的方法

lai 程序 clas contain ext info border mode man 本文實例講述了asp.net基於session實現購物車的方法。分享給大家供大家參考,具體如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1

基於JQuery實現表單元素值的回寫

spl sel || etc oos min javascrip odi tar form.jsp: <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <!DO

Canny邊緣檢測算法原理及其VC實現詳解(一)

常用 差分 實現圖 還需要 鏈接 傳感器 出了 關系 位置 轉自:http://blog.csdn.net/likezhaobin/article/details/6892176 圖象的邊緣是指圖象局部區域亮度變化顯著的部分,該區域的灰度剖面一般可以看作是一個階躍,既從

基於servlet實現一個web框架

-i writer pattern mic mar ems hack dem 包括 servlet作為一個web規範。其本身就算做一個web開發框架,可是其web action (響應某個URI的實現)的實現都是基於類的,不是非常方便,而且3.0之前的版本號還必須通過

Android實戰簡易教程-第二十六槍(基於ViewPager實現微信頁面切換效果)

stat addview data android tid des viewpage 聊天 == 1.頭部布局文件top.xml:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

SSH——基於datagrid實現分頁查詢

sel 雙擊 datagrid auto roman .... img order 信息 1. 修改頁面中datagrid的URL地址,訪問action // 取派員信息表格 $(‘#grid‘).datagrid( {

基於C#實現的自動化測試框架:發布自動觸發自動化回歸測試

exc 時間流 測試用例 出現 服務器 text types filter txt 接口自動化測試用例完成以後,以前都是發布以後手動運行測試用例。雖然手動運行下腳本也就是一個F5的事情,但是離自動化測試的標準差得很遠。這兩天有了個大膽的想法,想要實現以下發布時直接觸發自動化