24

バックグラウンド

以下のように動作するアプリケーションを作成しようとしています。

  • ユーザーがアプリケーションを起動すると、ユーザーが自分のデバイスに PIN を登録しているかどうかがチェックされます。
  • ユーザーが PIN を登録している場合、アプリケーションは [PIN で続行] ボタンを表示する必要があります。
  • ユーザーが「PIN で続行」ボタンを押すと、システム標準の PIN ダイアログが表示される必要があります。 ここに画像の説明を入力
  • ユーザーは自分の PIN を入力し、[続行] ボタンを押します。
  • システムは、入力された PIN が正しいかどうかを確認し、作業を続行する必要があります。

検索

私はいくつかの検索を行い、stackoverflowやその他のインターネット ソースに関する記事をいくつか見つけました。おそらく暗証番号を盗むことができるだろうし、誰もそれを望んでいないと思う.

また、Tutorial: Android Internals - Building a Custom ROM, Pt. 1/2およびチュートリアル: Android の内部 - カスタム ROM の構築、Pt. 2 の 2

編集済み

今日、いくつかの検索を行ったところ、非常に興味深いことがわかりました。解決策への正しい道を進んでいると思います。私の考えを皆さんと共有したいと思います。Android ソースを調べると、興味深いファイルChooseLockPassword.java ( packages\apps\Settings\src\com\android\settings ) とLockPatternUtils.java (*frameworks\base\core\java\com\android\internal\widget* ) が見つかりました。 )今私は興味があります:

質問

LockPatternUtilsコードからクラス関数を呼び出すにはどうすればよいですか? または、Eclipse でその関数が表示されないのはなぜですか?


決断

したがって、Androidシステム PIN ダイアログにアクセスする唯一の方法は、電話をルート化してシステム ファイルに変更を加え、システム PIN ダイアログを使用することだと思います。


質問

  1. ルート化された電話でシステム PIN ダイアログにアクセスするための便利なリンクを教えてください。
  2. 私は正しい道を進んでいますか?この方法で問題を解決できますか?
  3. 誰かがそのような問題に遭遇した場合は、解決するのを手伝ってください。

解決策はありますか?

4

3 に答える 3

7

さて、私はこの問題を解決したので、私の解決策をあなたと共有したいと思います.

最初に言ったように、私は Android ソースを持っているので、PIN とパターン ダイアログにアクセスできるように Android ソースにいくつかの変更を加えました。そして、ここにそれらがあります:

~\AndroidSources\pakages\apps\Settings\AndroidManifest.xmlで、次のコード行を変更しました

<activity android:name="ConfirmLockPattern"
          android:exported="true"> // This line was added by me.
</activity>

<activity android:name="ConfirmLockPassword"
          android:exported="true" // This line was added by me.
          android:them="@android:style/Them.NoTitleBar">
</activity>

<activity android:name="ChooseLockPattern"
          android:exported="true" // This line was added by me.
          android:label="@string/lockpattern_change_lock_pattern_label">
</activity>

この変更により、自分のアプリケーションから「 ConfirmLockPattern」、「ConfirmLockPassword」、および「ChooseLockPattern 」アクティビティを呼び出すことができます。Android ソースコードをコンパイルし、エミュレーターで system.img を起動した後。

私のアプリケーションでは、「ConfirmLockPattern」または「ChooseLockPattern」アクティビティを呼び出すために、次の関数を記述しています。

/**
 * Show PIN/Password confirmation dialog.
 */
void ShowConfirmLockPINActivity() {
    CustomLog.i(TAG, "Show Confirm Lock PIN Activity");
    Intent intent = new Intent(Intent.ACTION_RUN);
    intent.setComponent(new ComponentName("com.android.settings",
        "com.android.settings.ConfirmLockPassword"));
    startActivityForResult(intent, mRequestCode);
} /* ShowConfirmLockPINActivity() */

/**
 * Show set PIN/Password dialog.
 */
void ShowSetLockPINActivity() {
    CustomLog.i(TAG, "Show Set Lock PIN Activity");
    Intent intent = new Intent(Intent.ACTION_RUN);
    intent.setComponent(new ComponentName("com.android.settings",
        "com.android.settings.ChooseLockPassword"));
    startActivityForResult(intent, mRequestCode);
} /* ShowSetLockPINActivity() */

/**
 * Show Pattern Confirmation dialog.
 */
void ShowSetLockPatternActivity() {
    CustomLog.i(TAG, "Show Set Lock Pattern Activity");
    Intent intent = new Intent(Intent.ACTION_RUN);
    intent.setComponent(new ComponentName("com.android.settings",
        "com.android.settings.ConfirmLockPattern"));
    startActivityForResult(intent, mRequestCode);
} /* ShowSetLockPatternActivity() */
于 2012-04-27T12:30:07.200 に答える
3

あなたの質問に関するいくつかの考慮事項があります。

  1. この特定のケースでは、Android のコードを深く掘り下げることはあまり良い考えではありません。PIN コードの検証は重要なセキュリティ ポイントであり、悪意を避けるためにそのメカニズムを隠して十分に保護する必要があるからです。

  2. したがって、実行したいアクション (PIN を要求し、実際の PIN と照合する) は禁止されており、侵入のように見えます。そのため、ユーザー パスワードのストレージにアクセスしようとしないでください。

  3. Intentいくつかの方法で標準の PIN 画面を起動して、すべての作業を行うように依頼する方が正しいでしょう。ただし、簡単な調査では、この方向の結果は得られませんでした。もしかしたら、何かが見つかるかもしれません。

  4. ROMの変更は明らかに行き止まりです.1つのアプリをインストールするために電話をフラッシュする人は誰もいません. ルート化された電話を要求する方が少し良いです。ルート化されていない電話では実行できないアプリがありますが、それでもポイント 2 (侵入) に戻ります。

  5. ユーザーが PIN チェックを無効にしている可能性があり、SIM のないデバイスがあります

したがって、前述のすべてに従って、アプリの別の検証方法を検討することをお勧めします。

于 2012-04-26T07:49:56.267 に答える