Deploy your own su in Android

Source: Internet
Author: User

Original blog

First, put your own su to the assets Directory of the Android Application project. to distinguish it from the system's su, my own su file is called sur.

In addition, I have not considered the cpu mobile phone of the x86 architecture here. Let's talk about the code! Util. java File

package cdut.robin.root.utils;import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import ledroid.nac.NacShellCommand;import android.content.Context;import android.util.Log;public class Util { private static String getDeployMySuShellScript(String localSuPath) { StringBuffer strBuffer = new StringBuffer(); strBuffer.append("mount -o remount,rw " + MountPoint.getDeviceName("/system") + " /system"); strBuffer.append("\n"); strBuffer.append("mount -o remount,rw /system /system"); strBuffer.append("\n"); strBuffer.append("cat ").append(localSuPath).append(">" + kSysSuPath); strBuffer.append("\n"); strBuffer.append("chown 0:0 " + kSysSuPath); strBuffer.append("\n"); strBuffer.append("chmod 6777 " + kSysSuPath); strBuffer.append("\n"); strBuffer.append("mount -o remount,ro " + MountPoint.getDeviceName("/system") + " /system"); strBuffer.append("\n"); strBuffer.append("mount -o remount,ro /system /system"); strBuffer.append("\n"); return strBuffer.toString(); } final static String kSysSuPath = "/system/xbin/sur"; private static boolean isMySuExists() { return new File(kSysSuPath).exists(); } private static boolean writeMySu(Context context) { Process processShell = null; DataOutputStream osShell = null; String mySuTempPath = context.getFilesDir().getPath() + "/sur"; File file = new File(mySuTempPath); if (file.exists()) { file.delete(); } InputStream open = null; FileOutputStream out = null; try { open = context.getResources().getAssets().open("sur"); out = context.openFileOutput("sur", Context.MODE_WORLD_WRITEABLE); byte buffer[] = new byte[4 * 1024]; int len = 0; while ((len = open.read(buffer)) != -1) { out.write(buffer, 0, len); } out.flush(); } catch (IOException e) { LogHelper.e("TAG", "errMessage" + e.getMessage()); } finally { if (out != null) { try { out.close(); if (open != null) { open.close(); } } catch (Exception e) { LogHelper.e("TAG", "errMessage" + e.getMessage()); } } } Runtime runTime = Runtime.getRuntime(); try { processShell = runTime.exec("su"); osShell = new DataOutputStream(processShell.getOutputStream()); String str = getDeployMySuShellScript(mySuTempPath); osShell.writeBytes(str); osShell.writeBytes("exit\n"); osShell.flush(); processShell.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { if (processShell != null) { try { processShell.destroy(); } catch (Exception e) { // e.printStackTrace(); } processShell = null; } if (osShell != null) { try { osShell.close(); osShell = null; } catch (IOException e1) { // e1.printStackTrace(); } } } return new File(kSysSuPath).exists(); } public static boolean doSthBySu(Context context) { if (!isMySuExists()) { boolean res = writeMySu(context); if (res) { Log.i("robin", "deploy My Su success!"); } else { Log.i("robin", "deploy My Su fail!"); } } else{ Log.i("robin", "My su exsit!"); } Process processShell = null; DataOutputStream osShell = null; //do something here by su try { Runtime runTime = Runtime.getRuntime(); processShell = runTime.exec("sur"); osShell = new DataOutputStream(processShell.getOutputStream()); String str = getBussinessShellScript(); osShell.writeBytes(str); osShell.writeBytes("exit\n"); osShell.flush(); } catch (Exception e) { e.printStackTrace(); return false; } finally { if (processShell != null) { try { processShell.destroy(); } catch (Exception e) { e.printStackTrace(); } processShell = null; } if (osShell != null) { try { osShell.close(); osShell = null; } catch (IOException e1) { // e1.printStackTrace(); } } } return true; } public static String getBussinessShellScript() { return "echo hello"; }}

MountPoint. java File

package cdut.robin.root.utils;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public final class MountPoint { private static HashMap MOUNT_POINT_CACH = new HashMap(10); private static HashMap > DEVICE_CACH = new HashMap(10); public static boolean isMountPoint(String mountPoint) { return getDeviceName(mountPoint) != null; } public static String getDeviceName(String mountPoint) { if (mountPoint == null) { return null; } String deviceName = null; if (MOUNT_POINT_CACH.containsKey(mountPoint)) { deviceName = (String) MOUNT_POINT_CACH.get(mountPoint); } return deviceName; } public static boolean hasMultiMountPoint(String deviceName) { List list = getMountPoints(deviceName); return (list != null) && (list.size() > 1); } public static List getMountPoints(String deviceName) { return (List) DEVICE_CACH.get(deviceName); } static { BufferedReader mountPointReader = null; try { mountPointReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("/proc/mounts")))); String buffer = null; while ((buffer = mountPointReader.readLine()) != null) { MOUNT_POINT_CACH.put(buffer.split(" ")[1], buffer.split(" ")[0]); List list = (List) DEVICE_CACH.get(buffer.split(" ")[0]); if (list == null) { list = new ArrayList(1); } list.add(buffer.split(" ")[1]); DEVICE_CACH.put(buffer.split(" ")[0], list); } } catch (IOException e) { } finally { try { if (mountPointReader != null) mountPointReader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}


End!

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.