Секретный код. Прячем конфиденциальную информацию внутри своих приложений для Android

Некоторые пользователи сталкиваются с проблемой блокирования Андроид устройств режимом Privacy Protection. Мы расскажем что это такое и опишем основные методы по его удалению из телефона.

Защита личных данных и конфиденциальности в последнее время стала чрезвычайно актуальной. Многие производители стараются защитить свои устройства от кражи, используя различные технологии. Одна из таких технологий - режим «Защиты Конфиденциальности» .

Что это за режим?

Please enter the Privacy Protection password to unlock - специальная функция смартфона, которая предупреждает о необходимости ввести пароль деблокирования режима защиты. В основном, данная функция появляется на телефонах после замены сим-карт или многочасовой работы экрана с отключенной автоматикой потухания.

Ввод стандартных паролей не поможет, здесь нужно указать ключ, установленный в качестве основного при подключении функции защиты телефона от кражи. На многих китайских смартфонах (Micromax, Alcatel, Doogee и др.) опция включена по умолчанию, отсюда и идет возникновение проблемы.

Удаляем Privacy Protection

Мы покопались на форумах рунета и выделили несколько способов для деблокирования данного режима. У некоторых получается сделать все просто, а другим пришлось заново прошивать девайс через ПК и устанавливать драйвера.

  1. Для начала попробуйте ввести стандартные «заводские» пин-коды , которые производители чаще всего устанавливают на такой режим: 000000, 1234, 0000, 123456. Если эти пинкоды не сработают, переходим к следующему пункту.
  2. Запрашиваем пароль на свою sim-карту. Дело в том, что телефон может быть привязан к номеру пользователя (опция защиты от кражи). Процесс прост :
    • вынимаем сим карту из заблокированного девайса и вставляем туда другую, но с остатком средств на счету;
    • свою карту устанавливаем на другой телефон;
    • перезагружаем блокированный Privacy Protection телефон;
    • на вашу карту придут сообщения на китайском, пишем в ответном смс следующие символы - #mima#
    • в ответ должно придти сообщение с пин-кодом из 8 цифр - их и вводим.
  3. Если все вышеописанные способы оказались бесполезными, нужно делать перепрошивку и сброс настроек. В интернете можно найти большое количество информации по этому поводу. Я нашел довольно неплохую видеоинструкцию по удалению Privacy Protection из телефона.

Что касается последнего способа, то у пользователей возникло много споров из-за оправданности такого метода. Некоторые утверждают, что у них через такой резет был стерт даже imei телефона. Все сложно короче.

Если вам помог какой-нибудь из способов и вы смогли убрать Privacy Protection из телефона - отпишитесь в комментариях. Также прошу рассказать и о других способах удаления проблемы, если вы их нашли. Спасибо.

К сожалению, MailChimp не имеет функции добавления чекбокса принятия Политики конфиденциальности. Добавлять в редакторе форм обычный чекбокс бесполезно, поэтому мы пойдём немного другим путём. Мы добавим его в саму форму уже на нашем сайте.

Для этого нам нужно:

  1. Добавить в код формы, которую генерировал нам MailChimp, строку с чекбоксом.
  2. Отключить кнопку, если чекбокс согласия не отмечен.

Небольшой комментарий ко второму пункту. Если не отключить кнопку при неотмеченном чекбоксе, форма всё равно сработает. А это уже противоречит закону, т. к. человек должен выразить явное согласие с вашей Политикой конфиденциальности. Если ваш сайт проверят, могут сказать «Ай-ай-ай».

Код для добавления в форму галочки согласия

Вставьте этот код перед кнопкой вашей формы:

Тег нужен для того, чтобы чекбокс срабатывал и при нажатии на текст.

Для того, чтобы отключить кнопку, добавьте в её код «disabled»:

disabled class="button">

Ну и для того, чтобы сама кнопка в неактивном состоянии отличалась от обычной, в CSS допишите стили для неактивной кнопки. Самый простой вариант, если не хотите заморачиваться — измените прозрачность.

Input:disabled { opacity: .5; }

