Windows-注入技术学习总结

本文详细解析远程线程注入、消息钩子、输入法、注册表、EIP、APC及SSDT替换等Windows系统常见的代码注入技术,包括原理、流程和注意事项,以及防注入策略的探讨。

目录

1.远程线程注入

2.消息钩子注入

3.输入法注入

4.注册表注入

5.EIP注入

6.APC注入

7.SSDT替换

总结


1.远程线程注入

原理:利用CreateRemoteThread()函数,将自己创建的的线程加载到远程空间进程里去执行。

CreateRemoteThread function (processthreadsapi.h) - Win32 apps | Microsoft Docs

注入流程:

  1. OpenProcess 打开被注入进程句柄。
  2. VirtualAllocEx 在注入进程里申请空间,用于存放注入插件路径的字符串,不然在注入进程里找不到参数。
  3. WriteProcessMemory 往申请的空间里写路径字符串
  4. CreateRemoteThread 注入进程,函数第四个参数写LoadLibrary,因为LoadLibrary函数地址在Kernel32.dll中,在每个进程中映射地址都一样,所以不需要再去注入进程查找该函数地址了。第五个参数写路径字符串地址,为LoadLibrary函数的参数。
  5. WaitForSingleObject 等待线程执行完成返回,VirtualFreeEx释放申请空间。

示例代码:

#define TARGETEXE L"notepad.exe"
WCHAR InjectDll[] = L"C:\\Users\\k\\source\\repos\\ConsoleApplication3\\x64\\Release\\TestDll.dll";

DWORD dTargetpid = 0;
 {
     HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     if (hSnapshot != INVALID_HANDLE_VALUE)
     {
         PROCESSENTRY32W pe32;
         pe32.dwSize = sizeof(PROCESSENTRY32W);

         if (Process32FirstW(hSnapshot, &pe32))
         {
             do {
                 if (wcscmp(pe32.szExeFile, TARGETEXE) == 0)
                 {
                     dTargetpid = pe32.th32ProcessID;
                     break;
                 }
             } while (Process32NextW(hSnapshot, &pe32));
         }
     }
     CloseHandle(hSnapshot);
 }

 HANDLE hTargethandle =  OpenProcess( PROCESS_ALL_ACCESS, FALSE, dTargetpid);
 if (hTargethandle != INVALID_HANDLE_VALUE)
 {
     //必须具备 PROCESS_VM_OPERATION  访问权限
     LPVOID vaAddress =  VirtualAllocEx(hTargethandle, NULL, sizeof(InjectDll), MEM_COMMIT, PAGE_READWRITE);
     if (vaAddress != nullptr)
     {
         if (WriteProcessMemory(hTargethandle, vaAddress, InjectDll, sizeof(InjectDll), NULL))
         {
             HMODULE hKernel32module = GetModuleHandle(L"kernel32.dll");
             if (hKernel32module)
             {
                 LPTHREAD_START_ROUTINE loadLibraryFunction = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32module, "LoadLibraryW");
             
                 //必须具备 PROCESS_CREATE_THREAD、 PROCESS_QUERY_INFORMATION、 PROCESS_VM_OPERATION、 PROCESS_VM_WRITE和 PROCESS_VM_REA
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值