[android] adb shell su는 작동하지만 adb root는 작동하지 않습니다.

잠금 해제 된 Galaxy S3 (SGH-T999)를 루팅했습니다.

이제 adb rootWindows Command Prompt 에서 실행하려고하는데 adbd cannot run as root in production builds오류 가 발생합니다. 그래서, 내가 가장 먼저 확인한 것은 내 전화가 정말 루팅되었는지 여부였습니다.

그래서 다음을 시도했습니다.

명령 프롬프트 열기

$adb devices // lists my device
$adb shell //goes to shell
$su // opens a 'SuperSu' prompt on my phone and I 'Grant' permission
# // Before following the rooting instructions, I was getting 'no su command found' in the previous step. So, I believe my phone is ROOTED. **Correct me if I'm wrong.**

내가 할 때, adb root내가 얻을 adbd cannot run as root in production builds오류입니다. 그래서 위에서했던 것 외에 몇 가지 추가 작업을해야 할 수도 있다고 생각했습니다. 다음 질문에 대한 모든 솔루션을 시도했습니다.

위의 어느 것도 나를 위해 일하지 않았습니다. 그들이하는 일은 SHELL 내부의 ROOT 액세스 권한을 부여하는 것뿐입니다. adb root셸에 들어 가지 않고도 다양한 adb 명령을 실행할 수 있도록 작업 하고 싶습니다 .



답변

설계에 의해 adb root개발 명령이 작동 빌드 만 (즉, eng그리고 userdebug이는이 ro.debuggable=1기본적으로). 따라서 루팅 된 장치 에서 adb root명령 을 활성화 하려면 다음 파일 중 하나에 해당 줄을 추가하십시오 .ro.debuggable=1

/system/build.prop
/system/default.prop
/data/local.prop

기본적 adb shell으로 시작 하려면 root추가하십시오 ro.secure=0.

또는 수정 된 adbd바이너리를 사용할 수 있습니다 (을 확인하지 않음 ro.debuggable).

에서 https://android.googlesource.com/platform/system/core/+/master/adb/daemon/main.cpp

#if defined(ALLOW_ADBD_ROOT)
// The properties that affect `adb root` and `adb unroot` are ro.secure and
// ro.debuggable. In this context the names don't make the expected behavior
// particularly obvious.
//
// ro.debuggable:
//   Allowed to become root, but not necessarily the default. Set to 1 on
//   eng and userdebug builds.
//
// ro.secure:
//   Drop privileges by default. Set to 1 on userdebug and user builds.


답변

일부 개발자 친화적 인 ROM 에서는 설정> 개발자 옵션> 루트 액세스 에서 루트 액세스 를 활성화 할 수 있습니다 . 그 후 adb root사용할 수 있습니다. 불행히도 시중에 나와있는 대부분의 재고 ROM에서는 작동하지 않습니다.


답변

에뮬레이터를 루팅하려고 할 때이 문제가 발생했는데 Google Play가있는 Nexus 5x 에뮬레이터를 실행했기 때문이라는 것을 알았습니다. Google Play가없는 다른 에뮬레이터를 만들었 adb root으며 기기를 루팅 합니다. 이것이 누군가를 돕기를 바랍니다.


답변

abd 셸에서 su 모드로 들어가기 위해 사용합니다.

adb 쉘 “su”


답변

나는 뿌리 삼성 갤럭시 트렌드 플러스 (GT-S7580)를 가지고 있습니다.

‘adb root’를 실행하면 동일한 ‘adbd가 프로덕션 빌드에서 루트로 실행할 수 없음’오류가 발생합니다.

개발자 옵션-> 루트 액세스 권한이있는 기기의 경우 ‘ADB 전용’을 선택하여 기기에 대한 adb 루트 액세스 권한을 제공합니다 ( NgaNguyenDuy에서 제안 ).

그런 다음 ADB를 통해 루트로 스크립트 시작 에서 솔루션에 따라 명령을 실행 해보십시오 . 제 경우에는 ‘netcfg rndis0 dhcp’명령을 실행하고 싶었고 이렇게했습니다.

adb shell "su -c netcfg rndis0 dhcp"

이런 식으로 실행하는 동안 실수가 있는지 확인하십시오.

그래도 작동하지 않으면 장치를 올바르게 루팅했는지 확인하십시오. 여전히 운이 없으면 ‘adb root’가 작동하도록 Cyanogen Mod 와 같은 사용자 정의 ROM을 설치해보십시오 .


답변

boot.img / sbin / 폴더의 adbd 바이너리를 su 가능한 바이너리로 바꿔야합니다. 또한 default.prop 편집도해야합니다.

삼성은 다른 벤더보다 이것을 더 어렵게 만드는 것 같습니다. 시도해 볼 수있는 adbd 바이너리가 있지만 새 바이너리로 boot.img를 디 컴파일하고 다시 컴파일하는 지식이 필요합니다. 또한 잠긴 부트 로더가 있다면 … 이런 일은 일어나지 않을 것입니다.

또한 Chainfire에는 Play 스토어에서 adbd 루트 권한을 부여하는 앱이 있습니다. https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=en

마지막으로, SU 권한이있는 Windows 스크립트를 작성하려는 경우 다음 명령 스타일을 사용하여이 구매를 수행 할 수 있습니다. 그러나 최소한 실행 된 처음에 SU 권한을 부여해야합니다. .

adb shell “su -c ls”<-su 권한이있는 작업 디렉토리 나열. adb 쉘 “su -c echo anytext> /data/test.file”

이것들은 단지 몇 가지 예입니다. 달성하고자하는 일을 구체적으로 말씀하시면보다 구체적인 조언을 드릴 수 있습니다.

-스코 슬러


답변

adbd루트 액세스를 활성화하는 컴파일 플래그 / 옵션이 있습니다 : ALLOW_ADBD_ROOT=1.

Android 9까지 : adbd기기에서 해당 플래그없이 컴파일 된 경우 시작할 때 항상 권한이 삭제되므로 “adb root”는 전혀 도움이되지 않습니다.
내가 패치했습니다 에 대한 호출을 setuid(), setgid(), setgroups()그리고 기능은 내 전자 책 리더에 영구적으로 뿌리 adbd를 얻을 수있는 바이너리의 자신을 밖으로 떨어진다.

Android 10에서는 이것이 변경되었습니다. 휴대 전화 / 태블릿이 잠금 해제 ro.boot.verifiedbootstate == "orange"되면 ( ) 어떤 경우에도 adb 루트 모드가 가능합니다.