1

たとえば、ジェイルブレイクされた iPhone で「ifconfig en0 down」を実行するには、root 権限で実行する必要があります。

私のアプリケーションはcydiaでインストールされ、ルート権限で実行されましたが、同じ権限でコマンドラインツールを呼び出す方法がありません。これらは私が試した差分方法です:

1.calling system("ifconfig en0 down"); -> xcode のコンソールに「許可が拒否されました」という通知が表示されました。

2. NSTask を使用して ifconfig を直接実行すると、同じ問題が発生しました (mac osx フレームワークから NSTask.h ファイルをコピーしたところ、動作しました!)。

3. NSTask を使用して、インタラクティブなパスワードを必要とする bash スクリプトで「/bin/bash」を実行しますが、NSPipe を使用してタスクと対話しようとすると、まったく応答しません。

いくつかのコードは次のようになります:

NSPipe *p1 = [NSPipe pipe];
[self.task setStandardOutput:p1];

self.output= [p1 fileHandleForReading];

NSPipe *p2 = [NSPipe pipe];
[self.task setStandardInput:p2];

self.input = [p2 fileHandleForWriting];


[self.task launch];

NSLog(@"Launched...");

sleep(1);
[self.input writeData:[@"alpine" dataUsingEncoding:NSASCIIStringEncoding]];
NSLog(@"Password wrote...");

そして、以下のxcodeのデバイスコンソールから通知を受け取りました...

Jun 25 22:10:30 unknown Demo[653] <Warning>: Launched...
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>: We trust you have received the usual lecture from the local System
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>: Administrator. It usually boils down to these three things:
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>:     #1) Respect the privacy of others.
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>:     #2) Think before you type.
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>:     #3) With great power comes great responsibility.
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>: Password:
Jun 25 22:10:31 unknown Demo[653] <Warning>: Password wrote...

もう 1 つの問題は、NSTask が終了する前に、フォアグラウンド プロセスがフリーズし、アプリケーションをまったく操作できないことです。

ルートユーザーのパスワードを入力せずにコマンドラインツールとやり取りできるvisudoという名前の別のコマンドラインツールを見つけましたが、すべてがコードを通過する必要があるため、この方法を試したくありません。

私が知りたいのは、NSTask によって作成されたプロセスと対話し、root 権限で make を実行する方法だけです。または、コマンド ライン ツールをすべてプログラムで root 権限で実行する方法はありますか?

どうもありがとう :)

4

0 に答える 0