远程DLL注入
界面如下:
关键部分代码如下:
void CInjectDllDlg::OnBnClickedButtonInject()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
int iBufSize = WideCharToMultiByte(CP_ACP, , m_strPathName.GetBuffer(), -, NULL, , NULL, NULL);
char *pszBuffer = new char[iBufSize];
WideCharToMultiByte(CP_ACP, , m_strPathName.GetBuffer(), -, pszBuffer, iBufSize, NULL, NULL);
InjectDll(m_dwPid, pszBuffer);
delete []pszBuffer;
pszBuffer = NULL;
} void CInjectDllDlg::OnBnClickedButtonUnload()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
int iBufSize = WideCharToMultiByte(CP_ACP, , m_strPathName.GetBuffer(), -, NULL, , NULL, NULL);
char *pszBuffer = new char[iBufSize];
WideCharToMultiByte(CP_ACP, , m_strPathName.GetBuffer(), -, pszBuffer, iBufSize, NULL, NULL);
UnInjectDll(m_dwPid, pszBuffer);
delete []pszBuffer;
pszBuffer = NULL;
} void CInjectDllDlg::InjectDll(DWORD dwPid, char* szDllName)
{
if (dwPid == || strlen(szDllName) == )
{
return;
} char *pFunName = "LoadLibraryA";
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
if (NULL == hProcess)
{
return;
} int iDllLen = strlen(szDllName) + sizeof(char);
PVOID pDllAddr = VirtualAllocEx(hProcess, NULL, iDllLen, MEM_COMMIT, PAGE_READWRITE);
if (NULL == pDllAddr)
{
CloseHandle(hProcess);
return;
} DWORD dwWriteNum = ;
WriteProcessMemory(hProcess, pDllAddr, szDllName, iDllLen, &dwWriteNum);
FARPROC pFunAddr = GetProcAddress(GetModuleHandleA("kernel32.dll"), pFunName);
HANDLE hThread = CreateRemoteThread(hProcess, NULL, , (LPTHREAD_START_ROUTINE)pFunAddr, pDllAddr, , NULL);
WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread);
CloseHandle(hProcess);
} void CInjectDllDlg::UnInjectDll(DWORD dwPid, char* szDllName)
{
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPid);
MODULEENTRY32 Me32 = {};
Me32.dwSize = sizeof(MODULEENTRY32); BOOL bRet = Module32First(hSnap, &Me32);
while (bRet)
{
int iBufSize = WideCharToMultiByte(CP_ACP, , Me32.szExePath, -, NULL, , NULL, NULL);
char *pszBuffer = new char[iBufSize];
WideCharToMultiByte(CP_ACP, , Me32.szExePath, -, pszBuffer, iBufSize, NULL, NULL);
if (strcmp(pszBuffer, szDllName) == )
{
delete []pszBuffer;
pszBuffer = NULL;
break;
}
delete []pszBuffer;
pszBuffer = NULL;
bRet = Module32Next(hSnap, &Me32);
}
CloseHandle(hSnap);
char *pFunName = "FreeLibrary"; HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
FARPROC pFunAddr = GetProcAddress(GetModuleHandleA("kernel32.dll"), pFunName);
HANDLE hThread = CreateRemoteThread(hProcess, NULL, , (LPTHREAD_START_ROUTINE)pFunAddr, Me32.hModule, , NULL);
WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread);
CloseHandle(hProcess);
}
下载地址:
远程DLL注入的更多相关文章
- CreateRemoteThread 远程dll注入
1.dll中的内容 // dllmain.cpp : 定义 DLL 应用程序的入口点.#include "stdafx.h" BOOL APIENTRY DllMain( HMOD ...
- 【windows核心编程】使用远程线程注入DLL
前言 该技术是指通过在[目标进程]中创建一个[远程线程]来达到注入的目的. 创建的[远程线程]函数为LoadLibrary, 线程函数的参数为DLL名字, 想要做的工作在DLL中编写. 示意图如下: ...
- 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程
简介 大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文 ...
- 安全之路 —— 无DLL文件实现远程线程注入
简介 在之前的章节中,笔者曾介绍过有关于远程线程注入的知识,将后门.dll文件注入explorer.exe中实现绕过防火墙反弹后门.但一个.exe文件总要在注入时捎上一个.dll文件着 ...
- 【windows核心编程】远程线程DLL注入
15.1 DLL注入 目前公开的DLL注入技巧共有以下几种: 1.注入表注入 2.ComRes注入 3.APC注入 4.消息钩子注入 5.远线程注入 6.依赖可信进程注入 7.劫持进程创建注入 8.输 ...
- 详细解读:远程线程注入DLL到PC版微信
一.远程线程注入的原理 1.其基础是在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一个 LoadLibrary() 函数,可以 ...
- 实现远程线程DLL注入
### 32位:远程线程注入 远程线程注入是最常用的一种注入技术,该技术利用的核心API是 `CreateRemoteThread()` 这个API可以运行远程线程,其次通过创建的线程调用 `Load ...
- Dll注入技术之远程线程注入
DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...
- 远程线程注入dll,突破session 0
前言 之前已经提到过,远线程注入和内存写入隐藏模块,今天介绍突破session 0的dll注入 其实今天写这个的主要原因就是看到倾旋大佬有篇文章提到:有些反病毒引擎限制从lsass中dump出缓存,可 ...
随机推荐
- @Autowired失效
今天发现了一个使用@Autowired但是注入失败的问题. 后来发现原来是一个Validator中有@Autowired , 并试图注入一个service , 但是这个service始终是null , ...
- Java多线程之后台线程
将线程设置成后台线程Daemons 主线程结果后,后台线程将自动结果. package wzh.test; import java.util.concurrent.TimeUnit; class Si ...
- linux下批量修改文件名之rename
最近因为突然用到需匹配更换文件名,发现rename命令真是 简单好用,和sed语法及vim 替换很相似. 1. 更改文件名后缀 rename 's/\.txt/\.html/' * 2.增加文件名后缀 ...
- nginx 环境搭建(基于linux)
Nginx是一种服务器软件,故而其最主要.最基本的功能当然是可以与服务器硬件结合,让程序员可以将程序放在Nginx服务器上,将程序发布出去,让成千上万的网民可以浏览.除此之外,Nginx是一种高性能的 ...
- [SQL]SQL语言入门级教材_SQL语言快速入门(五)
SQL语言快速入门(一) SQL是英文Structured Query Language的缩写,意思为结构化查询语言. SQL语言的主要功能就是同各种数据库建立联系,进行沟通.按照ANSI(美国国家标 ...
- POJ 3264-Balanced Lineup, NYOJ 119-士兵杀敌3 线段树
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...
- java泛型的限制
1.不能实例化泛型数组,除非是无上界的类型通配符,如:Gennerid<String> []a=new Gennerid<String>[10] 而Gennic<?> ...
- 模拟一下goldengate中断后,重新同步操作
模拟一下goldengata中断后,重新同步操作: 1.关掉源端抽取进程 GGSCI (20081122-2105) 15> info all Program Status ...
- mysql 使用说明-1
以下内容是根据官方文档翻译的,执行截图是博主自己实测结果. 3.1 Connecting to and Disconnecting from the Server 连接,断开数据库 要连接到mysql ...
- Windows 2008下部署Exchange Server 2007
对于很多政府及企业来说,微软的邮件服务器Exchange Server都是一个不错的通信和协作平台选择,尤其新版邮件服务器Exchange Server 2007 和OCS的组合,在微软UC平台上创下 ...