内存映射器是一个轻量级库,允许通过用户指定的进程注入或自注入(将程序集注入当前尝试注入的进程)的方式,将原生和托管程序集映射到内存中。该库不仅提供映射程序集的工具,还具备加密、解密和生成各种加密强度数据的能力。
注意: (仅适用于使用内存映射器的运行程序集——不适用于存根/Shellcode)
探索PE(可移植可执行文件)的结构
从托管和原生程序集中读取资源
使用进程注入和自注入将原生程序集映射到内存
使用进程注入和其他技术将托管程序集映射到内存
获取任意大小文件的字节数组
加密和解密整个文件及原始字节
生成和验证文件及原始字节的校验和
使用 SecureRandom 对象生成加密强度高的随机数据
内置多种加密和哈希算法
此示例演示如何使用 NativeLoader 工具将原生程序集静态映射到内存。该示例通过从磁盘读取文件的所有字节,然后将与这些字节关联的PE(可移植可执行文件)直接注入内存。将原生加载器与我的 Amaterasu 库中的动态代码编译结合使用,可以实现所有代码在内存中的即时编译和注入。
using System;
using System.IO;
using System.Reflection;
using MemoryMapper;
namespace Example
{
class Program
{
static void Main(string[] args)
{
// 获取要加载文件的字节
var filePath = "FileToReadBytesOf";
var fileBytes = File.ReadAllBytes(filePath);
// 检查程序集是托管还是原生
bool isManaged = false;
try
{
// 注意——这是检查程序集的最简单方式之一
var assemblyName = AssemblyName.GetAssemblyName(filePath);
if (assemblyName != null)
if (assemblyName.FullName != null)
isManaged = true;
}
catch { isManaged = false; }
// 如果确实是原生程序集,则尝试加载
if (!isManaged)
{
NativeLoader loader = new NativeLoader();
if (loader.LoadAssembly(fileBytes))
Console.WriteLine("程序集加载成功!");
else
Console.WriteLine("程序集加载失败。");
}
// 等待用户交互
Console.Read();
}
}
}
此示例演示如何通过读取字节(或使用嵌入式字节数组)将托管程序集静态映射到内存,然后使用 ManagedLoader 注入到当前运行的进程中。提供的 ManagedLoader 工具几乎可以映射任何托管程序集。
using System;
using System.IO;
using System.Reflection;
using MemoryMapper;
namespace Example
{
class Program
{
static void Main(string[] args)
{
// 获取要加载文件的字节
var filePath = "FileToReadBytesOf";
var fileBytes = File.ReadAllBytes(filePath);
// 检查程序集是托管还是原生
bool isManaged = false;
try
{
// 注意——这是检查程序集的最简单方式之一
var assemblyName = AssemblyName.GetAssemblyName(filePath);
if (assemblyName != null)
if (assemblyName.FullName != null)
isManaged = true;
}
catch { isManaged = false; }
// 如果确实是托管程序集,则尝试加载
if (isManaged)
{
// 设置代理进程的名称——我们将要注入的进程
var processName = "explorer.exe"; // 也可以是当前进程的名称,用于自注入
ManagedLoader loader = new ManagedLoader();
if (loader.LoadAssembly(fileBytes, processName))
Console.WriteLine("程序集加载成功!");
else
Console.WriteLine("程序集加载失败。");
}
// 等待用户交互
Console.Read();
}
}
}
图标: DesignBolts
http://www.designbolts.com/
版权所有 © ∞ Jason Drawdy
保留所有权利。
MIT许可证(MIT)
特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人,不受限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件副本的权利,并允许获得本软件的人这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对因本软件、使用或其他交易而产生的任何索赔、损害或其他责任负责,无论是合同诉讼、侵权行为或其他方式。
除非本通知另有规定,未经上述版权持有人事先书面授权,不得在广告或其他促销活动中使用其名称来推广本软件的销售、使用或其他交易。