• APCInject


     1 #include <iostream>
     2 #include <Windows.h>
     3 #include <TlHelp32.h>
     4 
     5 using namespace std;
     6 
     7 /*
     8     APC注入条件:
     9         目标线程处于可唤醒状态
    10         如使用以下API时就处于可唤醒状态
    11         SleepEx, SignalObjectAndWait, WaitForSingleObjectEx, WaitForMultipleObjectsEx,MsgWaitForMultipleObjectsEx
    12     参数dwPid默认为0,表示自动创建目标进程并立刻生效注入,否则,注入现有目标,等待目标唤醒时执行APC回调
    13 */
    14 BOOL APCInject(char *dllUrl,DWORD dwPid=0,char *exeUrl=NULL);
    15 
    16 int main(void)
    17 {
    18     
    19     cout << APCInject("c:\desktop\test.dll",3980) << endl;
    20     return 0;
    21 }
    22 
    23 BOOL APCInject(char *dllUrl,DWORD dwPid,char *exeUrl)
    24 {
    25     HANDLE hSnap=NULL,hPro=NULL,hThr=NULL;
    26     BOOL bOk = FALSE;
    27     LPVOID hVir = NULL;
    28     THREADENTRY32 te = {0};
    29 
    30     if (!dwPid)
    31     {
    32         STARTUPINFO wi = {0};
    33         PROCESS_INFORMATION pi = {0};
    34 
    35         wi.cb = sizeof(wi);
    36         CreateProcessA("c:\desktop\123.exe",NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&wi,&pi);
    37         hPro = pi.hProcess;
    38         hThr = pi.hThread;
    39     } else {
    40         te.dwSize = sizeof(te);
    41         hPro = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);
    42         if (!hPro)
    43             return FALSE;
    44         hSnap = CreateToolhelp32Snapshot(4,dwPid);
    45         bOk = Thread32First(hSnap,&te);
    46         while (bOk)
    47         {
    48             if (te.th32OwnerProcessID == dwPid)
    49             {
    50                 hThr = OpenThread(THREAD_ALL_ACCESS,FALSE,te.th32ThreadID);
    51                 break;
    52             }
    53         
    54             bOk = Thread32Next(hSnap,&te);
    55         }
    56         CloseHandle(hSnap);
    57     }
    58     
    59     if (!hThr)
    60         return FALSE;
    61     hVir = VirtualAllocEx(hPro,NULL,strlen(dllUrl)+1,MEM_COMMIT,PAGE_READWRITE);
    62     if (!hVir)
    63         return FALSE;
    64     if (!WriteProcessMemory(hPro,hVir,dllUrl,strlen(dllUrl)+1,NULL))
    65         return FALSE;
    66     CloseHandle(hPro);
    67     if (QueueUserAPC((PAPCFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"),hThr,(DWORD)hVir))
    68     {
    69         if (!dwPid)
    70         {
    71             ResumeThread(hThr);
    72             CloseHandle(hThr);
    73         }
    74         return TRUE;
    75     }
    76     CloseHandle(hThr);
    77     return FALSE;
    78 }
  • 相关阅读:
    07word转换pdf
    高德纳《计算机程序设计艺术》(The Art of Computer Programming)的作者
    DbVisualizer 8 解决中文乱码问题 (20120310 20:23)
    IT has never been easier or harder
    el表达式和s:property的区别
    df 和 du 命令详解
    dbvisualizer 8.0 破解(free>personal)
    ping 中的TTL查看操作系统
    netstat 监控TCP/IP网络
    ls l 命令
  • 原文地址:https://www.cnblogs.com/biaoge140/p/8733588.html
Copyright © 2020-2023  润新知