托管代码的进程注入&CLR宿主

在前面关于CLR寄宿的几篇博客(CLR寄宿(上) MSCOREE.DLL,CLR寄宿(中) 托管exe文件的加载和执行,CLR寄宿(下) 托管宿主)中,介绍了常用的宿主接口。宿主接口,允许我们使用非托管代码创建CLR宿主,从而启动CLR,运行托管代码,控制垃圾回收……等一系列功能。本篇博文要讲解的是使用CLR宿主的一个场景——进程注入。

进程注入是一种将代码注入到已有进程地址空间内,并执行的技术。进程注入的技术有很多,本文基于LoadDLL&CreateRemoteThread技术来讲解。

一般而言,我们会将要执行的代码编译到DLL文件里,然后加载到目标进程内执行。对于一个非托管DLL直接加载并执行就可以了,但是如果想把一个托管DLL加载到进程中并执行就要费一番周折,因为托管代码是不能直接执行的,要经过CLR的二次编译。如何解决这个问题呢?

因为环境对进程注入的影响很大,我这里先列出我实验的环境,再具体讲解。

系统:windows 7 ,64位

.net :4.0

开发工具:vs2010 sp1

测试程序:均为32位程序

1.1 实现非托管代码调用托管代码

这里用老外的一张图来简单描述下我们的托管代码是如何在目标进程内执行的。

首先使用具有注入功能的程序将一个非托管的C++DLL注入到目标进程中,然后该非托管DLL启动CLR,并加载要执行的托管DLL,最后调用CLR执行托管代码。

过程看起来很简单,这里要解决的第一个问题是创建一个C++DLL,作为CLR宿主。

打开VS2010,选择c++ Win32Project项目。

确定之后点下一步,应用类型选DLL,附加选项中选择空项目。

我创建的项目名称为:ManageCodeInvoker,如下图:

时间: 2024-11-30 22:28:22

托管代码的进程注入&CLR宿主的相关文章

十种流行进程注入技术详细分析

本文讲的是十种流行进程注入技术详细分析, 前言 流程注入是一种恶意软件和无文件间谍攻击中使用的最为广泛的漏洞攻击技术,而且在攻击时还需要在另一个进程的地址空间内运行自定义代码.过程注入除了提高了攻击的隐蔽性之外,也实现了持久性攻击.尽管目前有许多流程注入技术,但在本文中,我只介绍十种在野外看到的能够运用另一个进程运行恶意代码的技术.在介绍的同时,我还会提供这些技术的屏幕截图,以便于逆向工程和恶意软件分析,协助针对这些常见技术进行的检测和防御. 一.经典的DLL注入 这种技术是用于将恶意软件注入另

32位程序对64位进程的远程注入实现

本文讲的是32位程序对64位进程的远程注入实现, 0x00 前言 要对指定进程进行远程注入,通常使用Windows提供的API CreateRemoteThread创建一个远程线程,进而注入dll或是执行shellcode. 在64位系统下,该方法需要特别注意,注入的目标进程要同程序的结构保持一致,即32位程序只能对32进程作注入,64位程序只能对64位进程作注入,32位程序对64位程序进行注入时会失败(32位和64位的结构不同). 然而,在某些特殊的环境下,无法提前预知目标进程的结构,准备两个

进击的Android注入术

转自:http://blog.csdn.net/l173864930/article/details/38455951 进击的Android注入术<一> 写在前面 这个系列本来是在公司的一个分享,内容比较多,所以就把这个PPT重新组织整理成博客,希望对大家学习有所帮助.我会先以一个"短信拦截"作为例子,抛出问题,并提出了一种基于"注入"的技术方案达到提高拦截优先级,接着再重点讲解注入的技术细节.最后,我会跟大家分享一个我业余时间开发注入框架--AIM(A

一起谈.NET技术,关于ASP.NET与CLR相互关系的一些总结

CLR(COM服务器) CLR作为一个COM服务器实现在MSCorWks.dll文件中.安装.NET Framework时,表示CLR的COM服务器被注册到Windows的注册表里. MSCorEE.dll(垫片) MSCorEE.dll的职责是判断创建何种版本的CLR. 非托管应用程序宿主调用MSCorEE.dll(shim)中CorBindToRuntimeEx函数或者另一个相似的函数来创建CLR COM的实例.      一台机器可以安装多个版本的CLR,但在机器中只有一个版本的MSCor

暴力注入Explorer

        向一个运行中的进程注入自己的代码,最自然莫过于使用CreateRemoteThread,如今远线程注入已经是泛滥成灾,同样的监测远线程注入.防止远线程注入的工具也举不胜举,一个木马或后门启动时向Explorer或IE的注入操作就像在自己脸上写上"我是贼"一样.    用户态代码想要更隐蔽地藏身于别的进程,就应该在注入的环节隐蔽自己的行为.下面就介绍一种非常简单不过比较暴力的方法,给出的示例为在Explorer里加载自己的dll.    首先提到的就是一个API:Queu

NT环境下进程隐藏的实现

在NT环境下隐藏进程,也就是说在用户不知情的条件下,执行自己的代码的 方法有很多种,比如说使用注册表插入DLL,使用Windows挂钩等等.其中比较有 代表性的是Jeffrey Richer在<Windows核心编程>中介绍的LoadLibrary方法和 罗云彬在<windows环境下32位汇编语言程序设计>中介绍的方法.两种方法的 共同特点是:都采用远程线程,让自己的代码作为宿主进程的线程在宿主进程的 地址空间中执行,从而达到隐藏的目的.相比较而言,Richer的方法由于可以使

CLR全面透彻解析: 使用CoreCLR编写Silverlight

Silverlight 2 包含对 Windows Presentation Foundation (WPF) UI 框架所做的大量 更改:新控件.丰富的网络 API 和数字版权管理 (DRM) 支持.Silverlight 2 中的一项主要更改就是能 够使用与 Microsoft .NET 兼容的语言编写 Web 客户端.在本文中,我将重点介绍 Silverlight 的开发核心:CoreCLR. 在过去的十几年中,我们已经拥有了许多不同的 Web 编程技术,从 CSS 到 ECMAScrip

svchost.exe是什么程序进程

简单的说:svchost.exe是一个属于微软Windows操作系统的系统程序,微软官方对它的解释是:Svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称.这个程序对系统的正常运行是非常重要,而且是不能被结束的. windows系统进程分为独立进程和共享进程两种,"svchost.exe"文件存在"%systemroot%system32"目录下,它属于共享进程.随着windows系统服务不断增多,为了节省系统资源,微软把很多服务做成共

多线程-C++怎么在一个进程里创建一个线程

问题描述 C++怎么在一个进程里创建一个线程 大家好,我用CreateProcess创建了一个进程,进程的句柄可以获取到, 请问能否通过此句柄创建一个此进程的子线程? 如果可以,如何实现? 多谢. 解决方案 createremotethread apihttp://blog.163.com/lhc__721721/blog/static/639133252010622359175/ 解决方案二: 创建一个线程创建一个线程vc创建一个线程和销毁的方法 解决方案三: 在程序中创建另一个进程的线程,要