Код, если нужно, чтобы галочка была отмечена по умолчанию

Добавьте к коду чекбокса «checked». Это сделает чекбокс отмеченным по умолчанию:

В код кнопки «disabled» не добавляйте:

В этом случае, если пользователь отключит чекбокс, кнопка станет неактивной.

Вот и всё. Довольно просто, не правда ли?

Наверное, каждый программист хоть раз в жизни сталкивался с необходимостью спрятать информацию внутри приложения. Это могут быть ключи шифрования для расшифровки компонентов программы, адреса API Endpoints, строки, которые лучше спрятать, чтобы затруднить работу реверсеру. В Android это сделать очень непросто, но можно существенно усложнить их извлечение.

Начнем с того, что, несмотря на обещание показать эффективные методы скрытия информации в приложении, я все-таки настоятельно рекомендую этого не делать, по крайней мере до тех пор, пока не станет ясно, что без этого просто не обойтись. Какие бы изощренные методы скрытия информации ты ни применял, ее все равно удастся извлечь. Да, ты можешь применить множество техник обфускации, использовать шифрование или скрытые внутри приложения файлы (обо всем этом мы поговорим), но если кто-то поставит себе цель вскрыть секреты твоего приложения, то при наличии достаточной квалификации он это сделает.

Так что все пароли, ключи шифрования и другую действительно важную информацию засовывать в код приложения уж точно не стоит. Нужно дать приложению доступ к какому-то веб-сервису? Используй его API для получения токена сервиса в момент подключения к нему. Приложение использует специальный скрытый API твоего сервиса? Сделай так, чтобы оно запрашивало его URL у самого сервиса и этот URL был уникальным для каждой копии приложения. Делаешь приложение для шифрования файлов? Запрашивай пароль шифрования у пользователя. В общем, любыми средствами сделай так, чтобы внутри приложения не было никакой информации, которая может привести к взлому твоих аккаунтов, твоего веб-сервиса или данных пользователя.

А если ты все-таки решил вшить важные данные в код приложения и не хочешь, чтобы их увидели, есть несколько рецептов, как это сделать, от простейших до действительно сложных.

Сохраняем строки в strings.xml

Это, наверное, простейший метод скрытия строк. Смысл метода в том, чтобы вместо размещения строки внутри константы в коде, что приведет к ее обнаружению после декомпиляции, разместить ее в файле res/values/strings.xml:

... MyPassword ...

А из кода обращаться через getResources():

String password = getResources().getString(R.string.password);

Да, многие инструменты для реверса приложений позволяют просматривать содержимое strings.xml , поэтому имя строки (password) лучше изменить на что-то безобидное, а сам пароль сделать похожим на диагностическое сообщение (что-то вроде Error 8932777), да еще и использовать только часть этой строки, разделив ее с помощью метода split() :

String string = getResources().getString(R.string.password).split(" "); String password = strings;

Естественно, переменным тоже лучше дать безобидные имена, ну или просто включить ProGuard, который сократит их имена до одно-двухбуквенных сочетаний типа a , b , c , ab .

Разбиваем строки на части

Ты можешь не только использовать части строк, но и дробить их, чтобы затем собрать воедино. Допустим, ты хочешь скрыть в коде строку MyLittlePony. Совсем необязательно хранить ее в одной-единственной переменной, разбей ее на несколько строк и раскидай их по разным методам или даже классам:

String a = "MyLi"; String b = "ttle"; String c = "Pony"; ... String password = a + b + c;

Но здесь есть опасность столкнуться с оптимизацией компилятора, который соберет строку воедино для улучшения производительности. Поэтому директивы static и final к этим переменным лучше не применять.

Кодируем данные с помощью XOR

Для еще большего запутывания реверсера строки можно поксорить. Это излюбленный метод начинающих (и не только) вирусописателей. Суть метода: берем строку, генерируем еще одну строку (ключ), раскладываем их на байты и применяем операцию исключающего ИЛИ. В результате получаем закодированную с помощью XOR строку, которую можно раскодировать, вновь применив исключающее ИЛИ. В коде это все может выглядеть примерно так (создай класс StringXOR и помести в него эти методы):

