Подтвердить что ты не робот

Использовать системный PIN-код в приложении Android

Фон

Я пытаюсь написать приложение, которое работает, как описано ниже.

  • Когда пользователь запускает приложение, проверьте, зарегистрировал ли пользователь PIN-код на своем устройстве.
  • Если пользователь зарегистрировал PIN-код, приложение должно показать кнопку "Продолжить с PIN-кодом".
  • Когда пользователь нажимает кнопку "Продолжить с PIN-кодом", появляется стандартный PIN-код. enter image description here
  • Пользователь вводит свой ПИН-код и нажимает кнопку "Продолжить".
  • После того, как система должна проверить правильность введенного PIN-кода или нет и продолжить работу.

Поиск

Я сделал несколько поисков и нашел несколько статей на /qaru.site/... и других интернет-источниках, в которых говорится: Нет способа разработать новый механизм разблокировки на некорневом телефоне. "или Я был бы удивлен, если бы вы могли, потому что тогда вы, вероятно, сможете украсть пин-код, и я не думаю, что кто-то захочет этого..

Также я просмотрел некоторые видеоуроки, такие как Учебник: Android Internals - создание пользовательского ROM, Pt. 1 из 2 и Учебник: Android Internals - создание пользовательского ROM, Pt. 2 из 2.

EDITED

Я сделал некоторые поиски сегодня и нашел очень интересную вещь, я думаю, что я на правильном пути к решению, и я хочу поделиться своими идеями с вами. Поэтому, глядя в источники в Android, я нашел интересные файлы ChooseLockPassword.java (пакеты\apps\Settings\src\com\android\settings) и LockPatternUtils.java (* frameworks\base\core\java\com\android\internal\widget *) теперь я заинтересован в:

Вопрос

Как я могу вызвать функцию класса LockPatternUtils из моего кода? Или Почему я не вижу эту функцию в Eclipse?


Решение

Поэтому я считаю, что единственный способ получить доступ к диалоговому PIN-коду системы Android - это заставить телефон внести некоторые изменения в системные файлы и использовать PIN-код PIN-кода системы


Вопрос

  • Может ли кто-нибудь предоставить мне полезные ссылки о доступе к диалоговому PIN-коду системы на корневом телефоне.
  • Я прав, и могу ли я решить свою проблему таким образом?
  • Если кто-нибудь столкнулся с такой проблемой, пожалуйста, помогите мне решить.

Любые решения?

4b9b3361

Ответ 1

Хорошо, я решил эту проблему, и теперь хочу поделиться с вами своим решением.

Сначала, когда я сказал, что у меня есть источники для Android, я сделал некоторые изменения в источниках android, чтобы получить доступ к диалоговым окнам PIN и Pattern. И вот они:

в ~\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() */

Ответ 2

Вот некоторые соображения, касающиеся вашего вопроса.

  • Дайвинг глубоко в Android-кодексе - не очень хорошая идея в данном конкретном случае, так как проверка PIN-кода является важной точкой безопасности, и ее механизм должен быть скрытым и хорошо защищенным, чтобы избежать любых злонамеренных намерений.

    /li >
  • Таким образом, действия, которые вы хотите выполнить (запросить PIN-код, а затем проверить его с помощью реального PIN-кода), запрещены и будут выглядеть как вторжение. Таким образом, вы не должны пытаться получить доступ к хранилищу пользовательских паролей.

  • Правильнее было бы попробовать запустить стандартный PIN-код с помощью Intent и попросить его сделать всю работу за вас. Однако краткое исследование не дало мне никаких результатов в этом направлении; возможно, вы найдете что-то.

  • Модификация ПЗУ явно тупика - никто не будет мигать телефоном, чтобы установить одно приложение. Требование к корневому телефону немного лучше, есть приложения, которые не могут работать на некорневом телефоне, но все же он перенаправляет нас обратно в точку № 2 (вторжение).

  • Пользователи могут отключить проверку PIN-кода и есть устройства без SIM-карты.

Итак, в соответствии со всеми упомянутыми, я предлагаю вам подумать о другом методе проверки для вашего приложения.