
हल्का लाइब्रेरी जो उपयोगकर्ता द्वारा निर्दिष्ट प्रक्रिया के प्रक्रिया इंजेक्शन या स्व-इंजेक्शन का उपयोग करके मेमोरी में देशी और प्रबंधित असेंबली दोनों को मैप करने की क्षमता प्रदान करता है।
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)
{
// Get the bytes of the file we want to load.
var filePath = "FileToReadBytesOf";
var fileBytes = File.ReadAllBytes(filePath);
// Check if the assembly is managed or native.
bool isManaged = false;
try
{
// Note — this is one of the simplest variations of checking assemblies
var assemblyName = AssemblyName.GetAssemblyName(filePath);
if (assemblyName != null)
if (assemblyName.FullName != null)
isManaged = true;
}
catch { isManaged = false; }
// Try loading the assembly if it's truly native.
if (!isManaged)
{
NativeLoader loader = new NativeLoader();
if (loader.LoadAssembly(fileBytes))
Console.WriteLine("Assembly loaded successfully!");
else
Console.WriteLine("Assembly could not be loaded.");
}
// Wait for user interaction.
Console.Read();
}
}
}
यह उदाहरण दिखाता है कि कैसे एक मैनेज्ड असेंबली को मेमोरी में स्थैतिक रूप से मैप किया जाए — इसके बाइट्स पढ़कर या एम्बेडेड बाइट ऐरे का उपयोग करके — और फिर ManagedLoader का उपयोग करके वर्तमान में चल रही प्रक्रिया में इंजेक्ट किया जाए। लगभग किसी भी मैनेज्ड असेंबली को दिए गए ManagedLoader टूल का उपयोग करके मैप किया जा सकता है।
using System;
using System.IO;
using System.Reflection;
using MemoryMapper;
namespace Example
{
class Program
{
static void Main(string[] args)
{
// Get the bytes of the file we want to load.
var filePath = "FileToReadBytesOf";
var fileBytes = File.ReadAllBytes(filePath);
// Check if the assembly is managed or native.
bool isManaged = false;
try
{
// Note — this is one of the simplest variations of checking assemblies
var assemblyName = AssemblyName.GetAssemblyName(filePath);
if (assemblyName != null)
if (assemblyName.FullName != null)
isManaged = true;
}
catch { isManaged = false; }
// Try loading the assembly if it's truly managed.
if (isManaged)
{
// Set the name of a surrogate process - the process we'll inject into.
var processName = "explorer.exe"; // Can also be the current process's name for self-injection.
ManagedLoader loader = new ManagedLoader();
if (loader.LoadAssembly(fileBytes, processName))
Console.WriteLine("Assembly loaded successfully!");
else
Console.WriteLine("Assembly could not be loaded.");
}
// Wait for user interaction.
Console.Read();
}
}
}
आइकन: DesignBolts
http://www.designbolts.com/
कॉपीराइट © ∞ Jason Drawdy
सर्वाधिकार सुरक्षित।
The MIT License (MIT)
इसके द्वारा, किसी भी व्यक्ति को, जो इस सॉफ्टवेयर और संबंधित दस्तावेज़ फ़ाइलों ("सॉफ्टवेयर") की एक प्रति प्राप्त करता है, बिना किसी प्रतिबंध के सॉफ्टवेयर में डील करने की अनुमति निःशुल्क प्रदान की जाती है, जिसमें बिना किसी प्रतिबंध के सॉफ्टवेयर का उपयोग, प्रतिलिपि, संशोधन, विलय, प्रकाशन, वितरण, उप-लाइसेंस और/या बेचने के अधिकार शामिल हैं, और उन व्यक्तियों को ऐसा करने की अनुमति प्रदान करना जिन्हें सॉफ्टवेयर प्रदान किया गया है, निम्नलिखित शर्तों के अधीन:
उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सॉफ्टवेयर की सभी प्रतियों या महत्वपूर्ण भागों में शामिल होंगे।
सॉफ्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की वारंटी के, व्यक्त या निहित, जिसमें व्यापारिकता, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन न करने की वारंटी शामिल है, लेकिन इन्हीं तक सीमित नहीं है। किसी भी स्थिति में लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य दायित्व के लिए उत्तरदायी नहीं होंगे, चाहे वह अनुबंध, टोर्ट या किसी अन्य सिद्धांत पर आधारित हो, जो सॉफ्टवेयर या सॉफ्टवेयर के उपयोग या अन्य लेन-देन से उत्पन्न होता है।
इस नोटिस में शामिल को छोड़कर, उपरोक्त कॉपीराइट धारक का नाम पूर्व लिखित अनुमति के बिना विज्ञापन में या सॉफ्टवेयर की बिक्री, उपयोग या अन्य लेन-देन को बढ़ावा देने के लिए उपयोग नहीं किया जाएगा।