Question

Windows a la capacité d'appliquer pour des applications mal Behaving . Cales sont utilisés pour intercepter les appels de l'API et le modifier. Par exemple, des cales peuvent être utilisées pour:

  • modifier les paramters entrants
  • mensonge sur les valeurs de retour
  • changer pour appeler autre chose

Le Application Compatibility Tookit a tout à fait quelques vous cales existantes peut appliquer à votre propre application mal se comporter. Voici un exemple de celui qui ignore l'appel de l'API et appelle à la place une API complètement différent au lieu:

i besoin d'une cale qui ne fait pas partie des centaines de Microsoft déjà écrit des cales. i besoin d'une shims personnalisée .

Dans mon cas, je veux intercepter les appels à:

GetSystemMetrics(0x1000)

pour qu'il retourne 0. Je ne peux pas trouver des informations sur la façon de donner ma propre DLL de Windows qui aura le correctif j'ai besoin. Je ne sais même pas si vous peut créer des cales personnalisées.

Est-ce que le support de Windows personnalisés cales?

Était-ce utile?

La solution

Je ne suis pas au courant d'aucune façon d'une personne autre que Microsoft mettre en œuvre une cale appcompat.

Vous pouvez enquêter sur Detours , il peut fournir la fonctionnalité que vous voulez.

Autres conseils

Vous devez penser à cela du point de vue de Raymond Chen. Imaginez s'il était possible pour quelqu'un d'autre que Microsoft pour écrire des cales de compatibilité. Ensuite, chaque fois que Microsoft fait un changement de rupture, en plus de tous les autres travaux de compatibilité, ils devront également écrire pour les cales des cales 3ème partie qui ont fait la mauvaise chose. Le maintien de la compatibilité ascendante est assez difficile comme il est.

Il est possible, mais il exige un certain travail.

Vous engendrez l'application en utilisant votre propre programme de lanceur qui appliquera la cale. Vous faites cela en laissant votre lanceur créer le processus avec des privilèges suffisants pour modifier sa mémoire. La plupart des fonctions de l'API commencent par un nop deux octets précédés de plus NOP. Vous pouvez modifier le nop deux octets dans un court saut et les NOP précédentes à un saut en longueur où vous voulez aller.

Une autre solution que je l'ai utilisé dans le passé est de charger le fichier exécutable comme une DLL, mais qui peut causer plus de travail puisque, selon la façon dont l'application est tatillonne. Dans ma situation, je devais charger l'exécutable comme une DLL de données uniquement et faire toutes mes propres importations, mais malheureusement la solution précédente n'a pas été une option pour moi.

J'ai aussi écrit une fois une DLL qui utilise crochetage des principes similaires, mais qui est seulement une option si vous pouvez modifier la source pour charger la DLL ou si le processus prend en charge les plug-ins de DLL.

vous pouvez toujours utiliser l'ingénierie inverse pour corriger :), laissez-moi savoir si vous avez besoin d'aide avec elle

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top