ce变速注入dll失败_[LAB]一种无痕Dll模块注入方式

本文介绍了如何进行无痕DLL模块注入,包括有痕和无痕两种方式。首先,创建MFC项目作为实验窗体,然后分别创建有痕和无痕的Dll项目。有痕注入通过HookMessageBox实现,而无痕注入则是通过隐藏Dll模块,将其拷贝到新开辟的内存空间,避免在进程模块中留下痕迹。实验展示了如何使用Visual Studio 2015和进程模块查看器进行操作。
摘要由CSDN通过智能技术生成

0x00 前言

  • 方式:CreateRemoteThread
  • 需要:visual studio 2015
  • 需要:进程模块查看器,如【PCHunter】【ProcessHacker】等。
  • 需要:创建一个用于实验注入的【MFC项目】窗体。
  • 需要:创建一个用于有痕注入的【Dll项目】模块。
  • 需要:创建一个用于无痕注入的【Dll项目】模块。

0x01 实验窗体

  • 在【VS2015】中,创建一个名为【MFC】的【MFC项目】,打开【MFC.rc】的【IDD_MFC_DIALOG】:

9ded20408df169d88b9134f6d617f3fb.png
  • 然后在【IDD_MFC_DIALOG】放入以下三个【Button】:

5378b4f62fe1543aff396dc729e063b1.png
  • 弹窗的ID设置为【IDOK】,无痕注入的ID设置为【IDC_BUTTON1】,有痕注入的ID设置为【IDC_BUTTON2】:

979d849b6bbeed9f7fb41ac2fbfc07e3.png
  • 在【MFCDlg.cpp】贴入以下代码:
#include "stdafx.h"
#include "MFC.h"
#include "MFCDlg.h"
#include "afxdialogex.h"
#include <windows.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//1.获取进程句柄
HANDLE GetThePidOfTargetProcess(HWND hwnd)
{
    
	DWORD pid;
	GetWindowThreadProcessId(hwnd, &pid);
	HANDLE hProcee = ::OpenProcess(PROCESS_ALL_ACCESS | PROCESS_CREATE_THREAD, 0, pid);
	return hProcee;
}
//2.提升权限
void Up()
{
    
	HANDLE hToken;
	LUID luid;
	TOKEN_PRIVILEGES tp;
	OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
	LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);
	tp.PrivilegeCount = 1;
	tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	tp.Privileges[0].Luid = luid;
	AdjustTokenPrivileges(hToken, 0, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
}
//3.进程注入
BOOL DoInjection(char *DllPath, HANDLE hProcess)
{
    
	DWORD BufSize = strlen(DllPath) + 1;
	LPVOID AllocAddr = VirtualAllocEx(hProcess, NULL, BufSize, MEM_COMMIT, PAGE_READWRITE);
	WriteProcessMemory(hProcess, AllocAddr, DllPath, BufSize, NULL);
	PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");

	HANDLE hRemoteThread;
	hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, pfnStartAddr, AllocAddr, 0, NULL);
	if (hRemoteThread)
	{
    
		MessageBox(NULL, TEXT("注入成功"), TEXT("提示"), MB_OK);
		return true;
	}
	else
	{
    
		MessageBox(NULL, TEXT("注入失败"), TEXT("提示"), MB_OK);
		return false;
	}
}

class CAboutDlg : public CDialogEx
{
    
public:
	CAboutDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
     IDD = IDD_ABOUTBOX };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
    
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()

CMFCDlg::CMFCDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(IDD_MFC_DIALOG, pParent)
{
    
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMFCDlg::DoDataExchange(CDataExchange* pDX)
{
    
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMFCDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDOK, &CMFCDlg::OnBnClickedOk)
	ON_BN_CLICKED(IDC_BUTTON1, &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值