远程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出缓存,可 ...
随机推荐
- android之SeekBar控件用法
MainActivity.java package com.example.mars_2400_seekbar; import android.support.v7.app.ActionBarActi ...
- SqlServer2005基于已有表创建分区
随着当今数据库的容量越来越快的朝着在大型数据库或超大型数据库的发展,对于数据库中的大 型表以及具有各种访问模式的表的可伸缩性和可管理性运行环境变得尤为重要, SQL server 从 SQL serv ...
- iPhone的定位技术与Core Location框架
来源:http://www.cnblogs.com/lovecode/archive/2011/12/24/2300579.html iPhone定位来源通常有:1. GPS定位 2. WiFi定位 ...
- 线程中的wait() 与 锁的关系
我们先看一段代码: /** * 计算输出其他线程锁计算的数据 * */ public class ThreadA { public static void main(String[] args) th ...
- Jmeter+jenkins接口性能测试平台实践整理(一)
最近两周在研究jmeter+Jenkin的性能测试平台测试dubbo接口,分别尝试使用maven,ant和Shell进行构建,jmeter相关设置略. 一.Jmeter+jenkins+Shell+t ...
- [DataTable] datatable根据表中的字段进行排序
private DataTable SortTable(DataTable dt,string[] pids) { DataTable dt0 = dt.Clone(); //复制原表结构 ;i< ...
- POJ 1703
种类并查集,基本思想是每次压缩路径都必须同时更新子节点和根节点的关系,这种关系是通过子节点和父亲节点的关系,以及父亲节点与根节点的关系运算出来. 压缩路径的findme();参考了大神的代码,做的第二 ...
- HTTP 500 的解决方案
我们首先要确定IIS权限的问题,如下所示: 身份验证的具体项: 身份验证的基本设置: 注意:如果不需要Form验证的情况下,那么把Form身份验证禁止掉,否则会出现在每一次请求的过程中都要有一个默认的 ...
- HDU 4786 Fibonacci Tree
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) P ...
- 前端测试框架 jasmine 的使用
最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前.通过对比我们选择了 Karma + jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 K ...