界面如下:

关键部分代码如下:

 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);
}

下载地址:

http://pan.baidu.com/s/1xk7Jw

远程DLL注入的更多相关文章

  1. CreateRemoteThread 远程dll注入

    1.dll中的内容 // dllmain.cpp : 定义 DLL 应用程序的入口点.#include "stdafx.h" BOOL APIENTRY DllMain( HMOD ...

  2. 【windows核心编程】使用远程线程注入DLL

    前言 该技术是指通过在[目标进程]中创建一个[远程线程]来达到注入的目的. 创建的[远程线程]函数为LoadLibrary, 线程函数的参数为DLL名字, 想要做的工作在DLL中编写.  示意图如下: ...

  3. 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程

    简介        大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文 ...

  4. 安全之路 —— 无DLL文件实现远程线程注入

    简介         在之前的章节中,笔者曾介绍过有关于远程线程注入的知识,将后门.dll文件注入explorer.exe中实现绕过防火墙反弹后门.但一个.exe文件总要在注入时捎上一个.dll文件着 ...

  5. 【windows核心编程】远程线程DLL注入

    15.1 DLL注入 目前公开的DLL注入技巧共有以下几种: 1.注入表注入 2.ComRes注入 3.APC注入 4.消息钩子注入 5.远线程注入 6.依赖可信进程注入 7.劫持进程创建注入 8.输 ...

  6. 详细解读:远程线程注入DLL到PC版微信

    一.远程线程注入的原理 1.其基础是在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一个 LoadLibrary() 函数,可以 ...

  7. 实现远程线程DLL注入

    ### 32位:远程线程注入 远程线程注入是最常用的一种注入技术,该技术利用的核心API是 `CreateRemoteThread()` 这个API可以运行远程线程,其次通过创建的线程调用 `Load ...

  8. Dll注入技术之远程线程注入

    DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...

  9. 远程线程注入dll,突破session 0

    前言 之前已经提到过,远线程注入和内存写入隐藏模块,今天介绍突破session 0的dll注入 其实今天写这个的主要原因就是看到倾旋大佬有篇文章提到:有些反病毒引擎限制从lsass中dump出缓存,可 ...

随机推荐

  1. Java多线程之捕获异常

    1.主线程不能捕获到子线程的异常 package Thread.Exection; import java.util.concurrent.ExecutorService; import java.u ...

  2. 已知ip地址和其子网掩码如何求网络号子网号主机号

    已知ip地址为10.130.89.95,其子网掩码为255.255.255.224,求其网络号.子网号和主机号. 要看子网掩码变长在第几节,255.255.255.224是在第四节借了位 把224转换 ...

  3. Jenkins参数化构建

    背景:每次构建项目时都需要去修改一下配置,然后保存,再去立即构建.这样修改容易修改出错误,影响到执行脚本,且每次都要去修改配置,不容易修改,操作也比较麻烦.所以决定将Jenkins修改为参数化构建.下 ...

  4. Run Configuration error:broken configuration due to unavailable

    希望大家一起来,毕竟大家都不会使用这个Androidstudio,一起扩展这方面的知识量 http://forums.opengamma.com/t/intellij-code-compiles-bu ...

  5. crm plugin 未能加载文件或程序集“xxxx,”或它的某一个依赖项。系统找不到指定的文件。

    plugin运行出错. 1  plugin文件如果是 注册到disk,应该是注册到 C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembl ...

  6. Android 上的代码阅读器 CoderBrowserHD 修改支持 go 语言代码

    我在Android上的代码阅读器用的是 https://github.com/zerob13/CoderBrowserHD 改造的版本,改造后的版本我放在 https://github.com/ghj ...

  7. types.MethodType

    http://stackoverflow.com/questions/972/adding-a-method-to-an-existing-object-instance 532down voteac ...

  8. Java中的大数处理类BigInteger和BigDecimar浅析

    这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal; BigInteg ...

  9. 编译redis

    apt-get install gcc tcl make MALLOC=libc

  10. XMLHttpRequest的五步使用方法

    <html> <head> <title>Demo</title> <style> body,input,button,select,h1{ ...