Injection de code avec C #
Pouvez-vous utiliser windows de crochets ou d'autres méthodes pour faire de l'injection de code en c#? J'ai vu beaucoup de choses au sujet de l'injection de code, mais tous sont en fait en C/C++. Je ne sais pas l'une de ces langues et vraiment difficile à traduire. Quelqu'un a une idée sur comment faire?
source d'informationauteur The.Anti.9
Vous devez vous connecter pour publier un commentaire.
Kevin,
il est possible. Vous pouvez créer une bibliothèque avec crochet de la fenêtre de proc en utilisant le C++. Tout ce que vous devez faire est d'injecter ce crochet dans une application en utilisant la norme WinAPI (SetWindowsHookEx etc.). À l'intérieur de ce crochet, vous pouvez appeler Système::domaine d'application::CurrentDomain->méthode load pour Charger votre assemblée en application cible du domaine d'application. Ensuite, vous pouvez appeler les méthodes définies dans votre assemblée à l'aide de la réflexion. Par exemple, Snoop utilise cette méthode.
Mike Décrochage a cet exemplequi utilise CreateRemoteThread. Il a l'avantage de ne pas nécessiter de C++.
EDIT: me semble que j'ai mal compris la question .... J'étais sous l'impression que la question était à propos de l'injection de code dans le processus actuel.
Je vais rejoindre la partie un peu tard, mais j'ai juste utilisé exactement de cela il y a quelques semaines:
Un délégué contient les champs privés
IntPtr _methodPtr
etIntPtr _methodPtrAux
qui représentent le corps de l'adresse de mémoire. En définissant le champ (par réflexion) à des valeurs spécifiques, on peut modifier la mémoire de l'adresse à laquelle le PROGRAMME sera orienté.À l'aide de cette information, on peut effectuer les opérations suivantes:
(Bien sûr, vous pouvez modifier la
_methodPtr
-de la valeur à n'importe quelle adresse mémoire -- même dans l'espace du noyau, mais c'est peut-être les privilèges d'exécution).J'ai un travail exemple de code ici, si vous voulez:
Qui peuvent être utilisés comme suit:
Bien sûr, on pourrait aussi écrire la méthode suivante:
La même chose pourrait être fait pour les méthodes existantes (pas de délégués) par l'intermédiaire de la réflexion:
Utiliser n'importe quel code à vos propres risques. Les exemples de code doit être compilé avec le
/dangereux
-commutateur de compilateur.Vous pouvez consulter CInject pour l'injection de code dans .NET assemblées au site de CodePlex http://codeinject.codeplex.com/. Vous n'avez pas besoin d'avoir des connaissances à propos de l'injection de code à injecter le code lorsque vous utilisez CInject.