`
zhangyafei_kimi
  • 浏览: 266142 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

自己用了很久的线程注入的代码

阅读更多
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

#pragma comment(lib, "Advapi32.lib")


BOOL SetPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege,BOOL bEnablePrivilege)//improve a privilege
{
	TOKEN_PRIVILEGES tp;
	LUID luid;

	if(!LookupPrivilegeValue(NULL,lpszPrivilege,&luid))
	{
		printf("\nLookupPrivilegeValue error:%d", GetLastError() ); 
		return FALSE; 
	}
	tp.PrivilegeCount = 1;
	tp.Privileges[0].Luid = luid;
	if (bEnablePrivilege)
		tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	else
		tp.Privileges[0].Attributes = 0;
	// Enable the privilege or disable all privileges.
	AdjustTokenPrivileges(
		hToken, 
		FALSE, 
		&tp, 
		sizeof(TOKEN_PRIVILEGES), 
		(PTOKEN_PRIVILEGES) NULL, 
		(PDWORD) NULL); 
	// Call GetLastError to determine whether the function succeeded.
	if (GetLastError() != ERROR_SUCCESS) 
	{ 
		//printf("AdjustTokenPrivileges failed: %u\n", GetLastError() ); 
		return FALSE; 
	} 
	return TRUE;
}



int main(int argc,char **argv)
{
	HANDLE hToken;
	char lpszDll[MAX_PATH];
	char szTargetExe[MAX_PATH];
	DWORD dwPID;
	HANDLE hProcess;
	DWORD dwSize, dwWritten;
	LPVOID lpBuf;

	DWORD dwID;
	LPVOID pFunc;
	HANDLE hThread;

	PROCESS_INFORMATION piProcInfo;
	STARTUPINFO siStartInfo;

	int ret = 1;

	if(argc!=3)
	{
		printf("Usage:%s ProcessName DllName",argv[0]);
		return 1;
	}


	strcpy(szTargetExe,argv[1]);
	strcpy(lpszDll,argv[2]);

	ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );
	ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
	siStartInfo.cb = sizeof(STARTUPINFO);


	if(!CreateProcessA(NULL,
		szTargetExe,       // command line
		NULL,          // process security attributes
		NULL,          // primary thread security attributes
		TRUE,          // handles are inherited
		CREATE_SUSPENDED,// creation flags
		NULL,          // use parent's environment
		NULL,          // use parent's current directory
		&siStartInfo,  // STARTUPINFO pointer
		&piProcInfo))  // receives PROCESS_INFORMATION
	{
		printf("CreateProcessA failed!!!\n");
		goto fail1;
	}

	dwPID = piProcInfo.dwProcessId;

	if(OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken))
		SetPrivilege(hToken,SE_DEBUG_NAME,TRUE);
	else
	{
		printf("OpenProcessToken failed!!!\n");
		goto fail1;
	}

	hProcess = OpenProcess( 
		PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, 
		FALSE, dwPID );
	if(hProcess ==NULL)
	{
		printf("OpenProcess failed\n");
		goto fail1;
	}

	dwSize = lstrlenA( lpszDll ) + 1;
	lpBuf = VirtualAllocEx( hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
	if ( NULL == lpBuf )
	{
		printf("VirtualAllocEx failed!\n");
		goto fail2;
	}

	if ( !WriteProcessMemory( hProcess, lpBuf, (LPVOID)lpszDll, dwSize, &dwWritten )
		|| dwWritten != dwSize)
	{
		printf("WriteProcessMemory failed!\n");
		goto fail3;
	}

	// 使目标进程调用LoadLibrary,加载DLL
	pFunc = LoadLibraryA;
	hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID );
	if(hThread == NULL)
	{
		printf("CreateRemoteThread failed!\n");
		goto fail3;
	}

	ResumeThread(piProcInfo.hThread);
	CloseHandle(piProcInfo.hThread);
	WaitForSingleObject(hThread, INFINITE);
	CloseHandle(hThread);
	ret = 0;
fail3:
	VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );
fail2:
	CloseHandle( hProcess );
fail1:
	if(ret == 1)
	{
		printf("Dll Injected Failed!!!\n");
		printf("GetLastError : %d\n", GetLastError());
	}
	else
		printf("Dll Injected Successfully!!!\n");
	return ret;
}
分享到:
评论

相关推荐

    利用输入法注入DLL

    用这个函数来注入DLL也是很不错的。但是测试发现它的注入能力似乎赶不上上面提到的 利用输入法来注入的办法,可以注入一般的程序和某些安全程序,但是对冰刃无效。而且它 有一个限制,就是系统中只能同时存在一个...

    一个聊天室实现源代码

    本资源提供的是一个实现聊天室功能的源代码,设计风格与QQ类似,具有很高的实用性。在本文中,我们将深入探讨聊天室的实现原理、核心技术和涉及到的关键技术点。 1. **实时通信基础** 聊天室的核心是实现实时通信...

    精通Java EE:精通Java EE 整合应用案例\源代码\源代码2-9章.

    8. **Java EE容器**:如Tomcat、Glassfish或WildFly等,它们提供了运行Java EE应用程序的环境,处理了线程管理、依赖注入等底层细节。 9. **整合应用**:将上述技术综合运用,实现模块化、可扩展的应用程序。例如,...

    M7lrvCms beta3.0最新破解版本

    3:修改cms识别功能的一个bug(这个bug出现很久了但是一直没发现)修改不支持https扫描指纹功能!!(以前代码没有处理https的功能) 4:修改搜索引擎模式,新增到8个搜索引擎,优化百度引擎不能采集详细url的问题...

    XISE WBMS管理 V8.86 破解版

    XISE已经很久没有再更新,感谢大家的支持 现将内部XISE-WBMS V8.86免费放出 自带23套模版 新增一句话可过安全狗,使用时请将杀软关闭使用。 新概念网站后台远程多功能管理系统——XISE 网站后台管理系统 已支持PHP...

    java开源包8

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包10

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    基于B/S的多人聊天java程序

    项目的成功运行和无bug状态意味着开发者遵循了良好的编程实践,包括充分的测试和调试,确保了代码的稳定性和可靠性。 【标签】:“B/S”、“java”、“多人聊天”、“多线程” - **B/S架构**:在这个聊天系统中,...

    JAVA面试很全的一个资料,不过仅针对面试哦,日常学习不合适。内容以问答形式。

    Java面试准备资料通常涵盖多个核心领域,包括JVM、Java集合框架、多线程并发、基础语法、Spring框架原理、微服务、网络编程、日志处理、分布式协调服务如Zookeeper、消息中间件如Kafka和RabbitMQ、NoSQL数据库如...

    Java编写的多人聊天室,实现了广播和私聊,有截图

    总的来说,这个Java聊天室项目涵盖了网络编程、多线程、UI设计等多个关键知识点,是一个很好的学习和实践Java编程技能的案例。通过这样的项目,开发者可以提升自己的网络通信能力,理解并发编程,以及掌握构建实时...

    java高级教程

    10. **Spring框架**:作为Java企业级应用的主流框架,Spring提供了依赖注入,AOP(面向切面编程),以及Web MVC等组件。理解Spring的核心概念,以及如何使用Spring Boot简化应用开发。 以上就是“Java高级教程”中...

    java开源包1

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包2

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包3

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包4

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包7

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包9

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

Global site tag (gtag.js) - Google Analytics