DLL注入与卸载

DLL注入与卸载DLL注入可用于编写外挂和病毒不易发现。voidCInjectDllToolDlg::StartInject(char*path,intpid){ intpathLen=strlen(path)+sizeof(char);//获取dll目录大小 HANDLEhPro=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); if(!

大家好,又见面了,我是你们的朋友全栈君。

DLL注入可用于编写外挂和病毒不易发现。

void CInjectDllToolDlg::StartInject(char *path, int pid)
{
	int pathLen = strlen(path)+sizeof(char);//获取dll目录大小
	HANDLE hPro = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
	if (!hPro)
	{
		MessageBox("打开进程失败", "警告", 0);
		return;
	}
	//在该进程申请内存,用来存放path数据
	LPVOID dllAddr = VirtualAllocEx(hPro, NULL, pathLen, MEM_COMMIT, PAGE_READWRITE);
	if (!dllAddr)
	{
		MessageBox("获取地址失败", "警告", 0);
		CloseHandle(hPro);
		return;
	}
	//在申请的内存中写入path
	DWORD wNum = 0;
	if (!WriteProcessMemory(hPro, dllAddr, path, pathLen, &wNum))
	{
		MessageBox("写入失败", "警告", 0);
		VirtualFreeEx(hPro, dllAddr, pathLen, MEM_DECOMMIT);
		CloseHandle(hPro);
		return;
	}
	//获取loadlibrary函数地址
	FARPROC pFun = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");

	if (!pFun)
	{
		MessageBox("获取函数失败", "警告", 0);
		VirtualFreeEx(hPro, dllAddr, pathLen, MEM_DECOMMIT);
		CloseHandle(hPro);
		return;
	}
	DWORD dwPid;
	HANDLE hThread = CreateRemoteThread(hPro, NULL, 0, (LPTHREAD_START_ROUTINE)pFun, dllAddr, 0, &dwPid);
	if (!hThread)
	{
		MessageBox("注入失败", "警告", 0);
		VirtualFreeEx(hPro, dllAddr, pathLen, MEM_DECOMMIT);
		CloseHandle(hPro);
		return;
	}
	DWORD errorNum = GetLastError();
	WaitForSingleObject(hThread, INFINITE);
	CloseHandle(hThread);
	CloseHandle(hPro);
}


这个只适用于xp系统,win7系统不可以随便CreateRemoteThread了,返回值一直为NULL

具体方法引用看雪:Vista&Win7下CreateRemoteThread应用的若干问题和解决方案

Dll卸载与注入流程大体相同,先创建 进程快照找到相应的线程模块,获取FreeLibrary地址,再创建远程线程卸载

void UnInjectDll(char *szDllName, DWORD dwPid)
{
	if(dwPid==0 || strlen(szDllName)==0)
	{
		AfxMessageBox("输入信息不全");
		return;
	}
	//创建进程快照
	HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPid);
	MODULEENTRY32 ME32 = {0};
	ME32.dwSize = sizeof(MODULEENTRY32);
	BOOL isNext = Module32First(hSnap,&ME32);
	BOOL flag = FALSE;
	while(isNext)
	{
		if(strcmp(ME32.szModule,szDllName)==0)
		{
			flag = TRUE;
			break;
		}
		isNext = Module32Next(hSnap,&ME32);
	}
	if(flag == FALSE)
	{
		AfxMessageBox("找不到目标模块");
		return;
	}
	CloseHandle(hSnap);
	HANDLE hPro = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);
	FARPROC pFun = GetProcAddress(GetModuleHandle("kernel32.dll"),"FreeLibrary");
	HANDLE hThread = CreateRemoteThread(hPro,NULL,0,(LPTHREAD_START_ROUTINE)pFun,ME32.szModule,0,NULL);
	if(!hThread)
	{
		AfxMessageBox("创建远程线程失败");
		return ;
	}
	AfxMessageBox("卸载成功");
	WaitForSingleObject(hThread,INFINITE);
	CloseHandle(hThread);
	CloseHandle(hPro);
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145594.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • 串口USART和UART「建议收藏」

    串口USART和UART「建议收藏」串口通信:UART是通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接受。UART主要用于主机与辅助设备通信。UART的功能计算器内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步通信。也就是CPU把准备写入串行设备的数据放到UART的寄存器中,再通过FIFO(FirstInputFirstOutput,先入先出队列)传到串行设备,提供了RS232数据终端设备接口。UART的主要功能分为:1、将计算机内部传送过来的并行数据转换.

  • 2022新UI美观发卡网源码下载+功能强大且齐全

    2022新UI美观发卡网源码下载+功能强大且齐全正文:程序没有更多的介绍,总的来说就是2022最新版本的,美观功能齐全无BUG,上传程序后,运行目录public,伪静态thinkPHP,域名/install.php进行安装,就是这么简单哈,程序没有马赛克的演示图我就放压缩包了,大家自行去查看吧。程序:lanzou.com/ieWX005hj7dc图片:…

  • [Android-ARCore开发]ARCore从入门到放弃2-Demo介绍和扩展

    昨天只是简单运行了官方的Demo,今天抽时间看了下文档和代码,大概了解一下原理。Demo功能很简单,打开之后自动检测平面,手指触摸平面会在触摸位置放置一个机器人。检测平面成功后如下面截图所示,可以看到很多蓝色小点和平面的菱形网状图。蓝色点称为锚点,结合手机传感器用于追踪手机移动。详细原理介绍参考官网介绍网格、小点和机器人都是使用OpenGL在SurfaceView上绘制的,看代码发现,当手指点击时

  • ipad越狱有什么坏处吗?_平板越狱有什么好处

    ipad越狱有什么坏处吗?_平板越狱有什么好处1. iPad越狱是什么?iPad越狱有什么好处和坏处?不越狱又有啥缺点?越狱就是解除一些原版固件的限制。最大的好处是可以安装激活成功教程的软件和游戏,这些软件和游戏本来都是收费的。而且,有些功能很强大的软件,并不是花钱能在官方的App Store里能买到的(某些有米之人或许会说“我就不越狱,我都花钱买正版”,我只能客气地说他只知其一不知其二),比如SBSettings, OpenSSH, Lockd

  • javaweb酒店管理系统源代码_java简单酒店管理系统代码

    javaweb酒店管理系统源代码_java简单酒店管理系统代码大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT)、PYTHON、PHP、C#、安卓等多项技术。今天将为大家分析一个小型酒店管理系统(当前酒店管理系统已经得到了充足的发展和完善,一些大的酒店购买了功能强大、数据量处理快速、客户行为研究的软件,借此来提升酒店的核心竞争力。但是对于一些中小规模的酒店而言,昂贵的系统花费、专人的维护是不现实的,也是非常不灵活的。…

  • 通过HTML和CSS设计一个静态网页(练习实例,附完整代码)

    通过HTML和CSS设计一个静态网页(练习实例,附完整代码)本文笔记基于「千古壹号」的GitHub项目:https://github.com/qianguyihao/web网页原址:博雅互动<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><metaname=”viewport”content=”…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号