2009-11-29 16 views
14

¡Saludos!Ingeniería inversa y Apple Kext - Reconstruyendo la clase

Actualmente estoy intentando extender la funcionalidad del Magic Mouse. Para hacer esto, espero escribir un kext que intercepte eventos del controlador multitáctil, AppleMultitouchDriver.kext, los interprete y despache eventos nuevos o reenvíe el evento real. Este enfoque es similar al enfoque utilizado por DoubleCommand.

Ya he creado una pequeña prueba kext que intercepta los eventos del mouse (clic, movimiento, etc.) ya que también será necesario.

El problema que estoy teniendo ahora es que no soy capaz de interceptar los eventos de los objetos AppleMultitouchHIDEventDriver AppleMultitouchDevice y/o porque no hay una definición de clase para ellos. Necesito poder reasignar el puntero a la función de devolución de llamada como lo hago en el interceptor del mouse y como se hace en DoubleCommand. Hasta donde yo sé, esto significa que necesito reconstruir la clase AppleMultitouchDevice. Ya puedo obtener una referencia a la instancia del objeto AppleMultitouchDevice, así que solo necesito poder usarlo.

Ahora que tiene el fondo, aquí están mis preguntas directas:

  • ¿Qué métodos necesito para utilizar con el fin de alterar el diseño del kext o reconstruir las clases en cuestión?
  • ¿Qué programas están disponibles que me ayudarán en este esfuerzo?
  • ¿Hay algún tutorial o libro electrónico que se centre en este tema en particular que conozca?
  • ¿Puedo reasignar el puntero de devolución de llamada sin reconstruir toda la clase?
  • Cualquier otra cosa que haya echado de menos, ya que soy muy nuevo en esto.

Gracias de antemano por cualquier consejo o ayuda !!

+0

¿Apple no suministra las fuentes a sus kexts? –

+0

Sí, para la mayoría de ellos. Este, sin embargo, se mantiene privado. Supongo que no quieren que la gente se fije en cómo todos sus técnicos patentados y propietarios trabajan para multitouch. – Tyler

Respuesta

1

He conseguido encontrar lo que necesitaba. Ahora todo lo que tomará es tiempo y esfuerzo. :)

+1

¿Te importa compartirlo con los demás? – jackrabbit

+0

Encontré un programa llamado IDA Pro. Es ideal para ingeniería inversa prácticamente cualquier binario. Espero utilizar ese programa, en combinación con GDB/depuración remota del núcleo para localizar el método en el que se asigna el puntero de devolución de llamada. Una vez que encuentre el desplazamiento del puntero de devolución de llamada, debería/debería/puedo reasignarlo direccionando esa memoria directamente, ya sea a través de ASM o C. Así que la parte más difícil será rastrear a través de todas las llamadas a métodos y leer todo el conjunto para encontrar esa compensación del puntero. – Tyler

+0

¿Qué sucede cuando una actualización del SO mueve la dirección del puntero de devolución de llamada? que quería ser capaz de cortar el controlador del teclado del sistema para tratar el teclado numérico '/', '*' y '-' como el volumen arriba/abajo/apagado. He descubierto que si bien puede ser posible agarrar la devolución de llamada que podría cambiar con cada actualización del sistema. –

1

¿Podría ser de alguna ayuda?

FingerMgMt

+0

Desafortunadamente no. He visto esto antes. Utiliza el mismo enfoque que mi publicación aquí: http://stackoverflow.com/questions/1669909/extending-functionality-of-magic-mouse-do-i-need-a-kext Está utilizando MultiTouchSupport. marco que está en el espacio de usuario. Quiero escribir esto en el espacio del kernel para obtener el mejor control posible. – Tyler

Cuestiones relacionadas