Comment élargissez-vous les droits des utilisateurs à la racine à l'aide de l'API d'autorisation afin qu'il soit possible d'utiliser mach_inject? P>
3 Réponses :
Vous n'avez pas besoin d'être root pour utiliser mach_inject; Au lieu de cela, vous devez signer votre code. Pour des raisons de test uniquement (et dans 10.4 / 10.5), vous pouvez également faire votre candidature setgid ProCmod. P>
voir TN2206 pour plus d'informations. P>
Ancienne question, mais réponse incorrecte: p>
Sauf si vous possédez le PID / Tâche, vous devez réellement être une racine ou être membre de ProCmod. Dans OS X, cela a peu à voir avec la signature de code. Mach_Inject / Mach_star Utilisez par la tâche Mach Trap_for_pid (), qui nécessite les privilèges ci-dessus. Dans iOS, vous avez également besoin du droit correspondant (Task_for_pid-Autoriser), qui est l'endroit où la signature de code serait utile (à l'aide du LDID pour la signature automatique). P>
Pour ceux qui souhaitent utiliser mach_inject (qui utilise Tâche_for_pid () en interne) pour les macos 10.11 et ci-dessus, vous devrez ajouter le droit approprié pour que cela fonctionne. Puis courir avec sudo. Voir l'exemple ci-dessous: https://gist.github.com/attilathedud/e58917c9fd095a84fd5bbfb31674be05
/* Full explanation is available here: http://attilathedud.me/mac-os-x-el-capitan-10-11-and-task_for_pid/ */ /* To compile, create a file called Info.plist with the following content: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>SecTaskAccess</key> <array> <string>allowed</string> </array> </dict> </plist> When compiling, use -sectcreate to create a section for the plist: gcc task_for_pid.c -sectcreate __TEXT __info_plist ./Info.plist -o task_for_pid Run using sudo ./task_for_pid _some_pid */ /*! * task_for_pid.c: Given a pid in argv[ 1 ], return the mach task port. */ #include <stdio.h> #include <stdlib.h> #include <mach/mach.h> int main( int argc, char** argv ) { kern_return_t kern_return = 0; mach_port_t task = 0; long int pid = 0; char *endptr = NULL; if( argc < 2 ) { return 0; } pid = strtol( argv[ 1 ], &endptr, 10 ); kern_return = task_for_pid( mach_task_self(), pid, &task ); if( kern_return != KERN_SUCCESS ) { printf( "task_for_pid failed: %s\n", mach_error_string( kern_return ) ); return 0; } printf( "%u\n", task ); return 0; }