Крипт APK: безысходность

pic4a

HDD-drive
Пользователь
Регистрация
10.01.2015
Сообщения
28
Оценка реакций
0
Баллы
8
Стоило раз взяться посмотреть чужой APK, как довольно быстро мой контакт разошелся по сети. Вопросы были связаны с криптом APK-файлов: криптую ли я, сколько занимает времени, как дорого и т.д. В этом материале я попытаюсь ответить наиболее подробно о том, почему на сегодняшний день услуга крипта приложений для Android достаточно актуальная, но в то же время редкая. А также поговорим о ситуации на рынке мобильных платформ вцелом.

Отличия от крипта PE-файлов
К сожалению, главной проблемой всех клиентов является отношение к крипту как к тривиальной услуге. Практически все считают, что крипт – это такая процедура, которая одинакова для всего и везде одинаково реализуется. Но что же не так с этими APK? Почему нельзя по-быстрому накатать криптор на VB6, в форме указать путь к файлу, нажать на кнопку «OK» и бежать покупать прогруз? Тонкость заключается в том, что APK – это не исполняемый файл, а пакет. Или архив, кому как удобнее. Смысл в том, что APK – набор необходимых файлов, которые вместе работают как программа. И в отличие от PE-файлов, в пакете может детектироваться любой файл, а могут и все сразу, но как правило детект на уровне 70% держится. То есть, в отличие от PE-файла, где нужен крипт одного модуля, в случае APK, к примеру, из 100 файлов потребуется не меньше 20. И хорошо, если логика файлов с кодом понятна криптовальщику, и не придется чистить зависимости исходного кода.
Вторая особенность заключается в строгой структуре APK-файлов: в отличие от PE, который может выглядеть как программисту заблагорассудится, APK-файл внутри это всегда четкая структура файлов. В корне у нас манифест, в котором прописаны все основные компоненты приложения, зачем они нужны и какие права запрашивают. Код хоть и представлен одним файлом, на самом деле файл разбит на участки с описанием каждого класса и связей между ними. Все ресурсы лежат в соответствующих файлах и отсортированы. По сути это очень похоже на то, как если бы вирмейкеры продавали debug-версии своего софта. Смешно представить? Но на сегодняшний день для Android это реальная ситуация.

Технические трудности
Будем разбирать все проблемы на конкретном примере. На этом примере и будет показана вся сложность процесса. С чего обычно начинается исследование? Прежде всего необходимо проверить детект ресурсов (манифест, разметка, изображения и другие файлы, в общем, не код). Для этого необходимо распаковать APK, используя apktool и удалить все smali-файлы, затем собрать заного. Результаты радуют, однако нужно узнать, какие именно участки кода детектируются. Для этого обычно удаляются определенные классы и просматривают результат. Всего в образце 88 классов. Вот скан без первых 55 файлов. Конечно, по сравнению с паблик малварью это результат, но это не фуд, о котором шла речь. Здесь было бы уместно удалять файлы и генерировать билды скриптом с автозаливом на чекеры с сбором отчетов. Желательно с помещением результатов в БД для сортировки по результатам. Но кто из клиентов будет вкладываться в разработку? Скорее всего никто, им нужна прибыль 300% прямо сейчас.
Путем некоторых манипуляций удалось добиться результата 5/52. Однако, среди детектируемых АВ есть Касперский и Нод. Само собой, найти детектируемые файлы возможно, но следует учитывать две вещи: это занимает много времени (которые, конечно, никто оплачивать не хочет) и никогда не будет найден только один файл (он всегда потянет за собой зависимости). Конкретно по последнему скану, для 5/52 необходимо почистить 4 файла.
Как чистят smali-код? Принципы теже самые, что используются в любой чистке: замусоривание кода, обфускация, переписывание участков в конце концов (о конкретных примерах поговорим в следующий раз как-нибудь). На данный момент чистить уже найденный код процедура весьма линейная, потому что антивирусы не эмулируют smali-код, они могут только детектировать по сигнатуре, либо максимум как-нибудь анализируя его статично (декомпиляцией и изучением, к каким классам обращается например). Но статического анализа недостаточно, это всем наверное уже давно понятно. Да и не все делают анализ, если делают вообще. Поэтому по большому счету затраты исключительно временные. Но! После нахождения нужных файлов, необходимо найти детектируемый участок. А ведь он может быть не один. Я уже говорил о связях между файлами, точно такая же связь может быть и между участками кода.

