吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2047|回复: 16
收起左侧

[讨论] 学习C++的第17天

  [复制链接]
博弟弟丶 发表于 2021-4-14 19:33
[C++] 纯文本查看 复制代码
#include <Windows.h>
#include <iostream>
BOOL injectDLL(DWORD	pid,const char *DLLname) {//BOOL类型的函数  一个是PID 一个是DLL名字

	HANDLE Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);//获取句柄
		if (Process==NULL)//判断是否为空
		{
			std::cout <<"获取进程句柄失败返回值为:"<< GetLastError() << std::endl;////getLastError  这个函数就是获取失败返回的值 看看返回的代码是多少
			return FALSE;
		}
		DWORD changdu = strlen(DLLname) + 1;//计算DLL的长度 ,并且要加上0结尾的长度,就是为了怕内存不够
		LPVOID allocex=VirtualAllocEx(Process,NULL,changdu, MEM_COMMIT, PAGE_READWRITE);//在目标进程分配内存
		if (allocex==NULL)//判断是否为空
		{
			std::cout << "分配内存失败返回值为:" << GetLastError() << std::endl;//getLastError  这个函数就是获取失败返回的值 看看代码是多少
			CloseHandle(Process);//关闭进程句柄
			return FALSE;
		}
		BOOL WPM =WriteProcessMemory(Process,allocex,DLLname,changdu,NULL);//拷贝DLL路径名到目标进程的内存中
		if (!WPM)
		{
			std::cout << "拷贝DLL到内存失败返回值为:" << GetLastError() << std::endl;//getLastError  这个函数就是获取失败返回的值 看看代码是多少
			CloseHandle(Process);//关闭进程句柄
			return FALSE;
		}
		HMODULE hmodule = GetModuleHandle("KERNEL32.dll");  //获取系统DLLKernel32.dll
		if (!hmodule)//判断
		{
			std::cout << "系统DLL获取失败返回值为:" << GetLastError() << std::endl;//getLastError  这个函数就是获取失败返回的值 看看代码是多少
			return FALSE;
		}
		DWORD GPA=(DWORD)GetProcAddress(hmodule, "LoadLibraryA");//获取LoadLibraryA函数地址  在补充一点 LoadLibraryA 是多字节版本   LoadLibraryW是 Unicode版本
		if (!GPA)//判断
		{
			std::cout << "A函数加载失败返回值为:" << GetLastError() << std::endl;//getLastError  这个函数就是获取失败返回的值 看看代码是多少
			CloseHandle(Process);//关闭句柄
			CloseHandle(hmodule);//关闭DLL
			return FALSE;
		}
		HANDLE CRT=CreateRemoteThread(Process,NULL,0,(LPTHREAD_START_ROUTINE)GPA,allocex,0,NULL);//创建远程线程,加载DLL
		if (!CRT)
		{
			std::cout << "远程线程加载失败返回值为:" << GetLastError() << std::endl;//getLastError  这个函数就是获取失败返回的值 看看代码是多少
			CloseHandle(Process);//关闭句柄
			CloseHandle(hmodule);//关闭DLL
			return FALSE;
		}
		CloseHandle(Process);//最后在关闭句柄
		return true;
};
int main() {
	
	injectDLL(3224,"D:\\C++日常练习代码\\Dll1\\Debug\\Dll1.dll" );//调用这个函数的时候  可能会出现失败  就好比如我注入计算器  他给我返回的是拒绝被访问(错误代码为5),所以说知道这个原理就行了 

	return 0;

};

免费评分

参与人数 2吾爱币 +4 热心值 +2 收起 理由
debug_cat + 1 + 1 我很赞同!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

骄阳似我 发表于 2021-4-14 19:49
请问下你是 零基础学的还是怎么学的啊?
wxbb979 发表于 2021-4-14 19:58
Rodriguezs 发表于 2021-4-14 20:01
零基础17天就DLL注入了,可这种写法,像带类的C了。
小任要努力 发表于 2021-4-14 20:08
我也想学一学可是没有时间
湖北吴彦祖 发表于 2021-4-14 20:29
默默支持你。
中本聪 发表于 2021-4-14 20:41
支持支持
smilencetion 发表于 2021-4-14 20:44
这是在学Win32吧
头像被屏蔽
tlf 发表于 2021-4-14 21:05
提示: 作者被禁止或删除 内容自动屏蔽
不忘形影 发表于 2021-4-14 21:34
请教楼主是跟着哪个教程学的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-23 19:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表