J'ai injecté une DLL .NET managée dans un processus .NET.
J'ai vu des gens ici sur StackOverflow dire que vous pouvez ensuite appeler les fonctions de la DLL injectée en utilisant Reflection. C'est apparemment la technique que Snoop utilise.
Est-ce correct? Si oui, comment cela pourrait-il être fait?
Merci d'avance.Est-ce que la réflexion peut m'aider à appeler une fonction dans une DLL injectée?
0
A
Répondre
2
Vous pouvez utiliser la réflexion. Voici un exemple:
class Program
{
static void Main()
{
var assembly = Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
var serverType = assembly.GetType("System.Web.HttpUtility", true);
var method = serverType.GetMethod("HtmlEncode", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(string) }, null);
var result = method.Invoke(null, new[] { "<some value>" });
Console.WriteLine(result);
}
}
0
voir ci-dessous
0
Voici quelques exemples de code pour ce faire:
// Get all loaded assemblies in current application domain
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
// Get type of int
Type intType = assemblies.Select(a => a.GetType("System.Int32")).First();
// Create object of int using its type
Object intObj = Activator.CreateInstance(intType);
// Call int.ToString() method which returns '0'
String result = intObj.GetType().GetMethod("ToString", new Type[] { }).Invoke(intObj, null).ToString();
0
grand article par Eric Gunnerson, seule mise en garde est à surveiller pour les politiques de sécurité, car elles peuvent parfois empêcher le chargement dynamique des assemblages.
Pour autant que je peux voir, il charge l'Assemblée dans le processus en cours d'exécution et appelle ensuite la méthode. Correct? Je pensais à la manière d'appeler la fonction dans l'espace de processus injecté. Comme je l'ai dit, je ne sais pas si cela peut même être fait. Merci d'avoir répondu. – prettyCode