47

実行中のアクティビティにタッチスクリーンイベントを挿入できるサービスをバックグラウンドで実行するアプリケーションを作成しようとしています。を呼び出すことで、アプリケーションの一部であるアクティビティにイベントを挿入できますが、アプリケーションInstrumentation.sendPointerSync(motionEvent);のアクティビティを実行せずにこれを実行しようとすると、INJECT_EVENTS権限がないという権限エラーが発生します。この権限をマニフェストに次のように追加しました。<uses-permission android:name="android.permission.INJECT_EVENTS"></uses-permission>ただし、それでも同じ権限例外がスローされます。少し検索したところ、INJECT_EVENTS権限を取得するには、システムが署名されているのと同じ署名でアプリに署名する必要があるという回答が得られました。しかし、これが正確に何を意味するのかはわかりません。カスタムROMを見つけてビルドし、アプリケーションが署名されているのと同じ署名で署名する必要があります。次に、カスタムROMをデバイスにインストールしてから、アプリをインストールすると、タッチイベントを正しく挿入できますか?この場合は、このページのような、すでにまとめられているカスタムROMから始める方がよいでしょう。それとも、Androidプロジェクトのgitコピーを取得して、myslef全体をビルドする必要がある状況ですか?そして、どちらの方法でも、これを実現するために正しい方向に私を働かせることができる場所を誰かが知っていますか?

4

8 に答える 8

19

イベントをのプロセスに挿入するには、アプリを/ system / appにインストールし、APKにシステム証明書で署名する必要があります。

1.アプリマニフェストに権限を追加します

<uses-permission android:name="android.permission.INJECT_EVENTS"/>

2.システム証明書を使用してAPKに署名します

これには、電話で実行されるシステムの構築に使用されるgoogleキーを使用してキーストアを構築するために、AOSPソースが必要です。

AOSPディレクトリがある場合、@ Eliは、「keytool-importkeypair」と呼ばれる優れたスクリプトを使用してキーストアを構築する方法を示す優れた仕事をします。

