Skocz do zawartości
Itachi

Programowanie z przywilejami root'a

    Rekomendowane odpowiedzi

    Itachi

    Witam,

    Proszę o jakieś wskazówki, ponieważ są to moje początki, a nie przebrnąłem jeszcze przez dokumentację dla Androida, Chciałbym mniej więcej poznać koncepcję uzyskania przywilejów administratora z poziomu kodu źródłowego? Jeżeli kwestia nie jest znana, to proszę o nakreślenie mniej więcej w jaki sposób mam uruchamiać(wymusić) aplikację, jako root ? Z góry dziękuję za odpowiedź. Pozdrawiam.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    Trzeba uruchomić w shellu komendę su

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Itachi

    Witam,

    Dziękuję za odpowiedź. Jeżeli dobrze rozumię, przed odpaleniem swojej aplikacji, która wymaga uprawnień root'a, mam wywołać shell'a i uruchamiać tą aplikację jako root ? Czy można z poziomu kodu źródłowego(jeżeli tak, to można prosić o szkielet kodu źródłowego) wywołać shell'a, czy muszę używać aplikacji dostarczanych przez innych ? Z góry dziękuję za odpowiedź. Pozdrawiam

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Trzeba coś takiego wklejając do kodu programy

    import java.io.IOException;

           Runtime rt = Runtime.getRuntime();
           try {
    	Process proc = rt.exec("su");
    } catch (IOException e) {
    	e.printStackTrace();
    }

    Edytowane przez SkubiXTX

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Itachi
    Trzeba coś takiego wklejając do kodu programy

    import java.io.IOException;

           Runtime rt = Runtime.getRuntime();
           try {
    	Process proc = rt.exec("su");
    } catch (IOException e) {
    	e.printStackTrace();
    }

    Witam,

    Wkleiłem ten kod do ciała konstruktora oraz do metody onCreate, ale niestety próba utworzenia np. pliku w katalogach /dev czy /etc nie powiodła się. A może należy do tego zatrudnić obiekt Process, czy jednak samo wywołanie metody exec() wystarczy ? Jeszcze raz z góry dziękuję za odpowiedź. Pozdrawiam

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    :facepalm1:

    podany kod tak naprawdę nic nie daje, nie zmienia uprawnień procesu nie ma wpływu na możliwości z punktu widzenia API punktu widzenia Javy, daje jedynie lub aż możliwość uruchamianie innego procesu z uprawnieniami ROOT, żeby móc zapisać plik w obszarze chronionym można zmienić uprawniania foldera docelowego i zapisać, albo zamontować wolumin zawierający ten folder w trybie odczyt/zapis albo zrobić jeszcze coś innego

    na pewno ten kod nie jest sposobem na wolność od ROOT dla aplikacji JAVA

    PS. nie zawsze bezpiecznie jest zmieniać uprawnienia plików folderów, nie można tym szastać na lewo i prawo bo system może nie wstać ;)

    Edytowane przez zawadaki

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Itachi
    :facepalm1:

    podany kod tak naprawdę nic nie daje, nie zmienia uprawnień procesu nie ma wpływu na możliwości z punktu widzenia API punktu widzenia Javy, daje jedynie lub aż możliwość uruchamianie innego procesu z uprawnieniami ROOT, żeby móc zapisać plik w obszarze chronionym można zmienić uprawniania foldera docelowego i zapisać, albo zamontować wolumin zawierający ten folder w trybie odczyt/zapis albo zrobić jeszcze coś innego

    na pewno ten kod nie jest sposobem na wolność od ROOT dla aplikacji JAVA

    PS. nie zawsze bezpiecznie jest zmieniać uprawnienia plików folderów, nie można tym szastać na lewo i prawo bo system może nie wstać ;)

    Super, dziękuję za wyjaśnienie. Czy mógłbym Cię jeszcze prosić o napisanie szkieletu programu, który by właśnie uruchamiał mój program z uprawnieniami root'a ? Co do przykładu, był on jedynie testem, czy ta technika rzeczywiście działa. W mojej docelowej aplikacji potrzebuje uprawnień do manipulacji połączeniem przez USB. Jeszcze raz z góry dziękuję za pomoc. Pozdrawiam.

    PS. Czy uprawnienia do plików można jedynie zmienić za pomocą adb, czy można to wykonać z poziomu Androida (aplikacji) ?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    nie ma możliwości uruchomienia procesu JVM z uprawnieniami ROOT na normalnym fabrycznym urządzeniu

    można jedynie wykonać program -> plecenie konsoli z uprawnieniami ROOT np:

    mount usbfs none /proc/bus/usb -o devmode=0666

    w sieci na pewno jest więcej o wykorzystywaniu portu USB ale obawiam się ze będzie to wymagało skorzystania z NDK i napisanie trochę kodu w C++, choć jak wygląda praktyka z takim programem nie wiem nie robiłem jeszcze ;)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Itachi

    Bardzo dziękuję za pomoc. Jednak jeszcze trochę ponudzę, ponieważ widzę, że macie rzetelną wiedzę na temat Androida i ogólnie systemu Linux. Otóż w katalogu /dev mam stałe utworzone węzły do USB:

    usb1
    usb2
    usbdev1.1_ep00
    usbdev1.1_ep81
    usbdev1.2_ep00
    usbdev1.2_ep81
    usbdev2.1_ep00
    usbdev2.1_ep81
    usbdev2.2_ep00
    usbdev2.2_ep02
    usbdev2.2_ep03
    usbdev2.2_ep81
    usbdev2.2_ep84
    

    W samym tablecie mam dwa porty USB. Po podłączeniu urządzenia do tabletu, struktura plików tego katalogu nie zmienia się. Moje pytanie brzmi, jak rozpoznać, który plik mam użyć do komunikacji z urządzeniem poprzez USB ? Proszę jeszcze, szczególnie użytkownika zawadaki, o podanie komendy, która pozwoli mi na otwarcie tego pliku i jego manipulacją, jako zwykły użytkownik. Jeszcze raz dziękuję za odpowiedź. Pozdrawiam

    PS. Czy montowanie systemu plików mogę wykonać z poziomu Androida, czy muszę to zrobić z komputera ?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    Nie wiem czy jest możliwość uruchomienia DVM z przywilejami root - nie wydaje mi się. Możesz natomiast z poziomu api wywoływać komendy shella, trzeba oczywiście wywołać su w tej samej sesji powłoki, co resztę komend - nie wiem jak, nigdy się tym nie bawiłem.

    Jeśli chodzi o rozpoznanie urządzenia USB, to "strzelając" będzie to usbdev1.1_ep00 lub usbdev2.2_ep00 - jedynym sposobem na sprawdzenie jest zapis / odczyt do pliku.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x