3

Android用のcでsetuidプログラムを作成しようとしています。Android 2.3-4.2 でテストしたところ、Samsung Galaxy s4 (i9500) を除くすべてのデバイスで正常に動作します。

CF-Auto-Root を使用してデバイスに su をインストールしたところ、正常に動作しました。しかし、私のアプリはうまくいっていません。

mysu をシステム ディレクトリにインストールし、すべての権限を設定しました。

shell@android:/ $ ls -Z /system/bin/mysu
-rwsr-sr-x root     root              u:object_r:system_file:s0 mysu

そして、それはChainfireのsuについてです:

shell@android:/ $ ls -Z /system/xbin/su
-rwsr-sr-x root     root              u:object_r:system_file:s0 su

Selinux は許容モードです。

shell@android:/ $ getsebool -a
android_cts --> on
app_bluetooth --> off
app_external_sdcard_rw --> on
app_internal_sdcard_rw --> on
app_ndk --> off
app_network --> on
app_read_logs --> off
app_vpn --> off
debugfs --> on
in_qemu --> off
manage_mac --> on
manage_selinux --> on
support_runas --> on
system_app_manage --> off

shell@android:/ $ getenforce
Permissive

mysu では、シェルを呼び出す前に setuid と setgid を使用しますが、Galaxy S4 では失敗します。

shell@android:/ $ mysu
euid, egid: 0, 0
uid, gid: 2000, 2000
setgid(0): Permission denied
setuid (0): Permission denied
execv("/system/bin/sh", exec_args): Permission denied

私は何を間違っていますか?setuid と setgid を除いて、Chainfire の su は何をしますか?

4

3 に答える 3

3

解決策: setuid(0) を呼び出す前に fork() を実行してください。

于 2013-08-14T09:27:17.553 に答える