1. 程式人生 > >MFC hook注入dll,遠端執行緒注入dll

MFC hook注入dll,遠端執行緒注入dll

[cpp] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. #include "stdafx.h"
  2. #include <atlstr.h>
  3. //很多人在vs2010找不到dllmain的檔案,都倍封裝好了,其實就在新建專案--win32--win32專案完後選擇dll
[cpp] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. #define  WM_HOOKDLL WM_USER+2013
  2. #pragma data_seg(".Share")  
  3. HWND g_hMainWnd=NULL;//主視窗控制代碼;  
  4. HHOOK
     hhkHook=NULL; //滑鼠鉤子控制代碼;  
  5. HINSTANCE hInstDll=NULL;//本dll例項控制代碼; 
  6. DWORD g_dwHookPid=-1;//要HOOK的程序的PID
  7. BOOL g_bIsFirstLoad=TRUE;//判斷是否是第一次載入本dll
  8. #pragma data_seg()  
  9. #pragma comment(linker, "/section:.Share,rws") 
  10. struct ProcessWindow    
  11. {    
  12.     DWORD dwProcessId;    
  13.     HWND hwndWindow;    
  14.     DWORD
     dwThreadID;  
  15. };    
  16. BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam) ;  
  17. BOOL CheckPid()  
  18. {  
  19.     if (g_bIsFirstLoad)  
  20.     {  
  21.         return TRUE;//這裡第一次直接返回不執行下面的,當starthook執行後 吧這個dll載入到別的指定程序中  又會再一次執行下面的不執行這裡了  因為已經true了
  22.     }  
  23.     DWORD pid=GetCurrentProcessId();  
  24.     if
     (pid==g_dwHookPid)  
  25.     {  
  26.         return TRUE;  
  27.     }   
  28.     else
  29.     {  
  30.         return FALSE;  
  31.     }  
  32. }  
  33. //滑鼠鉤子過程,目的是載入本dll到使用滑鼠的程式  
  34. //滑鼠鉤子的作用:當滑鼠在某程式視窗中時,其就會載入我們這個dll  
  35. LRESULT CALLBACK MouseProc(    
  36.     int nCode,      // hook code  
  37.     WPARAM wParam,  // message identifier  
  38.     LPARAM lParam   // mouse coordinates  
  39.     )    
  40. {    
  41.     return CallNextHookEx(hhkHook,nCode,wParam,lParam);    
  42. }    
  43. //安裝鉤子  
  44. BOOL WINAPI StartHook(HWND hWnd,DWORD dwPid)    
  45. {    
  46.     g_hMainWnd=hWnd;  //儲存主視窗控制代碼
  47.     //g_dwHookPid=dwPid;//要HOOK的程序的PID
  48.     /*hhkHook=::SetWindowsHookEx(WH_MOUSE,MouseProc,hInstDll,0);   
  49.     if (hhkHook==NULL)   
  50.     {   
  51.         CString err; 
  52.         err.Format(_T("設定鉤子失敗 error code=%d"),GetLastError()); 
  53.         MessageBox(g_hMainWnd,err.GetString(),L"err",0); 
  54.         return FALSE;   
  55.     }    
  56.     else   
  57.     {   
  58.         return TRUE;   
  59.     }  */
  60.     ProcessWindow procwin;    
  61.     procwin.dwProcessId = dwPid;   
  62.      procwin.hwndWindow = NULL;   
  63.      procwin.dwThreadID = NULL;  
  64.      EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);   
  65.     g_dwHookPid = procwin.dwThreadID;  
  66.     if(g_dwHookPid == NULL)  
  67.     {  
  68.         CString err;  
  69.         err.Format(_T("設定鉤子失敗 error code=%d"),GetLastError());  
  70.         MessageBox(g_hMainWnd,err.GetString(),L"err",0);  
  71.         return FALSE;  
  72.     }  
  73.     else
  74.         return TRUE;  
  75. }    
  76. BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam)    
  77. {    
  78.     ProcessWindow *pProcessWindow = (ProcessWindow *)lParam;    
  79.     DWORD dwProcessId;    
  80.     GetWindowThreadProcessId(hWnd, &dwProcessId);    
  81.     // 判斷是否是指定程序的主視窗  
  82.     if (pProcessWindow->dwProcessId == dwProcessId && IsWindowVisible(hWnd) && GetParent(hWnd) == NULL)    
  83.     {    
  84.         DWORD proId;  
  85.         pProcessWindow->hwndWindow = hWnd;    
  86.         pProcessWindow->dwThreadID = GetWindowThreadProcessId(hWnd,&proId);  
  87.         return FALSE;    
  88.     }    
  89.     return TRUE;    
  90. }    
  91. //解除安裝鉤子  
  92. VOID WINAPI StopHook()    
  93. {    
  94.     //HookOff();//記得恢復原API入口哈  
  95.     //主程式呼叫該函式時,恢復的只是主程式原API的入口,  
  96.     //其它程式的API入口還沒有被恢復,所以我們必須處理  
  97.     //dll退出過程,即在函式ExitInstance()中,呼叫恢復  
  98.     //API入口的函式HookOff(),只有這樣,其它程式再次呼叫  
  99.     //原API時,才不會發生錯誤喔。  
  100.     //當我們HOOK所有程式的某個系統API時,千萬要注意在  
  101.     //ExitInstance()中呼叫HookOff(),血的教訓哈。  
  102. 相關推薦

    MFC hook注入dll遠端執行注入dll

    [cpp] view plain copy  print? #include "stdafx.h" #include <atlstr.h> //很

    安全之路 —— 藉助DLL進行遠端執行注入實現穿牆與隱藏程序

    簡介        大多數後門或病毒要想初步實現隱藏程序,即不被像工作管理員這樣典型的RING3級程序管理器找到過於明顯的不明程序,其中比較著名的方法就是通過遠端執行緒注入的方法注入將惡意程序的DLL檔案注入系統認可的正常程序,你會發現工作管理員以及找不

    遠端執行注入RemoteThread(dll)

    // RemoteInject.h #pragma once // RemoteInject 對話方塊 class RemoteInject : public CDialogEx { DECLARE_DYNAMIC(RemoteInject) public: RemoteInject(

    建立遠端執行注入Dll——CreateRemoteThread

    CreateRemoteThread是建立一個在其他程序的地址空間中執行的執行緒(也稱遠端執行緒)。其函式原型為:HANDLE WINAPI CreateRemoteThread( __in HANDLE hProcess, __in LPSECURITY_ATTRIBUTE

    奇技淫巧之除錯被遠端執行注入DLL

    遠端執行緒注入, 這東西大家都懂的, 一般都被大家用來幹些小小的壞事情,比如API Hook~~將DLL注入到其它程序並不是難事,問題是這個被注入的DLL不太好除錯,除錯DLL本來就是個比較頭疼的問題,更何況是這種執行在其它程序空間的DLL, 被注入DLL的程式,不崩潰還好

    詳細解讀:遠端執行注入DLL到PC版微信

    一、遠端執行緒注入的原理   1、其基礎是在 Windows 系統中,每個 .exe 檔案在雙擊開啟時都會載入 kernel32.dll 這個系統模組,該模組中有一個 LoadLibrary() 函式,可以將DLL檔案載入到自身程序中。   2、這樣,就可以用 CreateRemoteThrea

    遠端執行注入

    在win32程序中,每個程序都有自己獨立的4GB地址空間,各個程序之間相互不影響,win32API中提供能夠了2個函式,writeProcessMemory和readProcessMemory,這兩個函式可以在指定程序的記憶體中進行讀寫操作。 HANDLE CreateRemoteThrea

    遠端執行注入並呼叫API

    win7 的GetProAddress地址會變動,所以該程式碼不適用於win7 // 遠端執行緒注入_呼叫API.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include "windows.h" typedef int

    18遠端執行注入

    上篇我們練習了使用CreateRemoteThread函式來建立遠端執行緒,但是執行的程式碼塊仍然是原程式中的程式碼,那麼如何讓原程式執行我們自己自己的程式碼呢? 這裡我們就需要注入的技術,那什麼是注入呢? 所謂注入就是指在第三方程序不知道或者不允許的情況下,將我們的模組和程式碼寫入其程序空

    MFCSTL執行網路通訊linux泛型IO

    1 C++介面庫 2 MFC入門教程 3    C++筆記——第一個MFC程式 4 STL運用的C++技術——後記 5 C++ STL庫使用注意點 6 C++ STL 一般總結 7 C++中STL用法總結 8 c++ STL 9

    SpringBoot注入多例項執行處理方式

    Spring-Boot中如何使用多執行緒處理任務  看到這個標題,相信不少人會感到疑惑,回憶你們自己的場景會發現,在Spring的專案中很少有使用多執行緒處理任務的,沒錯,大多數時候我們都是使用Spring MVC開發的web專案,預設的Controller,Service,

    筆記:Java實現三個執行A B CBC執行執行完再執行A線

    final Lock lc = new ReentrantLock(); .. run() { lc.lock(); ... lc.unlock(); } 可能開啟方式不對吧,沒實現! 改用join() 可以實現(BC與A以單執行緒模式執行),程式碼如下: package

    Linux程式設計 多程序執行求解PI(圓周率)

    題目: 連結 多程序: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #define n 100000000.0 int main() { i

    物理CPU物理CPU核心邏輯CPU執行

    總核數 = 物理CPU個數 * 每顆物理CPU的核數 總邏輯CPU數 = 物理CPU個數 * 每顆物理CPU的核數 X 超執行緒數 cat /proc/cpuinfo | more processor : 0 —–邏輯CPU的唯一識別符號 vendor_id : GenuineInt

    執行的弊端執行基礎學習

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using

    libcurl執行gzip共享DNS

    http://hi.baidu.com/jjxiaoyan/item/e17b9ec3e31b93d4964452d8   libcurl是一個不錯的socket庫,而且又是開源的。如果僅僅是簡單的HTTP請求,那麼只需要幾行程式碼就能輕鬆實現。不過要用libcurl實現高效、高頻率的HTTP請

    學習彙集地如果你擅長計算機組成原理執行設計模式jvm前端或者其他都可以

    擅長jvm 多執行緒 設計模式 資料庫 前端 分散式什麼的一起學習共同進步。   目的是大家在自學新的領域的時候有地方可以探討求疑 比如在看到垃圾回收各種收集器中遇到執行緒方面知識的時候 學習設計模式分不清單例和享元的區別,只有書本經驗不知道如何應用到實際開發的時候 學習資料庫系統

    Qt TCP通訊執行伺服器端

    相信許多初學Qt的同學都會和我一樣遇到這樣的問題: 一、Qt TCP通訊在使用nextPendingConnect後,伺服器端就只會與最後接入的客戶端通訊,這個時候就會考慮繼承QThread實現多執行緒,從而實現多個客戶端與伺服器端通訊,每當一個新的客戶端連線時,通過標識碼socke

    利用itertools生成密碼字典執行撞庫破解rar壓縮檔案密碼

    指令碼功能:  利用itertools生成密碼字典(迭代器形式)  多執行緒併發從密碼字典中取出密碼進行驗證  驗證成功後把密碼寫入檔案中儲存 #!/usr/bin/env python # -*- coding: UTF-8 -*- # Author:Leslie-x import itert

    RT-Thread 讀後感3 —— 實現就緒列表 (定義就緒列表執行插入到就緒列表)

    1. 定義就緒列表 執行緒建立好後,需要將執行緒新增到就緒列表裡面,表示執行緒已經就緒,系統隨時可以排程。RT-Thread定義的就緒列表如下: /* 執行緒就緒列表如下 ** RT_THREAD_PRIORITY_MAX 在rtconfig.h中預設定義為32 決定最大執行緒優先順