Бюджет
Очередной камень в огород не только черного рынка, но и аутсорса в целом. Заказчики не хотят платить за качество. Точнее, они хотят платить свои цену, которая формируется от чего угодно, но только не от сложности разработки, опыта специалиста и затраченного времени. Если говорить о крипте в частности, посмотрите сколько сейчас услуг для PE-файлов и в каком они ценовом диапазоне. А теперь подумайте, насколько такой крипт качественный. Товарищи заказчики, вы думаете человек будет заморачиваться с конкретно вашим файлом за 30$? Дай Бог, чтобы он хоть как-то изменил стаб для других клиентов, а не криптует всем с одинаковым. Отсюда постоянное недовольство чистотой файла. Но при этом никто не хочет взять специалиста конкретно под себя, выплачивая ему, скажем, свой недельный заработок.
Рассмотрим конкретный пример. Человек обозначил сумму в 1к$. Вероятнее всего с ним можно торговаться на большее, но не думаю, что речь пойдет о суммах больше чем, скажем, 3к$. Обозначенная сумма в топике говорит о том, что человек совершенно не ориентируется на рынке. Вот, например, заказ на куда более простое приложение. Причем только APK, разработка серверной части не нужна.
Теже самые проблемы и с криптом: никто не хочет вкладываться в результат, менталитет у людей такой, что все хотят лучше и дешевле. Но так бывает только в очень редких случаях, о которых как-нибудь в другой раз.

Решение
На сегодняшний день нет однозначного решения проблемы с криптом APK-файлов. Разработка софта для распаковки архивов, декомпиляции smali-кода мною была начата, но так и не доведена до конца, т.к. разработка требует много времени и, соответственно, денег. Результат разработки вполне вероятно и не принесет желаемого эффекта, либо не для всех приложений (давайте вспомним как ломаются exe, написанные в Delphi) . А ведь есть и нативные библиотеки, которые практически никто не использует в своих приложениях (буду рад хоть каких-то упоминаний или ссылок, спасибо). И срок окупаемости определить тяжело, даже с учетом отсутствия конкурентов в принципе.
 

Ar3s

Старожил форума
Легенда
Регистрация
30.12.2004
Сообщения
2 952
Оценка реакций
187
Баллы
55
Читай выше!
 

TrueMind

RAM
Пользователь
Регистрация
06.10.2013
Сообщения
124
Оценка реакций
0
Баллы
18
Создать 100% декомпиль смали кода нереально (ну или оверсложно, и там уже речь не о крипторах, а о полетах более высокого уровня).
Т.е. на базе рекомпиляции с морфингом универсальный криптор APK файлов не сделать (в ближайшем будущем). А стало быть нужна какая-то новая технология, подобная PE загрузчику для EXE файлов (раз уж понеслись тут аналогии с криптом ЕХЕ). В таком случае весь APK целиком помещался бы в специальный контейнер, шифровался бы, и внедрялся внутрь совершенно чистого на первый взгляд нового APK, при запуске которого происходили бы обратные операции и вредоносный APK работал бы из памяти.
Но не всё так безнадежно как вы пишите:)
В более частных случаях, когда у человека свой софт (APK) и ему необходим постоянный FUD, то пишется (на заказ в одни руки, либо с поддержкой на постоянной основе) парсер с разбором исходного JAVA кода и морфер, который обрабатывает весь проект, избавляя таким образом от сигнатур (вкупе с шифрованием строк и сокрытием модулей).
Ну а что касается массовости услуги, скажем так.. работы в этом направлении уже активно ведутся и есть кое-какие результаты, хотя до повсеместной поддержки любых APK файлов под любые версии Андроида (2-5) и (x86\ARM) пока еще далеко.
 

pic4a

HDD-drive
Пользователь
Регистрация
10.01.2015
Сообщения
28
Оценка реакций
0
Баллы
8
На самом деле морфить smali-код вполне возможно. Но написание подобного ПО это не менее дорогое удовольствие (если не более), чем написание малвари под заказ. Но врядли кто-то станет писать (а если и станет, то выкладывать) потехи ради.
Плюс без внимания остаются нативные библиотеки и исполняемые файлы внутри apk. С ними тоже нужно что-то делать. Через год-два кулхацкеры изучат и jni.
Конечно ставить крест на услуге рано, но вкладываться в ее развитие никто не хочет. А ведь по сути упускают монополию :D
 
Верх