Меряем уязвимости. Классификаторы и метрики компьютерных брешей
Последнее время все чаще и чаще слышишь фразы: «Там уязвимость, тут уязвимость, в этом софте нашли брешь, в том сервисе дырка». И на каждую такую уязвимость выходит бюллетень, описывающий саму проблему, рекомендации разработчиков и другие меры, которые можно принять для собственной защиты. Вся эта информация публикуется на баг-треках, специальных сайтах, собирающих информацию об уязвимостях. Любой может ознакомиться с этой информацией, а более предприимчивые на черном рынке всегда могут купить эксплоит под данную уязвимость или готовый инструмент для атаки. Когда ты читал подобные обзоры, наверняка замечал, что каждый баг определенным образом классифицируется. Что собой представляет «измерение уязвимости», по каким критериям оно производится и зачем это вообще нужно знать? Ответы ты найдешь в этой статье.
Meterpreter в деле. Хитрые приемы через MSF
Те, кто хоть как-то погружался в тему работы с Metasploit Framework, знают, как много возможностей на уязвимой машине дает правильно проброшенная «полезная нагрузка». Речь идет о Meterpreter, универсальном advanced payload’е, — как о том, что туда вложено, так и о том, что мы можем допилить ручками. Ты узнаешь, как правильно и эффективно юзать payload с пользой для себя, какие фичи есть у Meterpreter, ну и конечно же, сможешь обкатать все это на практике. В связке с предыдущей статьей про Metasploit Framework получается настоящий must read для начинающего или уже чуть более продвинутого пентестера.
Защита может быть идеальной?
В России действуют как минимум три независимые друг от друга компании, занимающиеся установкой авторских охранных комплексов. Эти компании располагают собственным производством, выпуская электронные и механические компоненты. Достаточно сказать, что даже актуаторы замков ими используются свои, защищённые от взлома.
Авторский актуатор капота
Прежде всего, вышесказанное относится к замку капота. Завести машину, защищённую по авторской методике, сможет только разработчик защиты или владелец авто. Либо, это может быть опытный автоэлектрик, которому вдобавок удастся распилить капот.
Противодействие взлому иммобилайзера
Попробуйте представить, что можно предпринять, находясь на месте злоумышленника. Сначала есть смысл попытаться взломать код сигналки, сняв автомобиль с охраны дистанционно. Но с использованием диалоговых кодов это невозможно. Дальше, как правило, поступают так:
- Включают глушитель GSM-сигнала.
- Если даже работает сирена, всё равно пытаются открыть капот. Доступ в салон обеспечивается просто – достаточно разбить стекло двери.
- Под капотом находятся два важных модуля: основной блок сигналки и модуль управления двигателем. Первый из них отключают, второй – заменяют, и тогда воздействие иммобилайзера перестаёт играть роль.
В завершение можно провернуть замок зажигания и уехать, не сильно беспокоясь о наличии следов взлома.
Свёртки замка, плоский ключ
Теперь рассмотрим, что будет происходить, если используется авторская защита от угона.
На шаге «1» всё происходит, как планировалось. Только вот, работающая «GSM-глушилка», не позволит осуществить запуск двигателя сразу. Перед тем как повернуть ключ, нужно будет нажать секретную кнопку (злоумышленник об этом не знает). Перейдя к шагу «2», слесарные работы придётся выполнять долго. Ещё, с большой вероятностью сработает секретный переключатель, что приведёт к блокировке ведущих колёс. Транспортировать машину после этого можно будет разве что на эвакуаторе.
Это – угон BMW с автостоянки
Впрочем, некоторые авто именно так и угоняют.
В том числе, речь идёт о личинках замков, которые не взламываются стандартными отмычками. С одной стороны, всё выглядит отлично и внушает определённое доверие. В то же время становится понятно, что установка авторского охранного комплекса предусматривает серьёзное вмешательство в конструкцию авто. Поэтому отдать свою новую машину для проведения полной модернизации владелец может только опытным специалистам, не имеющим негативных отзывов о работе.
А если действительно угоняют эвакуатором?
На первый взгляд кажется, что в реальности невозможно обезопасить авто от погрузки на платформу с последующей его транспортировкой. Рассмотрим, что именно может происходить в подобных случаях:
- Злоумышленник ставит помехи для GSM-связи и для GPS-навигатора. Автомобиль не сможет ни определить свои координаты, ни отправить тревожное сообщение по GSM.
- Дальше, производится погрузка, на что обычная сигналка не реагирует никак. В охранном комплексе, в свою очередь, срабатывают датчики наклона и ускорения.
- Нужные датчики сработали, и основной блок пытается отправить сообщение по каналу GSM. Но последний, как легко понять, будет неработоспособен (базовая станция окажется недоступной). Тогда, сразу включится сирена, заблокируются все замки и т.д.
Транспортировать автомобиль, на котором ревёт сирена, особого желания ни у кого нет.
Датчик наклона, фирма Starline
В рассмотренной ситуации вашу машину могут просто оставить в покое. Что выглядит наиболее логично.
Охранные комплексы, способные работать по указанному алгоритму, выпускает практически каждая крупная компания, занимающаяся производством сигналок. Приобрести подобную систему можно у любого авторизованного продавца, что тоже выглядит логично, так как защитить автомобиль от угона стремятся все. Другое дело, что замок капота, установленный по авторской методике, не получится отпереть в течение нескольких часов. А вот о серийных решениях подобного сказать нельзя: капот откроют, модуль сирены рассверлят. Вот и вся разница.
Ошибка: сирена близко к капоту
Подводя итог, нужно отметить одно важное обстоятельство. Любые охранные системы устанавливают затем, чтобы машину не угнали, а наказывать злоумышленников за их действия водитель не вправе
Ни у одного автовладельца нет полномочий на то, чтобы определять меру воздействия на угонщика в любой ситуации. Профессиональные разработчики систем охраны об этом аспекте тоже знают. И не нарушают указанный принцип в любых случаях.
Порочное наследие Windows. Концептуальные методы взлома Linux через флешку и защита от них
Какой юзер Windows не помнит траблы с флешками и надоедливым вирусом из Autorun? Пользователи Linux всегда смотрели на эту проблему свысока, мол, их это не касается. Отчасти это так, но не все столь гладко, как хотелось бы. У пингвина были свои проблемы — это .autorun, аналогичный по функциональности, брешь Adobe Acrobat Reader со шрифтами, в результате которой в Nautilus’е можно запустить что угодно, косячные драйверы, некорректно обрабатывающие съемные носители, и фичи, позволяющие обойти такие механизмы безопасности, как AppArmor, ASLR, PIE и NX-биты. Уже интересно? Тогда читай материал, и ты узнаешь, как это было.
Момент истины
Итак, приступаем к самому интересному, а именно к тестированию. Первым делом нужно проверить производительность диска без шифрования. Нашей «жертвой» будет раздел жесткого диска (обычного, не SSD) размером 28 Гбайт, отформатированный как NTFS.
Открываем CrystalDiskMark, выбираем количество проходов, размер временного файла (во всех тестах будем использовать 1 Гбпйт) и сам диск. Стоит отметить, что количество проходов практически не влияет на результаты. На первом скриншоте показаны результаты измерения производительности диска без шифрования с числом проходов 5, на втором — с числом проходов 3. Как видишь, результаты практически идентичны, поэтому остановимся на трех проходах.
Диск без шифрования, количество проходов 5
Другие статьи в выпуске:
Xakep #206. Ключ от всех дверей
- Содержание выпуска
- Подписка на «Хакер»-60%
Диск без шифрования, количество проходов 3
Результаты CrystalDiskMark нужно трактовать так:
- Seq Q32T1 — тест последовательной записи / последовательного чтения, количество очередей — 32, потоков — 1;
- 4K Q32T1 — тест случайной записи / случайного чтения (размер блока 4 Кбайт, количество очередей — 32, потоков — 1);
- Seq — тест последовательной записи / последовательного чтения;
- 4K — тест случайной записи / случайного чтения (размер блока 4 Кбайт);
Далее я буду ссылаться на эти тесты по их порядку в CrystalDiskMark, то есть Seq Q32T1 — это первый тест, 4K Q32T1 — второй и так далее.
Начнем с BitLocker. На шифрование раздела размером 28 Гбайт было потрачено 19 минут.
Процесс шифрования диска при помощи BitLocker
При последовательном чтении/записи с большим количеством очередей результаты (первый тест) мало чем отличаются от работы с незашифрованным диском. Зато при обычном последовательном чтении скорость чтения ниже на 13 Мбайт/с, что уже ощутимо. Остальные результаты примерно такие же, как при работе с незашифрованным диском. Отсюда вывод, что реальная производительность зависит от алгоритма работы программы, которая производит чтение и запись. В некоторых программах разница будет совсем незаметна. В других будет чувствоваться эффект торможения при работе с зашифрованным диском.
Результаты BitLocker
Теперь посмотрим на работу TrueCrypt. Шифрование раздела заняло всего 9 минут, параметры были установлены по умолчанию. При шифровании скорость работы с диском составила 55,4 Мбайт/с.
Настройки TrueCryptСкорость работы с диском, зашифрованным TrueCrypt
Результаты мало чем отличаются от показателей незашифрованного диска, только скорость последовательной записи немного подкачала. На скриншоте видно, что работа происходит с диском L — именно к этой букве был подмонтирован зашифрованный диск E:. В TrueCrypt работа с зашифрованным диском осуществляется несколько иначе, чем в BitLocker.
Результаты TrueCrypt
А вот результаты VeraCrypt приятно удивили. Признаться честно, проводя тест, я ожидал, что победителем будет TrueCrypt и, возможно, результаты CipherShed окажутся на том же уровне. В VeraCrypt я не верил — из-за того, что у этой программы собственный формат и продвинутый алгоритм шифрования. Подозревать, что мои прогнозы окажутся неправильными, я начал еще при шифровании диска — скорость оказалась существенно выше, чем у TrueCrypt: 65 Мбайт/с против 55 Мбайт/с.
Шифрование диска программой VeraCryptРезультаты VeraCryptЗадержка перед монтированием диска — неприятная особенность VeraCrypt
А вот CipherShed оказался медленнее VeraCrypt. Честно говоря, я был этим несколько удивлен: формат у CipherShed тот же, что и у TrueCrypt, настройки были такие же, значит, и производительность должна быть похожа. Но разница видна даже на этапе шифрования раздела — скорость составляла 43–51 Мбайт/с.
Результаты CipherShedПараметры шифрования раздела CipherShedШифрование раздела в CipherShed
Осталось протестировать производительность Symantec Endpoint Security, которая является более навороченной версией PGPDisk. В третьем тесте производительность оказалась самой низкой из всех протестированных программ.
Результат Symantec Endpoint Security
Кража данных с мобильных девайсов
Интересно проследить за тем, как развивались угрозы для смартфонов и планшетов. Поначалу мы встречали довольно примитивные зловреды для гаджетов, действовавшие аналогично своим десктопным собратьям: они воровали пароли, показывали навязчивую рекламу, блокировали устройства и вымогали деньги.
Однако вскоре смартфоны породили новые векторы атак: вирусные подписки на платные услуги, дозвон и рассылку SMS на короткие номера и, наконец, подглядывание через камеры с последующим шантажом. Впрочем, это все тоже были цветочки.
Сейчас мобильные устройства стали для хакеров приоритетной целью, поскольку их память содержит уйму конфиденциальных данных о самой жертве и ее окружении. Появляются трояны столь высокого уровня, что их разработка явно велась по заказу спецслужб.
Например, ряд очень характерных функций есть у зловреда Skygofree, заражающего мобильники с ОС Android. В частности, он отправляет копии переписки в соцсетях, контролирует перемещения смартфонов и автоматически включает прослушку, когда их географические координаты соответствуют заданным. Например, когда один смартфон оказался в комнате переговоров или рядом со смартфоном другого собеседника, за которым ведется слежка.
Также Skygofree принудительно включает Wi-Fi и самостоятельно выполняет подключение к хотспотам типа «злой двойник», которые контролирует атакующая сторона. Общее число шпионских функций у Skygofree составляет почти полсотни. Предположительно за его созданием стоит итальянская фирма Negg International, разрабатывающая софт для NSA и GCHQ. Понятно, что им сложно противостоять, но «сложно» еще не означает «бесполезно».
Лабораторный практикум по Metasploit Framework. Скрытые фишки MSF
Кто не знает MSF? Этот «швейцарский нож» входит в пятерку самых юзаемых тулз пентестера, да и просто любого мало-мальски продвинутого спеца по безопасности. Инструмент постоянно развивается и обновляется, появляется много новых фич и малоизвестных опций, которые легко упустить, а ведь они реально расширяют возможности или делают работу гораздо удобнее и комфортнее. Немаловажную часть занимает и автоматизация часто повторяющихся операций. В представленном материале речь пойдет о некоторых фишках MSF, более-менее продвинутых встроенных возможностях инструмента, а также о возможностях автоматизации рутинных операций, которая сэкономит тебе кучу времени. Ты просто обязан это знать!
Шифрование системного раздела компьютера, оборудованного ТРМ
Доступ к ТРМ без ПИН-кода
Учтите, что для проведения шифрования у вас должны быть права администратора на данном ПК. Кроме того, необходимо заранее сконфигурировать принтер для печати пароля восстановления.
Для шифрования системного раздела необходимо сделать следующее:
- Пуск – Панель управления – Система и Безопасность – Шифрование диска BitLocker
- Включить BitLocker на системном разделе (рис.2).
Рисунок 2 Шифрование диска BitLocker
- После этого начнется проверка, удовлетворяет ли ваш компьютер системным требованиям.
- Если Да, то на следующем шаге начнется подготовка диска, включение ТРМ и шифрование диска.
- Если ТРМ не будет проинициализирован, мастер установки BitLocker потребует вытащить CD, DVD или USB-диск и перезагрузить компьютер для включения ТРМ.
- После подтверждения о наличии ТРМ запустится ОС и произойдет инициализация ТРМ модуля
- После окончания процесса инициализации TPM вы должны выбрать метод хранения пароля восстановления. Существуют следующие способы:
Сохранить пароль восстановления на USB-флеш диске
Сохранить пароль восстановления в текстовом файле
Распечатать пароль восстановления
Рекомендуется выбрать несколько вариантов хранения пароля восстановления. Пароль восстановления состоит из 48 символов.
По окончании процедуры шифрования ваш жесткий диск будет зашифрован. При этом ключ шифрования будет храниться в ТРМ.
Недостатком данного метода является то, что если вы выбрали просто пароль для входа в систему, либо вообще ваша учетная запись не имеет пароля, то при хищении вашего ноутбука данные тоже могут быть похищены.
Доступ к ТРМ с ПИН-кодом
Для обеспечения повышенного уровня безопасности необходимо применение многофакторной аутентификации. Для этого необходимо внести изменения на уровне локальных групповых политик, запустив gpedit.msc
В окне Редактора локальной групповой политики выбрать —
Административные шаблоны – Компоненты Windows – Шифрование BitLocker – Диски операционной системы.
Далее выбрать параметр Обязательная дополнительная проверка подлинности при запуске.
Этот параметр политики позволяет указать, требует ли BitLocker дополнительную проверку подлинности при каждом запуске компьютера, а также указать, используется ли BitLocker в сочетании с доверенным платформенным модулем (TPM) либо же без него.
При запуске компьютере, на котором имеется совместимый доверенный платформенный модуль (TPM), могут использоваться четыре метода проверки подлинности, призванные обеспечить дополнительную защиту зашифрованных данных. Для проверки подлинности при запуске компьютера можно использовать только доверенный платформенный модуль (TPM), либо же дополнительно потребовать установить USB-устройство флэш-памяти с ключом запуска, ввести ПИН-код, содержащий от 4 до 20 цифр, либо же сделать и то, и то.
В дальнейшем при запуске шифрования пользователя попросят ввести ПИНкод. Ввод ПИН-кода будет необходим при каждой перезагрузке системы.
Сам процесс шифрования за исключением процедуры ввода ПИН-кода ничем не отличается от приведенной выше.
Для некоторых ПК возможно применение расширенного ПИН-кода (в случае если BIOS позволяет эту процедуру). В таком случае ПИН-код будет включать не только цифры, а и буквы, что, безусловно, делает его еще более устойчивым к подбору.
Офлайновые атаки
Технология BitLocker стала ответом Microsoft на возрастающее число офлайновых атак, которые в отношении компьютеров с Windows выполнялись особенно просто. Любой человек с загрузочной флешкой может почувствовать себя хакером. Он просто выключит ближайший компьютер, а потом загрузит его снова — уже со своей ОС и портативным набором утилит для поиска паролей, конфиденциальных данных и препарирования системы.
В конце рабочего дня с крестовой отверткой и вовсе можно устроить маленький крестовый поход — открыть компы ушедших сотрудников и вытащить из них накопители. Тем же вечером в спокойной домашней обстановке содержимое извлеченных дисков можно анализировать (и даже модифицировать) тысячью и одним способом. На следующий день достаточно прийти пораньше и вернуть все на свои места.
Впрочем, необязательно вскрывать чужие компьютеры прямо на рабочем месте. Много конфиденциальных данных утекает после утилизации старых компов и замены накопителей. На практике безопасное стирание и низкоуровневое форматирование списанных дисков делают единицы. Что же может помешать юным хакерам и сборщикам цифровой падали?
Как пел Булат Окуджава: «Весь мир устроен из ограничений, чтобы от счастья не сойти с ума». Основные ограничения в Windows задаются на уровне прав доступа к объектам NTFS, которые никак не защищают от офлайновых атак. Windows просто сверяет разрешения на чтение и запись, прежде чем обрабатывает любые команды, которые обращаются к файлам или каталогам. Этот метод достаточно эффективен до тех пор, пока все пользователи работают в настроенной админом системе с ограниченными учетными записями. Однако стоит повысить права или загрузиться в другой операционке, как от такой защиты не останется и следа. Пользователь сам себя сделает админом и переназначит права доступа либо просто проигнорирует их, поставив другой драйвер файловой системы.
Есть много взаимодополняющих методов противодействия офлайновым атакам, включая физическую защиту и видеонаблюдение, но наиболее эффективные из них требуют использования стойкой криптографии. Цифровые подписи загрузчиков препятствуют запуску постороннего кода, а единственный способ по-настоящему защитить сами данные на жестком диске — это шифровать их. Почему же полнодисковое шифрование так долго отсутствовало в Windows?
Шаг второй. Знакомство с дизассемблером
О’кей, пароль мы узнали. Но как же утомительно вводить его каждый раз с клавиатуры перед запуском программы! Хорошо бы ее хакнуть так, чтобы никакой пароль вообще не запрашивался или любой введенный пароль программа воспринимала бы как правильный.
Хакнуть, говорите? Что ж, это несложно! Куда проблематичнее определиться, чем именно ее хакать. Инструментарий хакеров чрезвычайно разнообразен, чего тут только нет: и дизассемблеры, и отладчики, и API-, и message-шпионы, и мониторы обращений к файлам (портам, реестру), и распаковщики исполняемых файлов, и… Сложновато начинающему кодокопателю со всем этим хозяйством разобраться!
Впрочем, шпионы, мониторы, распаковщики — второстепенные утилиты заднего плана, а основное оружие взломщика — отладчик и дизассемблер.
Итак, дизассемблер применим для исследования откомпилированных программ и частично пригоден для анализа псевдокомпилированного кода. Раз так, он должен подойти для вскрытия парольной защиты passCompare1.exe. Весь вопрос в том, какой дизассемблер выбрать.
Не все дизассемблеры одинаковы. Есть среди них и «интеллектуалы», автоматически распознающие многие конструкции, как то: прологи и эпилоги функций, локальные переменные, перекрестные ссылки, а есть и «простаки», чьи способности ограничены одним лишь переводом машинных команд в ассемблерные инструкции.
Логичнее всего воспользоваться услугами дизассемблера-интеллектуала (если он есть), но… давайте не будем спешить, а попробуем выполнить весь анализ вручную. Техника, понятное дело, штука хорошая, да вот не всегда она оказывается под рукой, и неплохо бы заранее научиться работе в полевых условиях. К тому же общение с плохим дизассемблером как нельзя лучше подчеркивает «вкусности» хорошего.
Воспользуемся уже знакомой нам утилитой DUMPBIN, настоящим «швейцарским ножиком» со множеством полезных функций, среди которых притаился и дизассемблер. Дизассемблируем секцию кода (как мы помним, носящую имя .text), перенаправив вывод в файл, так как на экран он, очевидно, не поместится:
Заглянем еще раз в секцию данных (или в другую — в зависимости от того, где хранится пароль): см. листинг 2.
Запомним найденный пароль: . В отличие от Visual C++ 6.0, которой пользовался Крис, Visual C++ 2017 не обращается к инициализированным переменным по шестнадцатеричному смещению, а подставляет значение прямо в секцию кода. Таким образом, попробуем найти выявленный ранее пароль в дизассемблированном листинге тривиальным контекстным поиском с помощью любого текстового редактора.
Смотрите, центральная часть этого листинга отвечает за сравнение значений регистров EAX и ECX. В последний, как мы видим, в первой строке листинга записывается эталонный пароль, следовательно, в первом — введенный пользователем. Затем происходит сравнение и выполняются переходы почти в одну и ту же точку: 0x4010A2 и 0x40109E. Заглянем, что там:
Здесь центральную роль играет инструкция , расположенная по смещению 0x4010A7. В случае если eax равен 0, следующая за ней команда JE совершает прыжок на 0x40110E. В противном же случае на вершину стека выталкивается строка Wrong password:
а следом — вызов функции с говорящим названием:
Значит, ненулевое значение EAX свидетельствует о ложном пароле, а ноль — об истинном.
О’кей, тогда переходим к анализу валидной ветви программы, что делается после прыжка на 0x40110E. А тут притаилась инструкция, которая помещает строку Password OK на вершину стека, после чего вызывается процедура _printf, которая, очевидно, выводит строку на экран:
Оперативные соображения следующие: если заменить команду JE на JNE, то программа отвергнет истинный пароль как неправильный, а любой неправильный пароль воспримет как истинный. А если заменить TEST EAX,EAX на XOR EAX,EAX, то после исполнения этой команды регистр EAX будет всегда равен нулю, какой бы пароль ни вводился.
Дело за малым — найти эти самые байтики в исполняемом файле и слегка подправить их.
Систематизируем результаты
Вот итоговая таблица с результатами.
Приложение | Seq Q32T1 | 4K Q32T1 | Seq | 4K | ||||
---|---|---|---|---|---|---|---|---|
Чтение | Запись | Чтение | Запись | Чтение | Запись | Чтение | Запись | |
Без шифрования | 79.88 | 80.66 | 0.679 | 1.195 | 79.89 | 78.43 | 0.548 | 1.101 |
BitLocker | 79.65 | 79.80 | 0.688 | 1.226 | 66.85 | 77.15 | 0.534 | 1.115 |
TrueCrypt | 79.81 | 80.65 | 0.551 | 1.151 | 79.65 | 71.51 | 0.539 | 1.133 |
VeraCrypt | 79.99 | 76.56 | 0.562 | 1.262 | 79.89 | 68.15 | 0.542 | 1.154 |
CipherShed | 73.52 | 77.05 | 0.551 | 1.096 | 74.04 | 65.84 | 0.536 | 1.139 |
Symantec EE | 79.86 | 80.13 | 0.666 | 1.134 | 58.93 | 51.80 | 0.507 | 1.115 |
При использовании BitLocker снижение производительности наблюдается только в третьем тесте. В случае с TrueCrypt ощутимое снижение производительности наблюдается тоже в третьем тесте и то только при записи. Во всех остальных случаях снижение производительности вряд ли окажется сколько-нибудь ощутимым.
Производительность VeraCrypt, как и ожидалось, ниже, чем производительность TrueCrypt. Снижение скорости наблюдается в первом и третьем тестах. А вот CiphedShed оказался даже медленнее, чем VeraCrypt, — тоже в первом и третьем тестах. Symantec EE не выглядел бы аутсайдером, если бы не проваленный третий тест. Последовательный ввод-вывод с блоками небольшого размера — явно не его конек.
Однако всё это известные приложения, и все они на деле дают приемлемую производительность. Напоследок я решил протестировать еще одну программу — CyberSafe Top Secret. В ней используется библиотека шифрования диска от NT Kernel и все тот же алгоритм AES. С этим приложением я уже давно знаком, но, если честно, ожидал более высоких результатов. На деле это оказался настоящий аутсайдер — на фоне его результатов даже SEE кажется спринтером. Epic fail.
Результаты CyberSafe Top Secret
Сверяем цифровую подпись
Собственно, метод довольно простой. Тебе необходимо вставить в приложение код, который будет получать хеш ключа текущей цифровой подписи пакета и сравнивать его с ранее сохраненным. Совпадают — приложение не было перепаковано (и взломано), нет — бьем тревогу.
Для начала вставь следующий кусок кода в приложение (чем глубже ты его запрячешь, тем лучше):
Собери, запусти приложение и посмотри лог исполнения. Там ты увидишь строку SIGNATURE: 478uEnKQV+fMQT8Dy4AKvHkYibo=. Это и есть хеш. Его необходимо не просто запомнить, а поместить в код приложения в виде константы, например под именем SIGNATURE. Теперь убери строку Log.e… из кода и добавь следующий метод:
Он как раз и будет сверять сохраненный хеш с хешем ключа, которым в данный момент подписано приложение. Функция возвращает true, если цифровая подпись твоя (приложение не было пересобрано), и false — если оно подверглось модификации. Что делать во втором случае — решать тебе. Ты можешь просто завершить приложение с помощью os.exit(0) либо «уронить» его, например вызвав метод неинициализированного объекта или обратившись к несуществующему значению массива.
Но запомни: взломщик может просто вырезать твой код сверки цифровой подписи и он никогда не сработает (это справедливо и в отношении кода, приведенного далее). Поэтому спрячь его в неочевидном месте, а хеш оригинального ключа зашифруй, как было показано выше.
Искомый хеш ключа