2015-01-11 15 views
5

フリーゲームの反キテーイング実装の一部として、adb serverがAndroidデバイスで実行されているかどうかを検出しようとしています。ADBサーバーがAndroidで実行されているかどうかを検出しますか?

特に、私はadb shell input tap x,yの使用を止めたいと思っています。なぜなら、このゲームは競争の激しいマルチプレイヤーパズルゲームだからです。

物事は私が試してみました:

  1. USBが接続されている場合、私は検出することができ、バッテリの情報を使用してまあ、それはまた、合法的な使用です。 Settings.SecureまたはSettings.Globalを使用して

  2. 、私はADB_ENABLEDを照会することができますが、ADBが有効になっている場合には、常に1を返します。それは接続されているかどうかを考慮に入れません!

  3. すべてのシステムサービスを照会しますが、adbサービスのように見えるものは表示されません。

この時点では、私はアイデアがありません。うまくいけば、誰かがこれを行う方法を知っていたらうれしいですか?

答えて

6

あなたはadbdプロセスまたはクエリ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 

adbドライバがユニバーサルusbドライバの機能として実装されています。あなたはそれが"adb"が含まれてかどうかを確認するために、現在有効usb機能の(カンマ区切り)リストを確認することができます。

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

しかし、あなたのアプリが、ユーザー制御装置上で完全に動作している間、あなたは、可能なストップ不正行為ではないでしょう。

+0

恐ろしい...ありがとう!この場合、不正行為を止めるのは簡単です... adbが実行されている場合は、サーバーにスコアを提出しないでください:) – Richard

+1

Followup:MotionEvent.getDeviceId()をチェックすることができます。 – Richard

-1

「人工/人工/猿」とマークされた入力タップイベントはありませんか?

static boolean isUserAMonkey() ユーザーインターフェイスが現在サルによって混乱している場合はtrueを返します。

関連する問題