Size: a a a

2019 July 26

S

Solanio in Android Guards
а
источник

NK

Nikita Kulikov in Android Guards
Так cronet или chromium?)
источник

S

Solanio in Android Guards
есть место где всплывают сертификаты
это точно то место
но прикол что тот метод вызывается где то из нативной либы
источник

NK

Nikita Kulikov in Android Guards
Solanio
есть место где всплывают сертификаты
это точно то место
но прикол что тот метод вызывается где то из нативной либы
Должны подтягиваться сертификаты из системы
источник

NK

Nikita Kulikov in Android Guards
Либо из джавы задаётся пининг
источник

S

Solanio in Android Guards
Nikita Kulikov
Так cronet или chromium?)
ну то что я нашел в пакете chromium
org.chromium.net
дальше походу уходит в нативну либу cronet
источник

S

Solanio in Android Guards
источник

S

Solanio in Android Guards
я сюда подсовывал своф сертификат
но после прилка переставала работать
источник

S

Solanio in Android Guards
пробовал подделать AndroidCertVerifyResult
но нет
источник

NK

Nikita Kulikov in Android Guards
Solanio
я сюда подсовывал своф сертификат
но после прилка переставала работать
Почему?
источник

S

Solanio in Android Guards
Nikita Kulikov
Почему?
хз
думаю есть ещё какая то проверка в либе
или я что то не понимаю
уже не знаю куда смотреть
источник

NK

Nikita Kulikov in Android Guards
А почему ты решил что там есть пининг?
источник

S

Solanio in Android Guards
Nikita Kulikov
А почему ты решил что там есть пининг?
а что там?)
источник
2019 July 29

EK

Evgeniy Kuznetsov in Android Guards
Тихо как-то в группе 😀 Предлагаю обсудить. Навеяно статьёй https://habr.com/ru/post/423753/, где автор (@NeonLost) писал, что пин нужно валидировать только на сервере. Думал, как можно проверять валидность пина локально на девайсе (для работы в оффлайн режиме, например), если будем шифровать данные ключём выведенным из пина, с помощью AES/CBC/NoPadding.
Пришёл к такой схеме:
1. Когда пользователь создал пин, мы выводим из него ключ (назовём его PinKey)
2. В это же время генерим ключ в Android KeyStore - AES или RSA, что позволяет Api level (KeyStoreKey)
3. Генерим рандом байты (Challenge)
4. Шифруем Challenge с помощью PinKey (PinEncryptedChallenge) и KeyStoreKey (KeyStoreEncryptedChallenge) и сохраняем в префы
5. Когда надо проверить пин (CandidatePinKey) локально расшифровываем KeyStoreEncryptedChallenge с помошью KeyStoreKey и получаем эталон Challenge. Расшифровываем PinEncryptedChallenge с помощью PinCandidateKey и получаем candidateChallenge. Сравниваем с эталоном - совпало CandidatePin - OK. Нет - NotOK.

Так как Challenge не зашит в приложении, реверсом его не достать и пин не забрутфорсить.

Такие мысли. Рабочая ли схема, или что-то упустил? Может какие подводные камни заметили?
источник

NK

Nikita Kulikov in Android Guards
Проблема в том, что пины легко перебрать
источник

NK

Nikita Kulikov in Android Guards
Какая бы схема не была
источник

R

Rtem in Android Guards
Nikita Kulikov
Проблема в том, что пины легко перебрать
Мы 1-2 недели назад разбирали уже эту тему. Есть неплохой, рабочий способ как с этим бороться. Но там требуется схождение ряда условий.
источник

NK

Nikita Kulikov in Android Guards
Rtem
Мы 1-2 недели назад разбирали уже эту тему. Есть неплохой, рабочий способ как с этим бороться. Но там требуется схождение ряда условий.
М?
источник

R

Rtem in Android Guards
@NeonLost выдай @LionZXY строку =) Он тоже поупражнятся желает =)))
источник

EK

Evgeniy Kuznetsov in Android Guards
Суть, что если не знаешь какой результат ожидать после расшифровки, то и не узнаешь правильно ли ты подобрал пин или нет
источник