Size: a a a

2021 January 25

NK

ID:0 in Android Guards
Хочу вам рассказать про одну простую, но показавшуюся мне интересной защиту приложений. Берем какую-нибудь нативную библиотеку с открытыми исходниками, которую будет активно использовать приложение и добавляем в логику ее работы логику нашей защиты. Например можно добавить проверку на модификацию приложения или что-нибудь еще. При срабатывании проверки тихо убиваем процесс. Лучше если это будет происходить не сразу, а через какое-то время, в идеале не фиксированное. Например можно добавить разброс от 1 до 5 минут.

В результате получаем логическую бомбу, которую не так просто обнаружить сходу. Почему? А вот представьте себе большое обфусцированное приложение, в котором есть несколько нативных библиотек (одна из которых "генномодифицированная") при этом само приложение содержит еще несколько защит. Возможно дублирующих (проверка на модификацию приложения).

А с чем интересным сталкивались вы? Делитесь в комментариях.
источник

СП

Сергей П. in Android Guards
ID:0
Хочу вам рассказать про одну простую, но показавшуюся мне интересной защиту приложений. Берем какую-нибудь нативную библиотеку с открытыми исходниками, которую будет активно использовать приложение и добавляем в логику ее работы логику нашей защиты. Например можно добавить проверку на модификацию приложения или что-нибудь еще. При срабатывании проверки тихо убиваем процесс. Лучше если это будет происходить не сразу, а через какое-то время, в идеале не фиксированное. Например можно добавить разброс от 1 до 5 минут.

В результате получаем логическую бомбу, которую не так просто обнаружить сходу. Почему? А вот представьте себе большое обфусцированное приложение, в котором есть несколько нативных библиотек (одна из которых "генномодифицированная") при этом само приложение содержит еще несколько защит. Возможно дублирующих (проверка на модификацию приложения).

А с чем интересным сталкивались вы? Делитесь в комментариях.
Кажется это даже не велосипед изобретен а самокат
источник

R

Rtem in Android Guards
Сергей П.
Кажется это даже не велосипед изобретен а самокат
Когда знаешь суть присходящего, кажется что это херня какая-то да =) Но вот когда не знаешь...
источник

w

waldo in Android Guards
На самом деле интересная затея
источник

СП

Сергей П. in Android Guards
Кажется это чуть хитрее чем "вылетать сразу"
источник

R

Rtem in Android Guards
Сергей П.
Кажется это чуть хитрее чем "вылетать сразу"
Дело не в вылете. Можно не вылетать. Дело в том, что ты фактически используешь извращенную версию стеганографии. Ты прячешь защиту там, где скорее всего не будут искать. По крайней мере сразу
источник

R

Rtem in Android Guards
Кстати именно вылет и позволил эту защиту локализовать 😉 Не только он конечно, был там еще один просчет со стороны "blue team" 😄 Но это уже совсем другая история
источник

СП

Сергей П. in Android Guards
Ну да. Логируешь код перед вылетом глубоко
источник

R

Rtem in Android Guards
Сергей П.
Ну да. Логируешь код перед вылетом глубоко
Вылет в нативе происходит. Т.е. тебе еще надо понять откуда это вызывается. Так что "логировать перед вылетом" это классная идея, но в данном случае нереализуемая
источник

AK

Andrey Khitryy in Android Guards
ID:0
Хочу вам рассказать про одну простую, но показавшуюся мне интересной защиту приложений. Берем какую-нибудь нативную библиотеку с открытыми исходниками, которую будет активно использовать приложение и добавляем в логику ее работы логику нашей защиты. Например можно добавить проверку на модификацию приложения или что-нибудь еще. При срабатывании проверки тихо убиваем процесс. Лучше если это будет происходить не сразу, а через какое-то время, в идеале не фиксированное. Например можно добавить разброс от 1 до 5 минут.

В результате получаем логическую бомбу, которую не так просто обнаружить сходу. Почему? А вот представьте себе большое обфусцированное приложение, в котором есть несколько нативных библиотек (одна из которых "генномодифицированная") при этом само приложение содержит еще несколько защит. Возможно дублирующих (проверка на модификацию приложения).

А с чем интересным сталкивались вы? Делитесь в комментариях.
Если проверка модификации просто на основе хеша подписи, то она обходится поиском подстроки (в том числе и в нативном коде).
Обычно это первая проверка, что приложение после переподписывания работает корректно и можно дальше копать.

Да и SafetyNet вроде есть для подписи, который сильно усложняет в совокупности с редексерами и дексгардами все сильно.
источник

R

Rtem in Android Guards
Что ж вы так цепляетесь к деталям =) Ну небыло там проверки подписи =)) Я просто пересказал в свободной форме суть защиты и добавил простые примеры. Чтобы все, кто не сталкивался пополнили копилочку свонего опыта. Чтобы реверсеры знали куда еще смотреть, а разработчики знали где и как можно прятать.
источник

PV

Pavel Vasiliev in Android Guards
Не пробовал реализовывать такое но мне всегда казалась довольно прикольной мысль делать что-то подобное во время сборки - вставлять в случайные места в случайном количестве в код куски логики с проверками, антиотладкой и прочими ништяками. Поидее если оформить это в плагин сборки то можно втыкать подобные штуки и в обычный байткод и в натив (если не тянем либы из реп а собираем из сорцов)
источник

PV

Pavel Vasiliev in Android Guards
Только вот заморачиваться с подобным наверное очень затратно по времени и соответсвенно деньгам, т.к. надо сто раз проверить что не поломаешь код и не заложишь в релизные артефакты что-то от чего будут потом нативные краши
источник

D

Denys in Android Guards
А где такие защиты делают? Чур, финтех не вспоминать.
источник

R

Rtem in Android Guards
Denys
А где такие защиты делают? Чур, финтех не вспоминать.
Это был не финтех =) Больше подробностей дать не могу.
источник

D

Denys in Android Guards
Rtem
Это был не финтех =) Больше подробностей дать не могу.
Имею в виду, в каких сферах с защитами заморачиваются?
источник

R

Rtem in Android Guards
Denys
Имею в виду, в каких сферах с защитами заморачиваются?
Как правило там, где есть экономическая выгода от приложения. Как правило прямая.
источник

R

Rtem in Android Guards
Ну или там где просто сидят упоротые на всю голову люди и любят когда безопасно )
источник

R

Rtem in Android Guards
Это я про себя щас 😄
источник

Я

Ярослав in Android Guards
Pavel Vasiliev
Не пробовал реализовывать такое но мне всегда казалась довольно прикольной мысль делать что-то подобное во время сборки - вставлять в случайные места в случайном количестве в код куски логики с проверками, антиотладкой и прочими ништяками. Поидее если оформить это в плагин сборки то можно втыкать подобные штуки и в обычный байткод и в натив (если не тянем либы из реп а собираем из сорцов)
Задача какая то сложная, проще делать навесное:)
источник