1

Firstly I need to say that I know this topic has been discussed many times but none of answers helped and I think this question is somewhat different than the others.

I have tried to root my Android 4.2.1 phone trying various automatic methods, where all of them failed. Also rooting using update.zip does not work due to "Invalid OTA, missing scatter" error.

However I am able to get root access using "adb root" command so I have tried to root my phone manually:

  • 'adb root' and 'adb remount' commands to gain access to system partition
  • downloaded newest su binary (version 3.1.1)
  • pushed it to '/system/xbin/su'
  • set suid and sgid bit: 'chmod 6755 su' --> ls -l displays '-rwsr-sr-x root root 380532 2008-02-29 02:33 su'
  • linked '/system/xbin/su' to '/system/bin/su'
  • installed newest Superuser from Google play (3.1.3)
  • installed busybox (though this is not necessary if I understand correctly?)

Now it gets interesting:
When I 'adb shell' into my phone, I can use 'su' command and automatically get root privileges ($ changes to # and I can access root's files), and it is logged in Superuser app with originator as 'Shell'. BUT when I try application that needs root, it takes long (10 seconds) and then it fails (I have tried 'Root Checker Basic' from the store).

The Superuser app never shows any popup, also it is not in the log. It seems that it automatically denies all requests.

So here is my question: Have I done all steps correctly? (maybe I am missing something very important)

I am quite desperate right now (spent nearly 2 whole days trying to have this done), so I would even resort to solutions as editing some Superuser config files and enabling root access for app manually.

PS: If you need additional info, just ask, I will try to fill information if possible

Further investigation:

  • setting auto-allow in Superuser does not work either
  • running su from terminal throws exception: java.lang.SecurityException: broadcast asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS. So I need to set this permission somewhere..
  • 1
    I'm not 100% sure, but shouldn't the su be owned by system:system? AFAIK there's no user "root" on Android devices (hence the "invalid" negative userID, I guess). Maybe you try chown system:system /system/xbin/su and see if that does the trick. Please report back: if it works, I'll make this an answer. – Izzy Jan 9 '14 at 10:14
  • @Izzy So I have tried your suggestion with various accounts, system, root, -1, random rumbers... And it is weird - it always fails with the same exception, including the "calling from user 0". Suid and Sgid bits were correct (tripple checked). – Markos Jan 10 '14 at 0:14
  • uid 0 is the most privileged user (root on Linux), so the "calling from" looks good. You can try which user belongs to this id by "suing" to it and issuing the id command. // Btw, I just checked on one of my devices, and have to take back my previous guess: su shows up as -rwsr-sr-x root root, just the size differs (104800 2013-12-31 23:32 su on my ICS device). Maybe your Superuser has an issue? Check ls -l /system/app/Super*, mine gives me -rw-r--r-- root root 570342 2012-01-01 04:41 Superuser.apk. – Izzy Jan 10 '14 at 0:33
  • @Izzy Interesting. So maybe I am using wrong or outdated su. I have tried several 3 or 4 versions and none matched in size. Could you please check su -v for its version? And which Superuser app are you using (by which I mean from who)? – Markos Jan 10 '14 at 2:09
  • I'm using SuperSu (and the output is 1.86:SUPERSU) on a 4.0.3 LG O4X here (that's the device I've checked). AFAIR I've got chainfire's superuser on my other devices. – Izzy Jan 10 '14 at 6:51
0

Izzy's comments lead me to correct path, so I have managed to root the device. If somebody else having the same problem (auto-root programs don't work but you can access device using adb root), here is complete how-to to root your phone manually:

  1. Install Superuser from ClockworkMod on Google Play directly to your phone
  2. Prepare adb as root and make /system writeable: adb kill-server, adb root, adb remount (you might need to kill adb.exe in task manager if it hangs)
  3. Pull the just downloaded apk to your computer: adb pull /data/app/com.koushikdutta.superuser-1.apk (note: it may have different name in the future)
  4. On your PC: open the apk using zip (for example rename extension to .zip or use WinRar)
  5. Copy from zip system\bin\su to your working directory
  6. Push it to your phone: adb push su /system/xbin/su
  7. Be sure that owner is root: adb shell chown root:root /system/xbin/su
  8. Set SUID and SGID bits on the binary: adb shell chmod 06755 /system/xbin/su
  9. Reboot phone: adb reboot
  10. Try su from adb: adb shell, su; prompt should change from $ to #
  11. Try su from phone: install terminal and use command su or use Root Checker Basic from the store
  12. If su from adb works but does not work from phone, repeat whole process from 1 but download different Superuser application from market (for example ChainsDD's version didn't work for me)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.