4

Androidアプリでいくつかのルーティング機能に取り組んでおり、ioctlにアクセスする必要があります。ioctlを使用するアプリを実行するにはroot権限が必要なため、アプリを呼び出すことができる唯一の方法は、別の実行可能ファイルをリンクし、Javaからを使用して呼び出すことRuntime.getRuntime().exec()です。

別の実行可能ファイルを作成せずに、AndroidのJNIからroot権限にアクセスする方法はありますか?実行可能ファイルを構築することは、ioctlにアクセスするための最良のアプローチですか?

4

2 に答える 2

3

非ルート プロセスが (エクスプロイトを超えて) ルートになる手段はないため、別のプロセスが必要です。

これは変更されずに Linux から継承されます。違いは、Android アプリケーション プロセスをランチャーからルートとして起動する直接的な方法がないことです。これは、アプリケーション プロセスに特化した子をフォークして権限を削減するインテントを zygote に送信するためです。(アプリケーション プロセスを手動で作成するための回り道があるかもしれませんが、それを行うにはアプリケーション プロセスが必要になるため、定義上、それは 2 次プロセスになります。 zygote の子は、システム ライブラリの共有マッピングを継承しないため、独自の一意のコピーをメモリにロードする必要があります)

ioctl() は単なる別の syscall であり、(デバイス ファイルから) その fd へのアクセス許可が必要な場合にのみ root が必要です。明らかにそれはあなたが使いたいものに当てはまりますが、他の人は特権を与えられていません. たとえば、Android フレームワークの IPC の大部分は最終的に Binder ioctl で実装され、ネットワーク ソケットを制御するために一般的に使用されます。

于 2011-08-08T14:31:25.763 に答える
0

ioctl() 呼び出しは、使用するのに root パーミッション (または特定のパーミッション) を明示的に必要としません。Chris Stratton が言ったように、問題の特定のデバイスにアクセスするには許可が必要です。前述の許可がない場合は、エクスプロイト以外は取得できません。

最終的に何を達成しようとしていますか?

于 2011-08-08T14:54:46.963 に答える