Existe-t-il un moyen d'empêcher le dumping de l'exécutable de l'assemblage C# pur chargé dans la mémoire qui est à l'origine protégée par un wrapper de code natif Exe 32 bits ?
Réponses
Trop de publicités?@Hasan a raison de dire qu'il n'y a aucun moyen d'empêcher un vidage de mémoire. Cependant, je pense qu'il y a un problème plus profond ici. Quand vous écrivez qu'une assembly C# est "originellement protégé par un wrapper de code natif Exe 32 bits" (c'est moi qui souligne), il semble que vous vouliez empêcher quelqu'un d'examiner le contenu de l'assemblage C# lui-même.
Dès que quelqu'un met la main sur cet assemblage, il peut l'ouvrir et en apprendre plus que vous ne le pensez. Par exemple, il peut le décompiler en code source C# à l'aide de dotPeek o ILSpy . Vous pouvez utiliser un obfuscateur pour rendre votre vie plus difficile à quelqu'un qui utilise ces outils, mais même l'obfuscation ne va pas plus loin.
L'essentiel est qu'une fois que vous l'avez mis à la disposition de quelqu'un d'autre, il n'est plus entre vos mains. Attendez-vous à que quelqu'un d'autre décompilera votre code et publiera des copies sur des sites de torrents (à moins que ce ne soit gratuit de toute façon). Ne fais pas ça. mettre le mot de passe super-secret de votre base de données dans votre code, car quelqu'un peut décompiler le code et lire le mot de passe en clair. Même si vous exécutez ce code sur un serveur, ne mettez pas le mot de passe dans le code, pour des raisons que je décris dans une autre réponse de l'OS. aquí .
N.B. Une fois que vous commencez à distribuer votre logiciel, il n'y a pas non plus de moyen d'empêcher quelqu'un d'attacher un débogueur à votre exécutable en cours d'exécution, donc en dehors des problèmes d'inspection de l'exécutable lui-même, quelqu'un n'a même pas besoin d'un vidage de mémoire pour inspecter les informations d'exécution.
Il n'existe pas de moyen infaillible d'empêcher les vidages de mémoire. Vous pouvez mettre des valeurs dans Cordes sécurisées . Ils sont cryptés, donc si quelqu'un prend une copie de la mémoire, il ne sera pas capable d'en tirer un sens.
Écrivez un pilote Windows qui s'exécute comme un processus protégé. Ne lancez votre programme que via ce pilote et lancez-le également en tant que processus protégé.
Même les programmes anti-virus ne seront pas en mesure d'analyser la mémoire de votre programme si vous faites cela. C'est comme si vous essayez d'appeler openprocess ou readprocessmemory d'un processus protégé, vous recevrez un accès refusé.
Le principal problème ici est que le pilote doit être un pilote certifié Windows, ce qui prend du temps.
Il faudrait également implémenter une méthode pour vérifier que le programme a été appelé par le pilote du processus protégé et, si ce n'est pas le cas, ne pas ouvrir le programme. Ce type de vérification peut être facilement supprimé.
Bien qu'il n'existe pas de moyen totalement sûr d'empêcher quelqu'un de vider votre exécutable .net, il existe des moyens de rendre cette tâche beaucoup plus difficile.
Jetez un coup d'œil à mon référentiel pour les techniques anti-débogage et anti-dumping en .net/c# :
https://github.com/Mecanik/Anti-DebugNET
Pour répondre à votre question spécifique, il existe une méthode pour empêcher "MegaDumper" de vider votre exécutable.
J'espère que cela vous aidera.