Skip to content

Commit 9465931

Browse files
committed
Added modular capability
Added shortcut methods for sending strings Added wrappers for hid_keyboard and hid_mouse devices Added listeners for keyboard lights Bugfixes
1 parent 3a404a6 commit 9465931

File tree

12 files changed

+525
-168
lines changed

12 files changed

+525
-168
lines changed

app/src/main/java/cf/netdex/hidfuzzer/FuzzerTask.java

Lines changed: 0 additions & 116 deletions
This file was deleted.

app/src/main/java/cf/netdex/hidfuzzer/MainActivity.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,51 @@
11
package cf.netdex.hidfuzzer;
22

3-
import android.content.DialogInterface;
3+
import android.content.Context;
44
import android.os.Bundle;
5-
import android.support.v7.app.AlertDialog;
65
import android.support.v7.app.AppCompatActivity;
76
import android.widget.CompoundButton;
7+
import android.widget.Spinner;
88
import android.widget.TextView;
99
import android.widget.ToggleButton;
1010

11+
import cf.netdex.hidfuzzer.hid.HID;
12+
import cf.netdex.hidfuzzer.task.FuzzerTask;
13+
import cf.netdex.hidfuzzer.task.HIDTask;
14+
import cf.netdex.hidfuzzer.task.TestTask;
15+
import cf.netdex.hidfuzzer.util.Func;
16+
1117
public class MainActivity extends AppCompatActivity {
1218

1319
public static String TAG = "tag_hidfuzzer";
14-
private FuzzerTask RUNNING_TASK;
20+
private HIDTask RUNNING_TASK;
1521

1622
protected void onCreate(Bundle savedInstanceState) {
1723
super.onCreate(savedInstanceState);
1824
setContentView(R.layout.activity_main);
1925

2026
final TextView txtStatus = (TextView) findViewById(R.id.txtStatus);
2127
final ToggleButton btnPoll = (ToggleButton) findViewById(R.id.btnPoll);
28+
final Spinner spnTask = (Spinner) findViewById(R.id.spnTask);
29+
30+
final Func<HIDTask.RunState> updatef = new Func<HIDTask.RunState>() {
31+
@Override
32+
public void run(HIDTask.RunState... s) {
33+
txtStatus.setText(s[0].name());
34+
}
35+
};
2236
btnPoll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
2337
@Override
2438
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
2539
if (isChecked) {
26-
RUNNING_TASK = new FuzzerTask(MainActivity.this) {
27-
@Override
28-
protected void onProgressUpdate(FuzzState... s) {
29-
super.onProgressUpdate(s);
30-
txtStatus.setText(s[0].name());
31-
}
32-
};
40+
String stask = (String) spnTask.getSelectedItem();
41+
switch(stask){
42+
case "Fuzzer":
43+
RUNNING_TASK = new FuzzerTask(MainActivity.this, updatef);
44+
break;
45+
case "Test":
46+
RUNNING_TASK = new TestTask(MainActivity.this, updatef);
47+
break;
48+
}
3349
RUNNING_TASK.execute();
3450
} else {
3551
if (RUNNING_TASK != null)

app/src/main/java/cf/netdex/hidfuzzer/HID.java renamed to app/src/main/java/cf/netdex/hidfuzzer/hid/HID.java

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package cf.netdex.hidfuzzer;
1+
package cf.netdex.hidfuzzer.hid;
2+
3+
import android.util.Log;
24

35
import java.util.concurrent.CountDownLatch;
46

@@ -8,25 +10,48 @@
810
* Created by netdex on 1/15/2017.
911
*/
1012

11-
class HID {
12-
static int hid_mouse(Shell.Interactive sh, String dev, byte... offset) {
13+
public class HID {
14+
/**
15+
* A B C D
16+
* XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
17+
* <p>
18+
* A: Mouse button mask
19+
* B: Mouse X-offset
20+
* C: Mouse Y-offset
21+
* D: Mouse wheel offset
22+
*
23+
* @param sh SU shell
24+
* @param dev Mouse device (/dev/hidg1)
25+
* @param offset HID mouse bytes
26+
* @return error code
27+
*/
28+
public static int hid_mouse(Shell.Interactive sh, String dev, byte... offset) {
1329
if (offset.length > 4)
1430
throw new IllegalArgumentException("Your mouse can only move in two dimensions");
15-
// for some odd reason, 4-byte padding is required
16-
byte[] buf = new byte[8];
31+
byte[] buf = new byte[4];
1732
System.arraycopy(offset, 0, buf, 0, offset.length);
1833
return write_bytes(sh, dev, buf);
1934
}
2035

21-
22-
static int hid_keyboard(Shell.Interactive sh, String dev, byte... keys) {
23-
if (keys.length > 8)
24-
throw new IllegalArgumentException("Cannot send more than 7 keys");
25-
// for some odd reason, every odd byte has to be blank
26-
byte[] buf = new byte[16];
27-
for (int i = 0; i < keys.length; i++) {
28-
buf[2 * i] = keys[i];
29-
}
36+
/**
37+
* A B C D E F G H
38+
* XXXXXXXX 00000000 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
39+
* <p>
40+
* A: Key modifier mask
41+
* B: Reserved
42+
* C: Key 1; D: Key 2; E: Key 3; F: Key 4; G: Key 5; H: Key 6;
43+
*
44+
* @param sh SU shell
45+
* @param dev Keyboard device (/dev/hidg0)
46+
* @param keys HID keyboard bytes
47+
* @return error code
48+
*/
49+
public static int hid_keyboard(Shell.Interactive sh, String dev, byte... keys) {
50+
if (keys.length > 7)
51+
throw new IllegalArgumentException("Cannot send more than 6 keys");
52+
byte[] buf = new byte[8];
53+
if (keys.length > 0) buf[0] = keys[0];
54+
if (keys.length > 1) System.arraycopy(keys, 1, buf, 2, keys.length - 1);
3055
return write_bytes(sh, dev, buf);
3156
}
3257

@@ -39,7 +64,8 @@ private static int write_bytes(Shell.Interactive sh, String dev, byte[] arr) {
3964
try {
4065
// run echo command to write to device as root
4166
final CountDownLatch latch = new CountDownLatch(1);
42-
String c = String.format("echo -n -e \"%s\" > %s", bt, dev);
67+
String c = "echo -n -e \"" + bt + "\" > " + dev;
68+
// Log.d("A", c);
4369
sh.addCommand(c, 0, new Shell.OnCommandLineListener() {
4470
@Override
4571
public void onLine(String line) {
@@ -73,4 +99,6 @@ private static String escapeBytes(byte[] arr) {
7399
}
74100
return sb.toString();
75101
}
102+
103+
76104
}

0 commit comments

Comments
 (0)