日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DLL注入简单测试

發布時間:2025/3/21 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DLL注入简单测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 什么是注入?
    • 已知的注入方式:
    • 代碼實現

什么是注入?

所謂注入就是在第三方進程不知道或者不允許的情況下將 模板 或者 代碼 寫 入對方進程空間,并設法執行的技術
在安全領域,“注入”是一種非常重要的技術手段,注入與反注入也一直處于不斷變化的,而且越來越激烈的對抗當中

已知的注入方式:

遠程線程注入,APC注入,消息鉤子注入,注冊表注入,導入表注入,輸入法注入等等

線程函數并非固定的,只需滿足條件:四個字節的參數,四個字節的返回值,那么其它都無所謂了

其實DLL注入就是利用CreateRemoteTheread來開啟一個遠程線程,但是這個線程函數地址在目標進程里面并不知道。

線程函數聲明:

DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter );

通過觀察,只要滿足四個字節的參數,四個字節的返回值
最意外的就是kernel32.dll中的LoadLibraryA滿足這個條件,而且大多數進程都會加載kernel32.dll這種核心東西加載地址在每個進程中都是一樣的,這樣就有了注入思路了:

  • 在進程A中分配空間,存儲“A.DLL”(也就是LoadLibraryA的參數)
  • 獲取LoadLibraryA函數的地址
  • 創建遠程線程,指向LoadLibraryA()函數
  • HMODULE LoadLibraryA(LPCWSTR lpLibFileName );

    1.Kernel32.dll:最核心的功能模塊,比如管理內存,進程和線程相關的函數

    2.User32.dll:是Windows用戶相關界面應用程序接口,如創建窗口和發送消息等

    3.GDI32.dll:全稱是Graphical Device Interface(圖形設備接口),包含用于畫圖和顯示文本的函數

    代碼實現

    dll代碼:

    #include "pch.h" #include<Windows.h>void thread() {while (1) {MessageBox(NULL, L"你被Hook了", L"放下武器", MB_OK);} }BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)thread, NULL, 0, NULL);break;case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE; }

    載體:

    #include <iostream> #include<Windows.h> using namespace std;void inject(const char * name) {HANDLE handle=OpenProcess(PROCESS_ALL_ACCESS, FALSE, 24984);int length = strlen(name) + 1;LPVOID ipAllocAddr=VirtualAllocEx(handle,NULL,length,MEM_COMMIT,PAGE_READWRITE);WriteProcessMemory(handle, ipAllocAddr, name, length, NULL);HMODULE hMoudule=GetModuleHandle("Kernel32.dll");DWORD dwLoadr=(DWORD)GetProcAddress(hMoudule, "LoadLibraryA");CreateRemoteThread(handle, NULL, 0, (LPTHREAD_START_ROUTINE)dwLoadr, ipAllocAddr, 0, NULL);}void attack() {printf("攻擊了……………………\n");}void defend() {printf("防御了……………………\n");}void sitdown() {printf("坐下了……………………\n");}int main() {inject("G:/windows核心編程/test.dll/Debug/test.dll");}

    總結

    以上是生活随笔為你收集整理的DLL注入简单测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。