APCInject
#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的更多相关文章
- 安全之路 —— 利用APC队列实现跨进程注入
简介 在之前的文章中笔者曾经为大家介绍过使用CreateRemoteThread函数来实现远程线程注入(链接),毫无疑问最经典的注入方式,但也因为如此,这种方式到今天已经几乎被所有安全软件所防御.所以 ...
- Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术
catalogue 1. 引言2. 使用注册表注入DLL3. 使用Windows挂钩来注入DLL4. 使用远程线程来注入DLL5. 使用木马DLL来注入DLL6. 把DLL作为调试器来注入7. 使用c ...
- 注入 - Ring3 APC注入
系统产生一个软中断,当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数,利用QueueUserAPC()这个API,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的, 1.根据进 ...
- Inject-APC (Ring3)
1 // APCInject.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include "APCInjec ...
随机推荐
- Collections.copy
List<String> names = Arrays.asList(new String[nameList.size()]); Collections.copy(names, nameL ...
- chapter09
import java.io.File import java.nio.file._ import scala.collection.mutable.ArrayBuffer/** * Created ...
- (转)认识 Linux 文件系统
7.1 认识 Linux 文件系统 原文:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/59.html Linux 最传统 ...
- SpringBoot | 第零章:前言
缘起 前段时间公司领导叫编写一两课关于springboot的基础知识培训课程,说实话,也是今年年初才开始接触了SpringBoot这个脚手架,使用了之后才发现打开了一个新世界.再之后也没有一些系统的学 ...
- Jedis使用工具类
Redis 使用工具类: package com.qlwb.business.common.redis; import org.apache.log4j.Logger; import redis.cl ...
- js中快速的访问某个url
在做项目中经常会遇到这样的需求,自动向后台发送统计日志,也不需要关心返回值,当然了方法有很多,其中一个方法就是使用Ajax. 在这里我要介绍的方法的原理是使用图片,给这个图片符url,这样就会自动的触 ...
- EL_JSTL
EL(Expression Language)EL表达式 作用:在JSP中消灭java代码 语法: "${ }" 用法:参考jsp页面 //Servlet中,: User user ...
- 《Head First 设计模式》之观察者模式——天气显示
观察者模式(Observer) ——在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新. (出版者Subject+订阅者Observer=观察者模式) 特点 ...
- 符号替换问题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
public class Solution { public String replaceSpace(StringBuffer str) { String str1=str.toString(); c ...
- php编码转换相关
iconv (PHP 4 >= 4.0.5, PHP 5, PHP 7) iconv — 字符串按要求的字符编码来转换 string iconv ( string $in_charset , s ...