首页 > 系统相关 >dll注入 进程中注入WPF dll

dll注入 进程中注入WPF dll

时间:2023-01-17 12:33:38浏览次数:63  
标签:return System dll using WPF CLR 注入

dll注入 进程中注入WPF dll

介绍

尝试一下向进程中注入 WPF应用程序

为什么直接注入不可以

失败的原因如下

  1. .NET DLL(也称为托管 DLL)不能注入到尚未加载 .NET 运行时的远程进程中。(目标进程并没有加载.net环境)
  2. 注入之后 目标进程没有调用.Net dll里面的方法

1.编写WPF类库

内容如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace mytestDLL
{
    public class Class1
    {
        public static int TestMethod(string TestParam)
        {
            MessageBox.Show($"我们已经成功打入敌人的内部!{TestParam}");
            return 0;
        }
    }
}

生成 然后获取 mytestDLL.dll

2.编写C++类库

我们编写一个C++类库 在里面动态加载.net 运行环境

代码如下


#include <metahost.h>
#pragma comment(lib, "mscoree.lib")
int main()
{
	ICLRMetaHost* metaHost = NULL; //Declare our CLR Meta Host value as a NULL
	ICLRRuntimeInfo* runtimeInfo = NULL; //Declare our CLR Runtime Info as a Null
	ICLRRuntimeHost* runtimeHost = NULL; //Delcare our CLR HOST as a NULL

	if (CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&metaHost) == S_OK) //If Creating CLR Instance with follow parameters is successful
		if (metaHost->GetRuntime(L"v4.0.30319", IID_ICLRRuntimeInfo, (LPVOID*)&runtimeInfo) == S_OK) //If getting Runtime version is successful
			if (runtimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)&runtimeHost) == S_OK) //If getting the interface with the follow parameters is successful
				if (runtimeHost->Start() == S_OK) //Start the CLR (If it is successful)
				{
					DWORD pReturnValue; //Declare our return value as a DWORD

					//Invoke our method through CLR host using following parameters
					runtimeHost->ExecuteInDefaultAppDomain(L"D://mytestDLL.dll", L"mytestDLL.Class1", L"TestMethod", L"It works!!", &pReturnValue);

					//OPTIONAL: You can keep the CLR Opened depending on your needs
					runtimeInfo->Release();
					metaHost->Release();
					runtimeHost->Release();
				}
	return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	{
		auto Thread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)main, 0, 0, 0);
		if (Thread)
			return TRUE;
		else
			return FALSE;
	}
	break;
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}
					runtimeHost->ExecuteInDefaultAppDomain(L"D://mytestDLL.dll", L"mytestDLL.Class1", L"TestMethod", L"It works!!", &pReturnValue);

//这行代码就是我们在C++调用C#类库的函数,这里采用绝对地址

生成C++的 dll

3. 借助Dll注入工具注入

注入我们编写的C++类库的dll

我用的dll注入工具

Release v3.7.3 · master131/ExtremeInjector (github.com)

也可以自己编写dll注入。

注入C++dll即可

注意 32位应用程序不能注入64位dll

效果

随便找个qq 注入 如图

标签:return,System,dll,using,WPF,CLR,注入
From: https://www.cnblogs.com/guanyug/p/17057541.html

相关文章

  • 在WPF程序中,使用Freetype显示字体
    本人使用WPF开发了一款OFD阅读器,显示字体是阅读器中最重要的功能。处理字体显示有多种方案,几易其稿,最终选用Freetype方案。本文对WPF中如何使用了Freetype做简单描述。OFD......
  • 学习笔记——Spring底层IOC实现;Spring依赖注入数值问题;Spring依赖注入方式
    2023-01-14一、Spring底层IOC实现1、IOC:将对象的控制器反转给Spring2、BeanFactory与ApplicationContext(1)BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,是面向......
  • Spring 依赖注入
    依赖注入(DI)是一种设计模式,可以从编程代码中删除依赖,以便可以轻松管理和测试应用程序。依赖注入使我们的编程代码松散耦合。为了更好地理解DI,让我们首先了解依赖关系查......
  • Hack The Box系列——【Markup】XML外部实体注入(XXE)
    一、XML概述可扩展标记语言(英語:Extensible Markup Language,简称:XML)是一种标记语言。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可......
  • SQL注入练习
    1.确定功能点是否与数据库存在交互可能,参数是否可控2.确定功能点是否注入点id=1and1=2后面用hackbar64编码3.确定功能点对应的注入语句原型与注入参数类型判断是数字型......
  • 界面组件DevExpress WPF v22.2最新版本系统环境配置要求
    DevExpressWPF 拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序......
  • IoT Network DLL 笔记
    Connection-orientedvsConnectionlessServiceDataLinkLayer:  TheLogicalLinkControlsublayer  TheMediaAccessControl(MAC)sublayerUnacknowledge......
  • WPF StreamGeometry
    使用路径标记语法StreamGeometry来设计最大化最小化恢复和关闭按钮,以下为恢复按钮的路径,和拿邮件系统按钮做了对比,完全吻合前一张图片设置了不透明度为40后一张为邮......
  • 利用@Autowire注入List/Map
    Autowired注解以往我认知里@Autowire可以注入单个Bean,但实际上它可将所有继承了相同接口的Bean注入为List.此外它还可以自动导入{beanName,interface}形式的Map.话不......
  • 6.DI依赖注入
    1.构造器注入  前面已经使用过2.set注入【重点】  依赖注入:set注入      依赖:bean对象的创建依赖于spring容器    注入:bean对象中的所有属性由spring容......