微信Hook实战记录2:动手实现恶意dll内存插入器

本文介绍如何使用C++编写一个内存注入工具,将恶意DLL注入到微信进程中。通过Hook技术,详细讲解了获取微信PID、申请内存、注入DLL路径以及调用Kernel32.dll的LoadLibraryA/W方法实现DLL注入的步骤。最后,讨论了恶意DLL可能实现的功能,如监控聊天和自动操作。

Hook任何软件,整体思路都是通过内存调试软件对软件运行时内存进行断点调试,找到想要hook的内存地址,转为可以通过程序主dll可以获得的相对地址,然后再此处插入自己的恶意汇编代码,如果代码比较复杂,还需要编写寄存器保护逻辑,避免自己的恶意代码修改了寄存器中的值后,程序正常的逻辑无法运行。

前言

在上一篇文章「微信Hook实战记录 1:找到个人信息」中,介绍了如何使用OD与CE来找到微信中存放个人信息的内存位置,本篇文章尝试通过C++编写一个简单的内存注入工具,将我们自己的恶意dll注入到微信的内存中。

本文记录了大量细节,完全可以模仿复现相同的效果。

内存注入工具的编写

打开 Visual Studio 2019(下载的时候勾选 C++ 桌面支持,6.9G左右),选择创建新项目

选择创建 Windows 桌面向导

然后创建就可以了,这里创面项目名为 Project1

创建完后,VS 会为我们创建一个默认的界面,我们在 解决方案 -> 源文件 中找到 Project1.cpp,这个文件就是我们要写逻辑的主要界面

将其中多余的代码删除,就留下如下代码

// Project1.cpp : 定义应用程序的入口点。
//

#include "framework.h"
#include "Project1.h"

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPWSTR    lpCmdLine,
	_In_ int       nCmdShow)
{
   
   
    return 0;
}

wWinMain 是界面程序的入口,所有不必删除

接着将 解决方案 --> 资源文件 中的内容删除,这是 VS 默认创建好的,删除后,自己新建一个资源文件

选择 Dialog,即弹出框

调整一下创建出的按钮位置以及整体大小

要设置按钮与整体的属性,如按钮要设置其内容与ID,而整体Dialog也要设置一下其ID,可以右键点击 --> 属性

其他控制以相同的方式去设置,设置后后,就可以写代码了

首先修改一下 Project1.h 中的内容,如下

#pragma once

#include "resource1.h"

具体内容要看你VS为你生成了什么,前面我们通过图像界面操作后,VS会生成的相应的头文件,这里我生成了 resource1.h 的头文件,其内容如下:

//{
   
   {NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 Project1.rc 使用
//
#define ID_MAIN                         101
#define UN_DLL                          1001
#define INJECT_DLL                      1002

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        103
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1003
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

#endif

可以看出,其实就是我们设置的ID等内容

接着来修改一下 Project1.cpp, 其 wWinMain 方法修改如下:

#include "framework.h"
#include "Project1.h"
#include <TlHelp32.h>  
#include <stdio.h>

// 微信进程名
#define WECHAT_PROCESS_NAME "WeChat.exe"

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPWSTR    lpCmdLine,
	_In_ int       nCmdShow)
{

	// hInstance 将句柄传递给弹窗  
	// 传入 Dialgo 主体ID
	// DialogProc 回调函数,是一个指针,即该函数的地址
	DialogBox(hInstance, MAK
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值