9

I would like to know how can we get root permission from android app? Are there any app out there in android market?

I tried out the below line of code to list out files but nothing happened

Process process = Runtime.getRuntime().exec(new String[] { "su", "-", "root"});

I tried to give TEST_FACTORY permission in my manifest file but I got an error "permitted to system app"

How can I make my app system app?

I want help to get started with these stuff (make app if possible to get root permission) any help on this is very much appreciated. Thanks in advance :)

warvariuc
  • 57,116
  • 41
  • 173
  • 227
ik024
  • 3,566
  • 7
  • 38
  • 61
  • 3
    There is a big difference between an app with root permissions and a system app. Which one do you need? – Simon Feb 06 '14 at 07:25
  • 1
    Hm. re-reading your question, it seams as you're trying to program your own "supersu"-alternative? If so: you cannot do that in Java. You'll need C to program and compile an executable that can run natively on Android's kernel. That one can of course plug into any Java APK that handles user-interaction, but you still ned the su-executable to call your java app. – Johannes H. Feb 06 '14 at 07:35
  • @Simaon I m basically looking to alter the Android kernel from my app. And I have no idea how to go about it. Pls help me out here. Whats the right way to get started for this purpose? – ik024 Feb 06 '14 at 08:36
  • @Johannes I m basically looking to alter the Android kernel from my app. And I have no idea how to go about it. Pls help me out here. Whats the right way to get started for this purpose? – ik024 Feb 06 '14 at 08:36
  • Calling shell commands using `su` is ther right way to get there. You just have to figure out what commands to call - and what commands are avialable. First thing to do: learn how to use the linux shell. Android features a bourne-shell, so you can use bourne-shell specific syntax. – Johannes H. Feb 06 '14 at 08:41
  • @JohannesH. so can we execute shell commands using su from android app ? – ik024 Feb 06 '14 at 08:45
  • Yes. see my answer on how to do that. You may also take a look at the great code linked by @NirHartmann – Johannes H. Feb 06 '14 at 08:47
  • @JohannesH. okay so what is wrong with the code that I have posted in my question above? It was not working why is it? – ik024 Feb 06 '14 at 08:53
  • It shoudl work, just do noting - su without any other command to execute won't do much. Also note that the phone has to be rooted of course, otherwise the su binary isn't available. – Johannes H. Feb 06 '14 at 08:56
  • @JohannesH. so if I want to test the app in another device that should also be rooted right? – ik024 Feb 06 '14 at 09:05
  • and also is it possible to test it out in emulator? – ik024 Feb 06 '14 at 09:05
  • EVERY device that shoudl run `su`has to HAVE `su`ofr course, so yes. I don't know about the emulator, I guess it doesn't feature a su binary unless you inject one. Haven't done anything that required su myself though, so I really don't know. – Johannes H. Feb 06 '14 at 09:08

2 Answers2

6

Theres a good answer here - ANDROID: How to gain root access in an Android application?

"As far as I know, you can only run command-line commands using root privileges. You can use this generic class I made that wraps the root access in your code: http://muzikant-android.blogspot.com/2011/02/how-to-get-root-access-and-execute.html"

Community
  • 1
  • 1
Nir Hartmann
  • 1,389
  • 12
  • 14
5

First: note that you can only execute shell commands using su (= you can only use shell commands as root, not java code).

Second: Not sure if this applies to all su apps out there, but this is the help message of su on my phone:

Usage: su [options] [--] [-] [LOGIN] [--] [args...]

Options:  
  --daemon                      start the su daemon agent  
  -c, --command COMMAND         pass COMMAND to the invoked shell  
  -h, --help                    display this help message and exit  
  -, -l, --login                pretend the shell to be a login shell  
  -m, -p,  
  --preserve-environment        do not change environment variables  
  -s, --shell SHELL             use SHELL instead of the default /system/bin/sh  
  -u                            display the multiuser mode and exit  
  -v, --version                 display version number and exit  
  -V                            display version code and exit,  
                                this is used almost exclusively by Superuser.apk  

This means: you have to run su -c something (or su -c something - root, but rootis the default anyway). essentially this is equal to su on most Linux systems, except the daemon-thing, as there is no daemon ahndling su calls on regular linux systems.

If other su commands behave differently (which is possible), it's more secure to open a stream to a shell, execute su, evaluate it's return code, then proceed to execute other commands, finally execute exit.

Johannes H.
  • 5,875
  • 1
  • 20
  • 40