博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
APCInject
阅读量:6140 次
发布时间:2019-06-21

本文共 2291 字,大约阅读时间需要 7 分钟。

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 7 /* 8 APC注入条件: 9 目标线程处于可唤醒状态10 如使用以下API时就处于可唤醒状态11 SleepEx, SignalObjectAndWait, WaitForSingleObjectEx, WaitForMultipleObjectsEx,MsgWaitForMultipleObjectsEx12 参数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 }

 

转载于:https://www.cnblogs.com/biaoge140/p/8733588.html

你可能感兴趣的文章
鹰眼跟踪、限流降级,EDAS的微服务解决之道
查看>>
秘籍:程序猿该如何实力撩妹
查看>>
网络编程socket基本API详解
查看>>
API接口设计 OAuth2.0认证
查看>>
Mysql5.6的1755错误解决办法
查看>>
在命令行中运行“mvn compile”因为中文报错
查看>>
Docker的技术不再局限于测试和开发
查看>>
技术干货:工欲善其事,必先利其器 阿里云数据库系列谈之一
查看>>
禁用ViewState
查看>>
深入理解Java HashMap实现原理
查看>>
阿里云备案获取服务号
查看>>
深入理解Python中的__builtin__和__builtins__
查看>>
YII AJAX registerScript
查看>>
ARC forbids explicit message send of 'retainCount'
查看>>
redis单机安装
查看>>
golang内存分配
查看>>
手把手教你----使用Nuget管理自己的项目库
查看>>
trubleshoting方式浅谈
查看>>
编目DB2数据库(原创)
查看>>
企业开发中选择logback而不是log4j的理由
查看>>