博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
远程线程注入RemoteThread(dll)
阅读量:6161 次
发布时间:2019-06-21

本文共 3023 字,大约阅读时间需要 10 分钟。

远程线程注入RemoteThread(dll)
// RemoteInject.h

#pragma once// RemoteInject 对话框class RemoteInject : public CDialogEx{    DECLARE_DYNAMIC(RemoteInject)public:    RemoteInject(CWnd* pParent = NULL);   // 标准构造函数    virtual ~RemoteInject();// 对话框数据    enum { IDD = IDD_DIALOG10 };protected:    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持    DECLARE_MESSAGE_MAP()public:    DWORD m_dwPID;    CString m_strDllPath;    afx_msg void OnBnClickedButton2();    afx_msg void OnBnClickedInject();};

// RemoteInject.cpp

// RemoteInject.cpp : 实现文件//#include "stdafx.h"#include "MyInjectTool.h"#include "RemoteInject.h"#include "afxdialogex.h"// RemoteInject 对话框IMPLEMENT_DYNAMIC(RemoteInject, CDialogEx)RemoteInject::RemoteInject(CWnd* pParent /*=NULL*/)    : CDialogEx(RemoteInject::IDD, pParent)    , m_dwPID(0)    , m_strDllPath(_T("")){}RemoteInject::~RemoteInject(){}void RemoteInject::DoDataExchange(CDataExchange* pDX){    CDialogEx::DoDataExchange(pDX);    DDX_Text(pDX, IDC_EDIT1, m_dwPID);    DDX_Text(pDX, IDC_EDIT4, m_strDllPath);}BEGIN_MESSAGE_MAP(RemoteInject, CDialogEx)    ON_BN_CLICKED(IDC_BUTTON2, &RemoteInject::OnBnClickedButton2)    ON_BN_CLICKED(IDC_INJECT, &RemoteInject::OnBnClickedInject)END_MESSAGE_MAP()// RemoteInject 消息处理程序void RemoteInject::OnBnClickedButton2(){    // TODO:  在此添加控件通知处理程序代码    char szFilter[] = "动态链接库|*.dll";    CFileDialog fileDlg(TRUE, "dll", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);    UpdateData(TRUE);    if (fileDlg.DoModal() == IDOK)    {        m_strDllPath = fileDlg.GetPathName();    }    UpdateData(FALSE);}void RemoteInject::OnBnClickedInject(){    // TODO:  在此添加控件通知处理程序代码    HANDLE hProcess = NULL;    HANDLE hThread = NULL;    HANDLE hThread2 = NULL;    char* pszRemoteBuffer = NULL;    DWORD * pDwTidRemote = NULL;    //UpdateData(TRUE);    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, m_dwPID);    if (hProcess == NULL)    {        MessageBox("打开进程失败!!!!");        return;    }    //1.在远程进程中分配内存    pszRemoteBuffer = (char *)VirtualAllocEx(hProcess, NULL, m_strDllPath.GetLength(), MEM_COMMIT, PAGE_READWRITE);    if (pszRemoteBuffer == NULL)    {        MessageBox("申请远程空间失败");        return;    }    //2.在远程申请的地址当中写入DLL的路径    SIZE_T dwWriten;    if (!WriteProcessMemory(hProcess, pszRemoteBuffer, (LPVOID)m_strDllPath.GetBuffer(0), m_strDllPath.GetLength(), &dwWriten))    {        MessageBox("写入内存失败");    }    //3.获取远程进程中LaodLibry的地址,这里你用的巧合是每个程序中的kernel32的地址的都一样,远程中也一样在    HMODULE hMouDle = GetModuleHandle("Kernel32");    PTHREAD_START_ROUTINE pfnLoadLibrary = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA");    if (pfnLoadLibrary == NULL)    {        MessageBox("获取LoadLibrary地址失败!!!");        return;    }    //4.创建远程线程    hThread = CreateRemoteThread(hProcess, NULL, 0, pfnLoadLibrary, pszRemoteBuffer, 0, NULL);    DWORD dwErrCode = GetLastError();    if (hThread == NULL)    {        MessageBox("创建远程线程失败");        return;    }    WaitForSingleObject(hThread, 2000);}

转载于:https://blog.51cto.com/haidragon/2306823

你可能感兴趣的文章
使用SanLock建立简单的HA服务
查看>>
Subversion使用Redmine帐户验证简单应用、高级应用以及优化
查看>>
Javascript Ajax 异步请求
查看>>
DBCP连接池
查看>>
cannot run programing "db2"
查看>>
mysql做主从relay-log问题
查看>>
Docker镜像与容器命令
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>
Java基础学习总结(4)——对象转型
查看>>
BZOJ3239Discrete Logging——BSGS
查看>>
SpringMVC权限管理
查看>>
spring 整合 redis 配置
查看>>
cacti分组发飞信模块开发
查看>>
浅析LUA中游戏脚本语言之魔兽世界
查看>>
飞翔的秘密
查看>>
Red Hat 安装源包出错 Package xxx.rpm is not signed
查看>>
编译安装mysql-5.6.16.tar.gz
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>