代码比较乱 不过还是好用的 DLL注入

本文介绍了一种在Windows环境下实现DLL注入的技术。通过获取目标进程ID并利用远程线程注入DLL,实现了外部DLL文件加载到指定进程的效果。文章提供了完整的C++代码示例,包括获取进程ID、内存分配、远程线程创建等关键步骤。

// fuck of.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <tlhelp32.h>
DWORD GetProcessId (LPSTR szProcName);
BOOL DllInject(DWORD dwProcessId, LPSTR lpszDllPath);
DWORD GetProcessId (LPSTR szProcName){
 PROCESSENTRY32 pProcess = {sizeof(PROCESSENTRY32)}; 
 HANDLE hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPALL, NULL); 
 if(Process32First(hSnapshot, &pProcess) == NULL)  
 {return FALSE;} 
 do {if((strcmp(*(&szProcName), pProcess.szExeFile) == NULL))  
 {   CloseHandle(hSnapshot);   
 return pProcess.th32ProcessID;  
 } 
 }
 while (Process32Next(hSnapshot, &pProcess));  
 CloseHandle(hSnapshot); return FALSE;}
BOOL DllInject(DWORD dwProcessId, LPSTR lpszDllPath){  
 HMODULE hmKernel = GetModuleHandle("Kernell32.dll");  
 if(dwProcessId == NULL)    {    return FALSE;   }  
 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);  
 if(hProcess == NULL)    {    return FALSE;   }   
 CHAR szPath[_MAX_PATH] = "";   
 GetCurrentDirectoryA(_MAX_PATH, szPath);
 strcat(szPath,  "//");   
 strcat(szPath,  lpszDllPath);   
 int nPathLen = strlen(szPath);   
 LPVOID lpvMem = (PVOID)VirtualAllocEx( hProcess, NULL, strlen(szPath), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);   
 WriteProcessMemory(hProcess, (PVOID)lpvMem, szPath, strlen(szPath), NULL);   
 HANDLE hThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibraryA, (PVOID)lpvMem, 0, NULL);   
 DWORD dwWaitResult = 0, dwExitResult = 0; 
 if(hThread == NULL) {  return FALSE; }    
 dwWaitResult = WaitForSingleObject(hThread, 10000);   
 GetExitCodeThread(hThread, &dwExitResult);   
 CloseHandle(hThread);   
 VirtualFreeEx(hProcess, lpvMem, strlen(lpszDllPath), MEM_DECOMMIT | MEM_RELEASE); 
 CloseHandle(hProcess);    return ((dwWaitResult != WAIT_TIMEOUT) && (dwExitResult > 0));}
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
 DWORD dwProcess = GetProcessId("calc.exe");   
 DllInject(dwProcess, "inject.dll");  
 return 0;
}

 

大家不要干坏事呀!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值