Android root app echo无法使用设备驱动程序

时间:2012-09-08 12:38:30

标签: android bash terminal

我目前正在尝试将数据写入我在手机上运行的HID驱动程序。如果我在shell中运行以下命令(通过adb)echo -e \\x00\\x00\\x07\\x04\\x00\\x00\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0,则在连接到设备的计算机上键入正确的字符,在本例中为da。但是,如果我在像这样的Android应用程序中发送相同的命令

Runtime shell = Runtime.getRuntime();
Process p = shell.exec("su");
DataOutputStream out = new DataOutputStream(p.getOutputStream());
out.writeBytes("echo -e \\x00\\x00\\x07\\x04\\x00\\x00\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0\n");

打印2个单引号,但没有其他内容。我已经证明该应用程序通过将文件写入只能由root接收的位置来获得root权限。

那么为什么像这样的命令在shell中的行为方式不同于抛出进程类?有没有人对如何将数据发送到我的设备驱动程序有任何建议?

由于 阿德里安

PS我也试过shell.exec("echo -e \\x00\\x00\\x07\\x04\\x16\\x06\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0");,但这没有给我什么

1 个答案:

答案 0 :(得分:1)

Java处理流后,shell会看到以下命令:

echo -e \x00\x00\x07\x04\x00\x00\x00...

即,Java正在处理双反斜杠本身。您需要添加另一组转义反斜杠,以便shell实际看到一个转义反斜杠。你可以做到

out.writeBytes("echo -e \\\\x00\\\\x00...")

但这看起来很可怕。只需使用

将带引号的字符串传递给shell
out.writeBytes("echo -e '\\x00\\x00\\x07\\x04\\x00\\x00\\x00' > /dev/hidg0 && echo -e '\\x00\\x00\\x00\\x00\\x00\\x00\\x00' > /dev/hidg0\n");