2009-11-29 7 views
14

Pozdrowienia!Inżynieria wsteczna Apple Kext - rekonstrukcja klasy

Jestem obecnie próbuje rozszerzyć funkcjonalność Magic Mouse. Aby to zrobić, mam nadzieję napisać kext, który przechwytuje zdarzenia ze sterownika multitouch, AppleMultitouchDriver.kext, interpretuje je i albo wywołuje nowe zdarzenia, albo przekazuje rzeczywiste zdarzenie. To podejście jest podobne do podejścia stosowanego przez DoubleCommand.

już stworzył małą kext testowy, który przechwytuje zdarzenia myszy (kliknij, ruchu, etc), jak również będą potrzebne.

Problem, który mam teraz, polega na tym, że nie mogę przechwycić zdarzeń z obiektów AppleMultitouchDevice i/lub AppleMultitouchHIDEventDriver, ponieważ nie ma dla nich definicji klasy. Muszę mieć możliwość ponownego przypisania wskaźnika do funkcji wywołania zwrotnego, tak jak to robię w metodzie przechwytywania myszy i tak jak w DoubleCommand. O ile wiem, oznacza to, że muszę zrekonstruować klasę AppleMultitouchDevice. Już jestem w stanie uzyskać odwołanie do instancji obiektu AppleMultitouchDevice, więc po prostu muszę go przesłać i użyć.

Teraz masz tło, tutaj są moje bezpośrednie pytania:

  • Jakie metody muszę użyć w celu odwrócenia inżynier kext lub odtworzyć zajęcia w pytaniu?
  • Jakie programy są dostępne, które pomogą mi w tych wysiłkach?
  • Czy są jakieś tutoriale lub e-booki, które koncentrują się na tym konkretnym temacie, który znacie?
  • Czy mogę ponownie przypisać wskaźnik wywołania zwrotnego bez rekonstrukcji całej klasy?
  • Coś jeszcze mogłem przegapić, ponieważ jestem bardzo nowy w tym.

Dzięki z góry za wszelkie rady lub pomocy !!

+0

Czy firma Apple nie dostarcza źródeł do swoich wiadomości? –

+0

Tak, dla większości z nich. Ten jednak jest trzymany w tajemnicy. Zgaduję, że nie chcą, żeby ludzie podglądali, jak wszyscy ich opatentowani, opatentowani technicy pracują dla multitouch. – Tyler

Odpowiedz

1

udało mi się znaleźć to, czego potrzebowałem. Teraz wszystko, czego potrzeba, to czas i wysiłek. :)

+1

Chcesz dzielić się z innymi? – jackrabbit

+0

Znalazłem program o nazwie IDA Pro. Jest świetny do inżynierii odwrotnej, prawie każdy binarny tam. Mam nadzieję, że wykorzystam ten program, w połączeniu z debugowaniem jądra GDB/zdalnym, w celu zlokalizowania metody, do której przypisany jest wskaźnik wywołania zwrotnego. Kiedyś znajdę przesunięcie wskaźnika zwrotnego, I/powinna/móc przypisać ją poprzez zajęcie tej pamięci bezpośrednio, albo przez ASM lub C Więc najtrudniej będzie śledzenie przez wszystkich wywołań metod i czytając cały zespół do znajdź to przesunięcie wskaźnika. – Tyler

+0

Co stanie się, gdy aktualizacja systemu operacyjnego przeniesie adres wskaźnika wywołania zwrotnego? Chciałem móc zhakować sterownik klawiatury systemowej, aby potraktować klawisze numeryczne "/", "*" i "-" jako zwiększanie/zmniejszanie/zmniejszanie głośności. Zauważyłem, że choć możliwe jest pobranie wywołania zwrotnego, to może się ono zmienić przy każdej aktualizacji systemu. –

1

Czy to może być żadnej pomocy?

FingerMgMt

+0

Niestety nie. Widziałem to już wcześniej. Jest przy użyciu tej samej metody, jak mój post tutaj: http://stackoverflow.com/questions/1669909/extending-functionality-of-magic-mouse-do-i-need-a-kext Jest używając MultiTouchSupport. struktura, która znajduje się w przestrzeni użytkownika. Chcę napisać to w przestrzeni jądra, aby uzyskać najlepszą możliwą kontrolę. – Tyler