J'essaie de faire un obfuscateur
Question
C'est une sorte de question en deux parties. Mais cela concerne la même chose.
Je souhaite utiliser le code IL d'une application pour appliquer des correctifs. Je me demande quelle serait la bonne approche. Évidemment, je pourrais le décompiler, lire et éditer le fichier de code puis le recompiler. mais est-il possible de le lire en tant que code msil directement dans le fichier. et peut-être l'éditer en temps réel.
J'essayais de modifier le code décompilé d'un exécutable. mais à chaque fois que je le recompilerais, je rencontrais un problème d’exécution. Comme s'il ne pouvait plus trouver son point d'entrée. Comment puis-je calculer cela? Je devine que je dois connaître la longueur des commandes et de leurs paramètres, ou pour que le point d’entrée soit une étiquette ou quelque chose du genre. Je serais bien s'il y avait un modèle Visual Studio pour quelque chose comme ça.
La solution
En tant que personne ayant déjà lu le ECMA-335 spec plusieurs fois et ont implémenté un chargeur d'images CLI dans deux langages différents (avec une analyse IL complète en un), je dirais que cela reste une tâche ardue pour moi. Je dis cela parce qu'il semble que les deux 1) vous n'avez pas fait cela et 2) vous cherchez une réponse facile. La spécification devrait certainement être votre point de départ.
La procédure minimale serait:
- Chargez l'image PE (exe ou dll)
- Analyser le code octet de toutes les méthodes et résoudre les symboles
- Appliquez des transformations de code (bien sûr, il s'agirait d'une transformation unique, telle que le renommage de méthodes privées)
- Enregistrez le résultat en tant que nouvelle image PE
Éditer: Cela ne vous empêchera pas d'avoir à connaître la structure détaillée des assemblys .NET, mais vous gagnerez peut-être un peu de temps dans la mise en œuvre réelle et vous aidera à maintenir la logique de votre obfuscateur bien séparée du chargeur.
- Mono Cecil est une bibliothèque écrite par Jb Evain pour générer et inspecter des programmes et des bibliothèques au format ECMA CIL.
- Infrastructure de compilation commune
- Cecil et le blog CCI message de Jb Evain
Autres conseils
Pour lire le fichier MSIL, il y a bien sûr, dans ceci fil :
ildasm.exe - Intermédiaire Langue désassembleur. Vous pouvez afficher votre code compilé au niveau MSIL avec cet outil.
Cela se trouve dans le SDK Microsoft.