2015-01-11 14 views
5

Sto cercando di rilevare se il adb server è in esecuzione sul dispositivo Android per parte di un'implementazione anti-cheat per il mio gioco gratuito.Rileva se il server ADB è in esecuzione su Android?

In particolare, voglio interrompere l'uso di adb shell input tap x,y, poiché il gioco è un gioco di puzzle multiplayer competitivo.

cose che ho provato:

  1. Utilizzando informazioni batteria posso rilevare se USB è collegato Bene, questo è anche un uso legittimo..

  2. Utilizzando Settings.Secure o Settings.Global, posso interrogare ADB_ENABLED, ma che restituisce sempre 1 se adb è abilitato. NON prende in considerazione adb connected o no!

  3. Interrogare tutti i servizi di sistema, ma non riesco a vedere nulla che assomigli ad un servizio ADB.

A questo punto, sono fuori di idee. Spero che qualcun altro sappia come farlo?

risposta

6

È possibile controllare per l'esecuzione di adbd processo o proprietà di sistema di query init.svc.adbd:

$ ps adbd 
USER  PID PPID VSIZE RSS  WCHAN PC   NAME 
root  14947 1  4596 208 ffffffff 00019358 S /sbin/adbd 

$ getprop init.svc.adbd 
running 

In Android il driver adb è implementato come una funzione di driver universale usb. È possibile verificare il (separati da virgola) lista degli abilitati usb funzioni per vedere se include "adb":

$ cat /sys/devices/virtual/android_usb/android0/functions 
mtp,adb 

Ma non sarebbe in grado barare con il quale l'applicazione è in esecuzione completamente sul dispositivo controllato dall'utente.

+0

Impressionante ... grazie! In questo caso, smettere di imbrogliare è facile ... non inviare il punteggio ai server se l'adb è in esecuzione :) – Richard

+1

Followup: puoi controllare MotionEvent.getDeviceId() ... restituisce zero per l'input da adb! – Richard

-1

Non vengono immessi eventi di tocco contrassegnati come "sintetici/artificiali/scimmia"?

static boolean isUserAMonkey() Restituisce "true" se l'interfaccia utente è attualmente in disordine con una scimmia.

Problemi correlati