2009-11-29 3 views
14

Salutations!Reverse engineering d'une Apple Kext - Reconstruire la classe

Je suis actuellement tente de prolonger la fonctionnalité de la Magic Mouse. Pour ce faire, j'espère écrire un kext qui intercepte les événements du pilote multitouch, AppleMultitouchDriver.kext, les interprète et distribue de nouveaux événements ou transfère l'événement réel. Cette approche est similaire à l'approche utilisée par DoubleCommand.

J'ai déjà créé un petit kext test qui intercepte les événements de souris (clic, mouvement, etc.), qui seront nécessaires aussi. Le problème que j'ai maintenant est que je suis incapable d'intercepter les événements des objets AppleMultitouchDevice et/ou AppleMultitouchHIDEventDriver parce qu'il n'y a aucune définition de classe pour eux. Je dois être en mesure de réaffecter le pointeur à la fonction de rappel comme je le fais dans l'intercepteur de la souris et comme cela est fait dans DoubleCommand. Pour autant que je sache, cela signifie que j'ai besoin de reconstruire la classe AppleMultitouchDevice. Je suis déjà en mesure d'obtenir une référence à l'instance de l'objet AppleMultitouchDevice, donc je dois juste pouvoir le convertir et l'utiliser.

Maintenant que vous avez le fond, voici mes questions directes:

  • Quelles méthodes dois-je utiliser pour désosser le kext ou reconstruire les classes en question?
  • Quels programmes sont disponibles pour m'aider dans cet effort?
  • Y a-t-il des didacticiels ou des livres électroniques qui traitent de ce sujet particulier que vous connaissez?
  • Est-il possible pour moi de réaffecter le pointeur de rappel sans réellement reconstruire la classe entière?
  • Autre chose que j'ai peut-être manqué car je suis si nouveau à cela.

Merci à l'avance pour tout conseil ou assistance !!

+0

Apple ne fournit-il pas les sources à leurs kexts? –

+0

Oui, pour la plupart d'entre eux. Celui-ci, cependant, est gardé privé. Je suppose qu'ils ne veulent pas que les gens jettent un coup d'œil sur la façon dont tous leurs techniciens brevetés et propriétaires travaillent pour le multitouch. – Tyler

Répondre

1

J'ai réussi à trouver ce que je avais besoin. Maintenant, tout ce qu'il faudra, c'est du temps et des efforts. :)

+1

Prendre soin de partager avec les autres? – jackrabbit

+0

J'ai trouvé un programme appelé IDA Pro. C'est génial pour l'ingénierie inverse à peu près n'importe quel binaire là-bas. J'espère utiliser ce programme, en combinaison avec le débogage GDB/noyau distant pour localiser la méthode dans laquelle le pointeur de rappel est assigné. Une fois que je trouve le décalage du pointeur de rappel, je/dois/être en mesure de réattribuer en adressant cette mémoire directement, soit par ASM ou C. Ainsi, la partie la plus difficile sera traçait à travers tous les appels de méthode et de lire toute l'assemblée à trouver ce décalage de pointeur. – Tyler

+0

Que se passe-t-il lorsqu'une mise à jour du système d'exploitation déplace l'adresse du pointeur de rappel? Je voulais être capable de pirater le pilote du clavier système pour traiter le pavé numérique '/', '*' et '-' comme le volume haut/bas/off. J'ai trouvé que même s'il est possible de récupérer le rappel, il peut changer avec chaque mise à jour du système. –

1

Serait-ce de l'aide?

FingerMgMt

+0

Malheureusement pas. J'ai déjà vu ça. Il utilise la même approche que mon post ici: http://stackoverflow.com/questions/1669909/extending-functionality-of-magic-mouse-do-i-need-a-kext Il utilise le MultiTouchSupport. cadre qui est dans l'espace utilisateur. Je veux écrire ceci dans l'espace du noyau pour obtenir le meilleur contrôle possible. – Tyler

Questions connexes