【原创】通过duilib界面库编写PC 微信注入工具(下)

【原创】通过duilib界面库编写PC 微信注入工具(下)

  • 一、如何将编写好的DLL注入到微信的进程
    • 1.注入思路
    • 2.代码编写

在前面我们编写好了DLL 那么我们如何注入到微信的进程,在这篇文章我们将完整的实现 将前面编写的DLL 注入到微信的进程

相关文章
PC微信hook基础框架代码编写–>获取微信日志
https://blog.csdn.net/tuoguochen/article/details/127669503

【原创】通过duilib界面库编写PC 微信注入工具(上)
https://blog.csdn.net/tuoguochen/article/details/127683655

一、如何将编写好的DLL注入到微信的进程

1.注入思路

用一个dll动态库将代码封装,首先整理 整个注入流程的思路,这里有注入有很多方法,先编写一个简单的注入流程 通过CreateRemoteThread远程注入函数
具体参考api:
https://learn.microsoft.com/zh-cn/windows/win32/api/processthreadsapi/nf-processthreadsapi-createremotethread

2.代码编写

创建项目(在上一篇文章的项目下创建子项目 dll工程项目) 并且 创建InjectTool 类

InjectTool.h 代码

#pragma once
#define DLL_REMOTE_NAME ("WechatHook.dll")
INJECT_API DWORD                                     WeChatInjectTool(); //注入dll

InjectTool.cpp代码

#include "pch.h"
#include "InjectTool.h"
//************************************
// 函数名称: GetCurrentDirectry
// 函数说明: 获取文件路径
// 作者名称: 张国五
// 返回  值: char*
//************************************
char*  GetCurrentDirectry()
{char* dir = _getcwd(NULL, 0);return dir;
}// 获取动态库
std::string GetDLLPath(LPCSTR pDLL)
{// 首先拼接当前目录string strSecarchPath;strSecarchPath.append(_getcwd(0, NULL));strSecarchPath.append("\\*");// 准备一个结构体_finddata_t fd;// 检查当前路径文件int hFile = _findfirst(strSecarchPath.c_str(), &fd);if (hFile == 0){return "";}do{// 过滤当前目录和上一级目录if (strcmp(".", fd.name) == 0 || strcmp("..", fd.name) == 0){continue;}if (strcmp(fd.name, DLL_REMOTE_NAME) == 0){return fd.name;}} while (_findnext(hFile, &fd) == 0);return "";
}
//************************************
// 函数名称: ProcessNameFindID
// 函数说明: 通过进程名称获取id
// 作者名称: 张国五
// 返回  值: DWORD
// 传入参数: PCWSTR ProcessName
//************************************
DWORD  ProcessNameFindID(PCWSTR ProcessName)
{// 创建快照HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);//保存进程信息的结构体PROCESSENTRY32 pe32 = { 0 };pe32.dwSize = sizeof(PROCESSENTRY32);//遍历快照if (Process32First(hSnapshot, &pe32)){do{//如果当前模块的进程和要找的进程名一致if (StrCmpW(pe32.szExeFile, ProcessName) == 0){//找到了目标进程 返回进程IDreturn pe32.th32ProcessID;}} while (Process32Next(hSnapshot, &pe32));}return 0;
}//************************************
// 函数名称: WeChatInjectTool
// 函数说明: 注入dll
// 作者名称: 张国五
// 返回  值: void
//************************************
DWORD  WeChatInjectTool()
{OutputDebugStringA("被调用");//获取当前工作目录char* CurDir = GetCurrentDirectry();//获取当前目录下的dll名称std::string DllName = GetDLLPath(DLL_REMOTE_NAME);//dll全路径string dllpath;dllpath.append(CurDir);dllpath.append("\\");dllpath.append(DllName);//获取微信进程的PIDDWORD dwPid = ProcessNameFindID(L"WeChat.exe");//打开微信进程HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);if (hProcess == NULL){return -1;}//在微信进程中申请一块内存LPVOID lpAddress = VirtualAllocEx(hProcess, NULL, MAX_PATH, MEM_COMMIT, PAGE_EXECUTE_READWRITE);if (lpAddress == NULL){return -2;}//写入要注入的dll的绝对路径到微信进程DWORD dwWrite = 0;BOOL bSuccess = WriteProcessMemory(hProcess, lpAddress, dllpath.c_str(), MAX_PATH, &dwWrite);if (bSuccess == FALSE){return -3;}//获取LoadLibraryA函数地址//拿到kernel32的基地址HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");FARPROC pLoadLibraryAddr = GetProcAddress(hKernel32, "LoadLibraryA");if (pLoadLibraryAddr == NULL){return -4;}//用`CreateRemoteThread`远程线程注入dllHANDLE hRemote = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pLoadLibraryAddr, lpAddress, 0, NULL);if (hRemote == NULL){return -5;}//关闭句柄CloseHandle(hProcess);CloseHandle(hRemote);return 1;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部