process inject
1.0.0
進程注入簡而言之就是將代碼注入到正在運行的進程內存空間中,進程注入也是PC端軟件開發必須掌握的一個基礎知識點。
Windows為每個進程分配了4G內存空間,在這4G空間中的代碼可以被這個進程訪問執行。 給軟件“打補丁”實際上就是進程注入,想給已經上線的軟件添加一個小功能,不需要重新設計軟件,只需要將你需要添加功能的代碼注入到進程中即可。
也有很多黑客利用進程注入將惡意代碼注入到目標進程中進行攻擊。
Windows環境下常用的進程注入方法有:CreateRemoteThread、APCInject、SuspendThread、SetWindowHookEX等。
此外還學過一種比較奇特的注入方法:反射注入。反射注入主要是通過對PE文件的操作實現注入,注入成功率高,也最有學習價值。
OpneProcess )。VirtualAllocEX )。WriteProcessMemory )。CreateRemoteThread )。從kenerl32中得到loadlibrary的函數地址( GetProcAddress ),將寫入目標進程的動態庫路徑作為參數傳入loadlibrary。WaitForSingleObejct ),釋放內存,關閉句柄。CreateProcess )將第六參數設置為掛起。QueueUserAPC函數將LoadLibrary函數作為APC對象加入到線程的APC隊列中,並將DLL的路徑作為參數傳入。注意釋放句柄和內存。整體思路是在dll中實現加載動態庫的loadlibrary函數,將自身加載到目標進程中。
其中Loadibrary函數是通過修改PE文件實現的:
1、在目標進程地址空間申請空間將dll寫入。
2、得到dll中實現的加載自身的函數在文件中的地址,創建遠程線程,將該函數地址傳入。而在dll中加載自身的函數也實現的很巧妙。
setWindowsHookEX函數進行注入。Windows操作系統、VS2015。
在32位windows系統和64位windows系統中均測試通過,進行測試時請修改源代碼中的目標進程以及Dll路徑。
.
|-- APCInject(Ring0) // 驱动层的APC注入
|-- APCInject // Ring3层的APC注入
|-- CreateSuspend // 挂起线程注入
|-- InjectByRegister // 注册表注入(未测试)
|-- ReflectDll // 反射注入的Dll
|-- ReflectiveInject // 反射注入
|-- RemoteThread // 远程线程注入
|-- Src // 驱动层的APC注入源码
|-- Dll.dll // 32位测试Dll
|-- Dll64.dll // 64位测试Dll
|-- Process-Inject.sln // 项目启动文件
|-- README.md // 项目说明文件
.
歡迎Pull Request,歡迎提Issue。
在對本作品進行演繹時,請署名並以相同方式共享。