Injection de code dans le dock

APAP Membre
17:58 modifié dans API AppKit #1
Bonjour,

J'écris actuellement un programme qui devra avoir accès aux fenêtres autres que les siennes.
Il doit avoir pour cela un niveau de privilèges élevé. Une technique consiste à  injecter du code dans le processus du dock.
Malheureusement je n'ai pas trouvé beaucoup de littérature sur le sujet. Si vous avez un peu de documentation sur le sujet, je suis preneur :)

Merci

Réponses

  • devulderdevulder Membre
    17:58 modifié #2
    dans 1276026702:

    Bonjour,

    J'écris actuellement un programme qui devra avoir accès aux fenêtres autres que les siennes.
    Il doit avoir pour cela un niveau de privilèges élevé. Une technique consiste à  injecter du code dans le processus du dock.
    Malheureusement je n'ai pas trouvé beaucoup de littérature sur le sujet. Si vous avez un peu de documentation sur le sujet, je suis preneur :)

    Merci


    Bonjour,

    Tu peux connaitre la listes des autres fenetres avec des API privées

    Voir cette discussion http://forum.pommedev.com/index.php?topic=5735.msg57993;topicseen#msg57993
  • APAP Membre
    17:58 modifié #3
    Oui tout à  fait c'est ce que j'utilise. Malheureusement tu ne peux pas effectuer aucune modification (taille, position, ...) sans avoir des privilèges spéciaux  :(
  • AliGatorAliGator Membre, Modérateur
    17:58 modifié #4
    On afait fait il y a bien longtemps ici un projet en équipe d'économiseur d'écran qui faisait "voler" les fenêtres. Le but était, dès que l'économiseur d'écran se déclenchait, de capturer toutes les fenêtres présentes à  l'écran, et de les faire bouger en 3D dans l'espace (et ma foi l'économiseur d'écran marchait nickel il avait plutôt cartonné :D)

    A mon avis c'est pas suffisant pour ce que tu veux faire, car on se "contentait" de lister les fenêtres et pour chacune d'elle de récupérer son contexte graphique. Mais ça peut être intéressant de jeter un coup à  la discussion (bon ok elle fait 50 pages :D) voir si tu ne trouves pas des réponses dedans.

    Sinon pour l'injection de code, tu as regardé du côté des InputManagers ? (je sais pas si ça existe encore sous SnowLeopard tiens il me semblais vaguement avoir entendu que ça tendrait à  disparaà®tre, mais j'ai p'tet rêvé) et de SIMBL qui facilite leur intégration...
  • muqaddarmuqaddar Administrateur
    17:58 modifié #5
    Regarde par là  aussi, on y parle des fenêtres dans les discussions du haut :
    http://forum.pommedev.com/index.php?board=29.0
  • zoczoc Membre
    17:58 modifié #6
    Pour les InputManagers c'est mort sous Snow Leopard (en tout cas pour les applications 64 bits, les InputManager sont visiblement toujours supportés pour les applications 32 bits).


    Mais il y a une autre solution bien tordue (qui, si ma mémoire est bonne, consiste à  passer par les fonctionnalités de  "Scripting Additions", mais je ne sais pas si c'est applicable au Dock).


    Et apparemment, la version 64 bits de SIMBL utilise cette technique, voir de ce coté.
  • AliGatorAliGator Membre, Modérateur
    17:58 modifié #7
    dans 1276070074:

    Pour les InputManagers c'est mort sous Snow Leopard (en tout cas pour les applications 64 bits, les InputManager sont visiblement toujours supportés pour les applications 32 bits).
    Ah donc j'avais pas rêvé il me semblais bien que ça avait un peu disparu...

    Juste par curiosité, tu sais pourquoi ? Juste pas (encore?) porté sur 64 bits ? Ou volonté/politique d'Apple de limiter les injections de code par ce biais ? Ou abandon car ils estiment que c'était pas si utile ?

    Bon en mm temps c'était surtout utile pour des cas comme créer un plugin Safari alors qu'il n'avait pas d'API officielle pour faire des plugins... mais de ce que j'ai suivi, avec Safari 5 ça va changer si j'ai tout compris...?
    Et l'autre gros inconvénient des IM était que c'était systemwide et appliqué à  toutes les applis, et pas ciblé pour chaque (et c'est là  que SIMBL permettait de contourner ce souci et d'avoir un truc propre... mais en mm temps il faut bien que les IM existent pour que SIMBL puisse faire son boulot de surcouche...)
  • zoczoc Membre
    juin 2010 modifié #8
    Si je me souviens bien, "problème de sécurité"...


    Je pense qu'Apple n'apprécie pas trop qu'on injecte du code dans leur application. Et puis en fait les InputManagers sont des trucs parfaits pour écrire des logiciels espions...


    Sinon, oui, on peut officiellement créer des plugins pour Safari 5 (mais je n'ai pas encore regardé comment).

  • p3consultingp3consulting Membre
    juin 2010 modifié #9
    cela implique l'utilisation des fonctions :

    vm_allocate(), vm_write(), thread_create_running(), _dyld_image_count(), _dyld_get_image_header(), getsectbynamefromheader(), _dyld_get_image_vmaddr_slide() and _dyld_get_image_name()

    et le principe est d'ajouter des pages mémoires au process visé, et y injecter du code sous forme d'un nouveau thread
    une fois le thread démarré, les techniques habituelles d'overriding (par exemple poseAsClass:) et le chargement de vos propres bundle fonctionneront...

    Inutile de vous lancez là -dedans si vous ne maitrisez pas la couche Mach-O, les formats binaires des exécutables, l'édition des liens des exécutables et le fonctionnement de l'allocation des pages mémoires des processus.

    Ou alors utilisez :

    http://download.github.com/rentzsch-mach_star-mach_star-1.2-0-g4fbda91.tar.gz

  • prepa75prepa75 Membre
    17:58 modifié #10
    dans 1276069350:

    On afait fait il y a bien longtemps ici un projet en équipe d'économiseur d'écran qui faisait "voler" les fenêtres. Le but était, dès que l'économiseur d'écran se déclenchait, de capturer toutes les fenêtres présentes à  l'écran, et de les faire bouger en 3D dans l'espace (et ma foi l'économiseur d'écran marchait nickel il avait plutôt cartonné :D)


    c'est marrant c'est l'écran de veille que j'utilise 
Connectez-vous ou Inscrivez-vous pour répondre.