PrivilegedPort.java 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package de.tudarmstadt.informatik.hostage.system;
  2. import java.io.FileDescriptor;
  3. import android.net.LocalServerSocket;
  4. import android.net.LocalSocket;
  5. public class PrivilegedPort implements Runnable {
  6. private final static String NAME = "hostage";
  7. private int port;
  8. public PrivilegedPort(int port) {
  9. this.port = port;
  10. }
  11. @Override
  12. public void run() {
  13. Process p;
  14. try {
  15. String command = String.format("/data/local/p %d", port);
  16. p = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
  17. p.waitFor();
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. public FileDescriptor bindAndGetFD() {
  23. FileDescriptor fd = null;
  24. try {
  25. new Thread(this).start();
  26. LocalServerSocket lss = new LocalServerSocket(NAME);
  27. LocalSocket ls = lss.accept();
  28. while (ls.getInputStream().read() != -1)
  29. ;
  30. FileDescriptor[] fdarr;
  31. fdarr = ls.getAncillaryFileDescriptors();
  32. if (fdarr != null) {
  33. fd = fdarr[0];
  34. }
  35. ls.close();
  36. lss.close();
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. return fd;
  41. }
  42. }