// Кодируем строку public static String encode(String s, String key) { return Base64.encodeToString(xor(s.getBytes(), key.getBytes()), 0); } // Декодируем строку public static String decode(String s, String key) { return new String(xor(Base64.decode(s, 0), key.getBytes())); } // Сама операция XOR private static byte xor(byte a, byte key) { byte out = new byte; for (int i = 0; i < a.length; i++) { out[i] = (byte) (a[i] ^ key); } return out; }

Придумай вторую строку (ключ) и закодируй с ее помощью строки, которые ты хочешь скрыть (для примера пусть это будут строки password1 и password2 , ключ 1234):

String encoded1 = StringXOR.encode("password1", "1234"); String encoded2 = StringXOR.encode("password2", "1234"); Log.e("DEBUG", "encoded1: " + encoded1); Log.e("DEBUG", "encoded2: " + encoded2);

Открыв Android Monitor в Android Studio, ты найдешь строки вида:

Encoded1: RVRCRQ== encoded2: ACHBDS==

Это и есть закодированные с помощью XOR оригинальные строки. Добавь их в код вместо оригинальных, а при доступе к строкам используй функцию декодирования:

String password1 = StringXOR.decode(encodedPassword1, "1234");

Благодаря этому методу строки не будут открыто лежать в коде приложения, однако раскодировать их тоже будет совсем нетрудно, так что всецело полагаться на этот метод не стоит. Да и ключ тоже придется как-то прятать.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!


Администрация Сайта – Easy Work Polska Sp.z o.o. e-mail: [email protected]
Пользователь – физическое или юридическое лицо, разместившее свою персональную информацию посредством Формы обратной связи на сайте с последующей целью передачи данных Администрации Сайта.
Форма обратной связи – специальная форма, где Пользователь размещает свою персональную информацию с целью передачи данных Администрации Сайта.
  1. ОБЩИЕ ПОЛОЖЕНИЯ

2.1. Настоящая Политика конфиденциальности является официальным типовым документом Администрации Сайта и определяет порядок обработки и защиты информации о физических и юридических лицах, использующих Форму обратной связи на Сайте.
2.2. Целью настоящей Политики конфиденциальности является обеспечение надлежащей защиты информации о Пользователе, в т.ч. его персональных данных от несанкционированного доступа и разглашения.
2.3. Отношения, связанные со сбором, хранением, распространением и защитой информации о пользователях регулируются настоящей Политикой конфиденциальности и действующим законодательством.
2.4. Действующая редакция Политики конфиденциальности, является публичным документом, разработана Администрацией Сайта и доступна любому Пользователю сети Интернет при переходе по гипертекстовой ссылке «Политика конфиденциальности».
2.5. Администрация Сайта вправе вносить изменения в настоящую Политику конфиденциальности.
2.6. При внесении изменений в Политику конфиденциальности, Администрация Сайта уведомляет об этом Пользователя путём размещения новой редакции Политики конфиденциальности на Сайте
2.7. При размещении новой редакции Политики конфиденциальности на Сайте, предыдущая редакция хранятся в архиве документации Администрации Сайта.
2.8. Используя Форму обратной связи, Пользователь выражает свое согласие с условиями настоящей Политики конфиденциальности.
2.9. Администрация Сайта не проверяет достоверность получаемой (собираемой) информации о Пользователе.

  1. УСЛОВИЯ И ЦЕЛИ СБОРА И ОБРАБОТКИ ПЕРСОНАЛЬНЫХ ДАННЫХ ПОЛЬЗОВАТЕЛЕЙ