例としてIntelliJを使用して、[ビルド]メニューから[署名付きAPKの生成..]を選択します。上で作成したキーストアを見つけ、指定されたパスワード(androidなど)を入力し、必要に応じてキーに同じパスワードを指定します。署名されたapkは、通常の場所(./out/production //)ではなく、プロジェクトルート(!)に書き込まれることに注意してください。

3. / system /app/にインストールします

adb root
adb remount
adb push MyApp.apk /system/app

「インストール」は自動的に行われます。ただし、通常のアプリのインストールプロセスとは異なり、APK内のネイティブライブラリは/ system /lib/にコピーされないことに注意してください。NDKを使用して独自のネイティブライブラリをビルドおよび呼び出す場合は、手動で行う必要があります。

于 2014-04-07T02:48:46.247 に答える
13

実際、これはルート化されたデバイスでは非常に簡単です。/ systemで実行されているアプリは、必要な権限にアクセスできると思います。したがって、アプリを/ systemに手動でインストールするだけです(ここで説明されているようにhttp://androidforums.com/droid-all-things-root/64603-installing-apk-system-app-directory.html):

ターミナルエミュレータで次のコマンドを実行して、/ systemディレクトリを読み取り/書き込みとして再マウントし、アプリケーションをSDCARDから/ system/appディレクトリにインストールします。

su
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
cp /sdcard/APP.apk /system/app

コンピューターからadbを使用する場合は、次のコマンドを実行します。

adb remount
adb shell cp /sdcard/APP.apk /system/app

このプロセスを簡素化するために、何人かのユーザーがGoogleマーケットプレイスのrootExplorerを利用しています。


または、これをチェックしてください:システム権限でAndroidアプリケーションをコンパイルする方法

于 2011-09-07T01:49:02.723 に答える
9

タッチイベントの使用:

  1. ROMが署名されているのと同じ署名でアプリケーションに署名します

  2. これを行うには、keytool-importkeypairをダウンロードします

  3. platform.pk8 + platform.x509.pemを検索します:{Androidソース} / build / target / product / security

  4. 次に、証明書を生成します。

    ./keytool-importkeypair -k google_certificate.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

  5. 次に、Eclipseからアプリをエクスポートし、生​​成した新しい証明書で署名します

  6. ROMのビルド、デバイスへのフラッシュ、アプリのインストール

http://code.google.com/p/android-event-injector/をチェックしてください

于 2014-02-04T14:31:21.873 に答える
6

API 18以降、ユーザーのアクセス許可にバインドされていないUiAutomationクラスがあります。

詳細については、http://developer.android.com/reference/android/app/Instrumentation.html#getUiAutomation()を参照してください。

于 2015-06-03T12:10:51.763 に答える
3

誰かがこの署名レベルの権限をバイパスする解決策を探していて、タッチイベントを作成したい場合。

ソースをC++レベルまで調べました。ここでは、アプリがタッチイベントを作成できるかどうかが実際にチェックされています。以下は、アプリが許可されるべきかどうかを実際にチェックする関数です。

bool InputDispatcher::hasInjectionPermission(int32_t injectorPid, int32_t injectorUid) {
return injectorUid == 0
        || mPolicy->checkInjectEventsPermissionNonReentrant(injectorPid, injectorUid);
}

したがって、この関数は、アプリのユーザーIDが0に設定されている場合にtrueを返します。

ここで、ファイルを編集して、アプリのuidを0に変更しました/data/system/packages.xml。このファイルには、すべてのアプリに割り当てられたuidが含まれています。userIdアプリに対応する属性を0に設定して、このファイルを編集します。

これで必要なのは、アプリを強制的に閉じて再起動することだけです。INJECT_EVENTS許可をバイパスすることができます。

于 2014-07-29T11:18:34.663 に答える
1

私も以前にこれと同じ問題を抱えています。以下の方法で私はKEY_INJECT_EVENT_PERMISSION問題を解決します。

ステップ1:デバイスROMの署名(私にとってはファイル名はsignapk)を取得する必要があります。

ステップ2:次に、platform.pk8ファイルとplatform.x509.pemファイルを取得する必要があります。

ステップ3:アプリケーションのデバッグapkを生成します。

ステップ4:上記のすべてのファイルを1つのフォルダーに配置します。

ステップ5:上記のファイルをすべて取得したら、以下に示すコマンドを実行します。

java -jar signapk.jar platform.x509.pem platform.pk8 your_debug_app.apk customname.apk

ステップ6:この後、同じフォルダーに署名されたapk(customname.apk)を取得できます。取得したら、以下のコマンドを実行します。

adb install -r app-release-signed.apk

ステップ7:これでInject_Event_Permissonが有効になります。

以下のリンクを参照してください。

https://steveandro.blogspot.com/2019/09/key-injection-android.html

于 2019-09-11T11:06:51.070 に答える
0

物理的なSamsungデバイスを使用している場合、デバイス設定でナビゲーションタイプをスワイプジェスチャからボタンに変更すると、この問題が解決するようです。

于 2021-02-02T11:39:17.573 に答える
-1

了解しました。ついにこれを手に入れました。私がこれを言うとき私を信じてください、あなたがそれをそれと呼ぶことができるならば、これはおそらく最悪の解決策です。これにはrootが必要であり、システム全体のすべてのパッケージの署名検証が無効になります。これにより、危険なアプリが通常のアプリに置き換わる一連の攻撃にさらされる可能性があります。

とにかく、それが邪魔にならないように、ここに行きます:

  1. Xposedをインストールします
  2. Xposed用のXInstallerモジュールをインストールします
  3. XInstallerオプションで、[インストール]という名前のメニューに移動し、[署名の確認]と[アプリの確認]のチェックボックスをオンにします

再起動後に行ってもよいはずです。アプリをシステムとしてインストールする必要はありません。ユーザースペースで実行できるようになりました。これにより、/ system / appにコピーする必要がなくなるため、開発が容易になると思います。

于 2015-09-28T02:45:53.753 に答える