by Manu404 » Thu Sep 16, 2010 2:19 pm
Sous windows oui. Un DLL c'est quoi ? C'est une librairie de fonction compilé ou qui sera compilé JIT (pour le dotnet par exemple). Si tu fait pointé le call de fin de fonction d'un programme vers le point d'entré d'une fonction dans ta DLL, le code de ta DLL sera exécute, tu rend ensuite la main en pointant vers le vrai offset histoire de pas planter le processus. Pourquoi injecter la DLL et pas juste modifier le call ? Parce que sinon, ton programme refuser tout simplement d'aller pointer vers un endroit de la mémoire qui ne lui est pas dédié alors que si tu injecte ta DLL, elle sera dans le même espace mémoire et tu pourras donc y faire appel sans soucis. Et enfin, pourquoi une DLL et pas un "programme", simplement parce que injecter un programme est plus complexe au niveau de la gestion de la mémoire que une DLL. D'un point de vue purement technique, le principe est le même, mais, sans rentrer dans des détails arides que tu trouvera si le coeur t'en dit avec google très facilement, injecter un exe dans un autre processus pause des problème du fait que cette exe est fait pour être exécute depuis son entrypoint et non pour exécuter des fonctions internes de manière sélective depuis "l'extérieur". J'en vois deja lever les yeux et me menacer de mort, vous avez raison et vos menaces sont légitimes, mais je tente de faire simple la ou c'est très compliqué a résumé car beaucoup de paramètres sont a prendre en compte.