3.1. Персональные данные Пользователя такие как: имя, фамилия, отчество, e-mail, телефон, skype и др., передаются Пользователем Администрации Сайта с согласия Пользователя.
3.2. Передача персональных данных Пользователем Администрации Сайта, через Форму обратной связи означает согласие Пользователя на передачу его персональных данных.
3.3. Администрация Сайта осуществляет обработку информации о Пользователе, в т.ч. его персональных данных, таких как: имя, фамилия, отчество, e-mail, телефон, skype и др., а также дополнительной информации о Пользователе, предоставляемой им по своему желанию: организация, город, должность и др. в целях выполнения обязательств перед Пользователем Сайта.
3.4. Обработка персональных данных осуществляется на основе принципов:
а) законности целей и способов обработки персональных данных и добросовестности;
б) соответствия целей обработки персональных данных целям, заранее определенным и заявленным при сборе персональных данных;
в) соответствия объёма и характера обрабатываемых персональных данных способам обработки персональных данных и целям обработки персональных данных;
г) недопустимости объединения созданных для несовместимых между собой целей баз данных, содержащих персональные данные.
3.5. Администрация Сайта осуществляет обработку персональных данных Пользователя с его согласия в целях оказания услуг, предлагаемых на Сайте.

  1. ХРАНЕНИЕ И ИСПОЛЬЗОВАНИЕ ПЕРСОНАЛЬНЫХ ДАННЫХ

Персональные данные Пользователя хранятся исключительно на электронных носителях и используются строго по назначению, оговоренному в п.3 настоящей Политики конфиденциальности.

  1. ПЕРЕДАЧА ПЕРСОНАЛЬНЫХ ДАННЫХ

5.1. Персональные данные Пользователя не передаются каким-либо третьим лицам, за исключением случаев, прямо предусмотренных настоящей Политикой конфиденциальности.
5.2. Предоставление персональных данных Пользователя по запросу государственных органов, органов местного самоуправления осуществляется в порядке, предусмотренном законодательством.

  1. СРОКИ ХРАНЕНИЯ И УНИЧТОЖЕНИЕ ПЕРСОНАЛЬНЫХ ДАННЫХ

6.1. Персональные данные Пользователя хранятся на электронном носителе сайта бессрочно.
6.2. Персональные данные Пользователя уничтожаются при желании самого пользователя на основании его обращения, либо по инициативе Администратора сайта без объяснения причин путём удаления Администрацией Сайта информации, размещённой Пользователем.

  1. ПРАВА И ОБЯЗАННОСТИ ПОЛЬЗОВАТЕЛЕЙ

Пользователи вправе на основании запроса получать от Администрации Сайта информацию, касающуюся обработки его персональных данных.

  1. МЕРЫ ПО ЗАЩИТЕ ИНФОРМАЦИИ О ПОЛЬЗОВАТЕЛЯХ

Администратор Сайта принимает технические и организационно-правовые меры в целях обеспечения защиты персональных данных Пользователя от неправомерного или случайного доступа к ним, уничтожения, изменения, блокирования, копирования, распространения, а также от иных неправомерных действий.

  1. ОБРАЩЕНИЯ ПОЛЬЗОВАТЕЛЕЙ

9.1. Пользователь вправе направлять Администрации Сайта свои запросы, в т.ч. относительно использования/удаления его персональных данных, предусмотренные п.3 настоящей Политики конфиденциальности в письменной форме по адресу, указанному в п.1.
9.2. Запрос, направляемый Пользователем, должен содержать следующую информацию:
для физического лица:
– номер основного документа, удостоверяющего личность Пользователя или его представителя;
– сведения о дате выдачи указанного документа и выдавшем его органе;
– дату регистрации через Форму обратной связи;
– текст запроса в свободной форме;
– подпись Пользователя или его представителя.
для юридического лица:
– запрос в свободной форме на фирменном бланке;
– дата регистрации через Форму обратной связи;
– запрос должен быть подписан уполномоченным лицом с приложением документов, подтверждающих полномочия лица.
9.3. Администрация Сайта обязуется рассмотреть и направить ответ на поступивший запрос Пользователя в течение 30 дней с момента поступления обращения.
9.4. Вся корреспонденция, полученная Администрацией от Пользователя (обращения в письменной/электронной форме) относится к информации ограниченного доступа и без письменного согласия Пользователя разглашению не подлежит. Персональные данные и иная информация о Пользователе, направившем запрос, не могут быть без специального согласия Пользователя использованы иначе, как для ответа по теме полученного запроса или в случаях, прямо предусмотренных законодательством.