admin管理员组文章数量:1567037
远程dll注入到QQ
逻辑:
1.获取QQ的进程ID;
2.打开进程获取进程句柄,从而对进程进行操作;
3.对进程句柄进行操作,开辟一块空间,让目标进程进行调用我们所写的东西;
4.往开辟好的内存中写入数据;
5.设置何时调用我们所写的东西(QQ会加载各种dll,当调用LoadLibraryA【Kernel32.dll这个里面的函数】时,就会调用我们所写的东西);
6.开辟一个远程线程去调用所写的东西;
程序运行截图如下:
输入QQ的PID:
然后QQ就被注入掉了!
如下图:
首先看下程序结构:
下面来看看源码:
main.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
int main(){
BOOL bRet = FALSE;
HANDLE hProcess = INVALID_HANDLE_VALUE;
BYTE *pbProcessAddr = nullptr;
do{
printf("输入PID:");
DWORD dwPID = 0;
scanf("%d", &dwPID);
//打开进程,获取进程句柄,使用进程句柄操作进程
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
if(INVALID_HANDLE_VALUE == hProcess){
break;
}
//在对方的进程中分配一块内存,让我们写东西
char szDllPath[MAX_PATH] = {0};
GetCurrentDirectoryA(MAX_PATH, szDllPath);
strcat(szDllPath, "\\DllDemo.dll");
int nPathLen = (strlen(szDllPath) + 1);
pbProcessAddr = (BYTE*)VirtualAllocEx(hProcess, nullptr, nPathLen, MEM_COMMIT, PAGE_READWRITE);
if(!pbProcessAddr){
break;
}
//往分配好的内存中写入数据
if(0 == WriteProcessMemory(hProcess,pbProcessAddr, szDllPath, nPathLen, nullptr)){
break;
}
//让其执行我们写入的东西
//启动一条远程线程,执行代码,注入DLL,目的是加载DLL
//LoadLibrary(); //传需要加载的dll的名字, 会先找当前目录下,然后找系统目录
//创建并执行远程线程
PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("Kernel32"), "LoadLibraryA");
if(!pfnStartAddr){
break;
}
HANDLE hThread = CreateRemoteThread(hProcess, nullptr, 0, pfnStartAddr, pbProcessAddr, 0, nullptr);
if(!hThread){
break;
}
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
bRet = TRUE;
}while (FALSE);
if(!bRet){
printf("错误代码:%d", GetLastError());
}
if(pbProcessAddr){
VirtualFreeEx(hProcess,pbProcessAddr, 0, MEM_RELEASE);
}
if(INVALID_HANDLE_VALUE != hProcess){
CloseHandle(hProcess);
}
system("pause");
return 0;
}
dll直接生成,修改dllmain.cpp内容如下:
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBox(nullptr, L"已经成功打入敌人内部", L"报告首长", MB_OK);
case DLL_THREAD_ATTACH:
MessageBox(nullptr, L"敌人已经运行了我", L"报告首长", MB_OK);
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
版权声明:本文标题:C++远程dll注入到QQ聊天工具 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1725632200a1033848.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论