상세 컨텐츠

본문 제목

buildozer root permission

엔지니어일기/이것저것

by jaws99 2020. 11. 3. 14:36

본문

반응형

Android에서 root 권한을 얻으려면 Runtime.getRuntime().exec("su")로 얻을 수 있습니다.

 

이 명령어를 Python에서 돌려야하니, Python에서 Java코드를 돌리는 방법을 찾아봤습니다.

pyjnius와 subprocess로 돌리는 방법을 찾았는데, 이 상황은 jnius가 맞다고 생각했습니다.

 

try:
    ps = autoclass("java.lang.Runtime").getRuntime().exec("su")
    Datastream = autoclass("java.io.DataOutputStream")
    ro = DataStream(ps.getRuntime())
except Exception as e:
    text = str(e)

실행해보니 permission denied가 나옵니다.

 

다음으로 든 생각이 Buildozer로 만든 APK도 MainActivity가 있고, MainActivity에서 명령어를 써주기만 하면 동작하지 않을까? 였습니다.

 

jadx로 확인해보니, org.kivy.android.PythonActivity에서 main.py라는 entry point를 설정합니다. 

여기서 추가해주면 될거같아서 파일을 확인해봤습니다.

python-for-android의 webview는 Activity를 extends하고, sdl2에 있는 Activity가 SDLActivity를 extends합니다.

(jadx에 있는 PythonActivity는 SDLActivity를 extends하고 있습니다.)

 

python-for-android의 bootstraps 내용을 아키텍처(x86 / arm64)에 따라 build/bootstrap으로 복사한 다음 빌드하면서 myapp폴더가 생깁니다.

 

즉, Python-for-android를 수정하면 매번 코드를 추가하는 게 아니라 빌드할 때 옵션을 줘서 루트 권한을 얻을 수 있습니다.

 

dists폴더가 있으면 bootstrap 내용을 빌드하지 않고, 없으면 bootstrap 내용을 빌드합니다.

 

동작은 하는지 확인하기 위해, dists/myapp에 있는 PythonActivity에

이렇게 코드를 추가한 다음 빌드합니다.

 

루팅 된 실 단말기가 없어서 단말기 작동 여부는 확인되지 않았지만, Nox에서 Root옵션을 주면 슈퍼유저 권한을 얻었다는 메시지를 확인할 수 있습니다.

 

 

수동적으로 하지 않고 옵션이나 .spec 파일을 수정해서 하는 방법을 찾아보고 있습니다.

반응형

'엔지니어일기 > 이것저것' 카테고리의 다른 글

Linux Capability - ping 분석  (0) 2022.10.10
ubuntu18.04 kivy buildozer 설치  (3) 2020.11.03
Android ssl pinning bypass(2)  (0) 2020.08.15
Android ssl pinning bypass(1)  (0) 2020.07.30
Transport Layer  (0) 2020.03.07

관련글 더보기