
مكتبة خفيفة الوزن تتيح القدرة على تعيين كل من التجميعات الأصلية والمُدارة في الذاكرة إما باستخدام حقن العملية لعملية يحددها المستخدم أو الحقن الذاتي.
Memory Mapper هي مكتبة خفيفة الوزن تتيح القدرة على تعيين كل من التجميعات الأصلية والمدارة في الذاكرة إما باستخدام حقن العملية لعملية يحددها المستخدم أو الحقن الذاتي؛ وهي تقنية حقن تجميع في العملية الجاري تشغيلها حاليًا والتي تحاول القيام بالحقن. تأتي المكتبة مع أدوات ليس فقط لتعيين التجميعات، ولكن مع إمكانيات لتشفير وفك تشفير وتوليد كميات مختلفة من البيانات القوية من الناحية التشفيرية.
ملاحظة: (للتجميع الجاري تشغيله باستخدام Memory Mapper فقط — وليس للملفات الصغيرة/الشيل كود)
استكشاف بنية 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)
يُسمح لأي شخص يحصل على نسخة من هذا البرنامج والملفات المرتبطة به (البرنامج) بالتعامل مع البرنامج دون أي قيود، بما في ذلك الحقوق غير المحدودة في استخدام ونسخ وتعديل ودمج ونشر وتوزيع وترخيص وبيع نسخ من البرنامج، وإذن للأشخاص الذين يتلقون البرنامج بممارسة ذلك، بشرط مراعاة الشروط التالية:
يجب تضمين إشعار حقوق النشر أعلاه وهذا الإذن في جميع النسخ أو الأجزاء الجوهرية من البرنامج.
البرنامج متاح "كما هو"، دون أي ضمان من أي نوع، صريحًا كان أم ضمنيًا، بما في ذلك على سبيل المثال لا الحصر ضمان القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال لا يكون المؤلفون أو أصحاب حقوق النشر مسؤولين عن أي دعوى أو أضرار أو مسؤولية أخرى، سواء كانت ناشئة عن عقد أو ضرر أو غير ذلك، تنشأ من أو فيما يتعلق بالبرنامج أو استخدامه أو التعاملات الأخرى في البرنامج.
باستثناء ما ورد في هذا الإشعار، لا يجوز استخدام اسم صاحب حقوق النشر المذكور أعلاه في الإعلانات أو الترويج لبيع أو استخدام أو غير ذلك من التعاملات في هذا البرنامج دون إذن كتابي مسبق.