Dexopt android что это

Обновлено: 19.09.2024

И писать об ошибке? Несмотря на то, что это предложение является шуткой, но и потому, что мы люди, а не Бог, но он не может делать все, что угодно считается совершенным, ошибка кажется неизбежным. Так что мы появились андроид Bug, как это сделать?

Как правило, мы сталкиваемся с Bug рано экстренным выпустила версию. Тем не менее, это ошибка, вероятно, просто строка кода для этой строки кода, или полное количество итерационных дополнительных обновлений версии, немного излишним. И новая версия популярного займет время, и если есть новые версии этой небольшой проблемы, как сделать?

Поэтому для того, чтобы решить эту проблему, было исправление.

Цель этого урока не сам, что исправление, в основном за счет горячего исправления, знакомый с его ядром в этом случае: класс механизм загрузки. (Последующие меры будут объяснены более подробно столбцов исправлений)

АРТ и Dalvik

Что такое Dalvik:

Dalvik Java Virtual Machine предназначен для собственной платформы Android от Google. Формат (Dalvik Исполняемый) Запустить поддержку была преобразована в .dex в Java-приложениях, .dex формат представляет собой формат сжатие, специально предназначенный для применения Dalvik, подходит для ограниченной памяти и систем скорости процессора.

Что такое ART:

Android среды выполнения вариантов разработчик представил в Android 4.4 и Android 5.0 является режимом по умолчанию позже (Android Runtime). При установке приложения, когда Ahead-Of-Time (AOT) предварительной компиляции байт-кода в машинный язык, этот механизм называется Ahead-Of-Time (AOT) прекомпиляции. Установка приложений будет замедляться, но реализация будет более эффективной, более быстрым запуском.


Когда оба ART и Dalvik байткод работать совместимы запускать Dex, и, следовательно, может работать в среде ART Dalvik для разработки приложений.

DVMТакже реализованыJVMСпецификация виртуальной машины, используя по умолчанию CMS сборщика мусора, но с разной JVM Байткода запустить выполнение класса, DVMDex(Dalvik Executable Format) - сжатый формат, разработанный специально для Dalvik. Dex является продуктом большого количества файлов .class процесса сжатия файла, в конечном счете Android среды выполнения выполнения.

В Dalvik, приложения должны объяснить операция, выполняемыми, обычный горячий код в машинный код преобразуется время байт-кода компилятор (JIT Just In Time), низкая эффективность операционной. В среде АРТА, применение в процессе установки, предварительно скомпилированный байткод (АОТ) в машинный код, установить медленное, но это улучшит эффективность работы.

ART пространства больше, чем Dalvik (байты-код измененного машинного кода), «место для времени.»

Скомпилированная срок службы батареи может быть значительно улучшена, так как без перекомпиляции приложения для каждого прогона, тем самым уменьшая частоту процессора, используемого, потребление энергии снижается.

dexopt и dexaot

dexopt

существоватьDalvikВ виртуальной машине, чтобы загрузить файл Dex,Файлы Dex для проверки и оптимизации операцийСтавшее вскрышных файл (оптимизированная декс) для достижения оптимальных результатов DEX файлы, документы и Декс файлы, как это, просто использовать некоторые оптимизации опкод.

dex2oat

АРТ прекомпилирована механизм,После выполнения dexopt оптимизированного файла Dex во время установки, а затем вскрышной быть АОТ скомпилированы перед операцией, составленной в ОЯТ (на самом деле файл ELF) исполняемые файлы (машинный код)Отказ (По сравнению оптимизация сделано вскрышных, оптимизация DEX не конвертировать ОАТ занять больше времени)


Введение ClassLoader

Любая программа Java состоит из одного или нескольких файлов классов, программа работает, вам необходимо загрузить файл класса в JVM может использовать, он отвечает за загрузку Java-класс загрузки механизма этих файлов класса. Роль ClassLoader является просто файлы классов нагрузки, доступных для использования программы. В пределах каждого класса объекта имеет поле ClassLoader, чтобы идентифицировать себя тем, что загружен ClassLoader.

ClassLoader является абстрактным классом, а его класс реализации являются:

Android Framework для файла класса загрузки слоя.

Для загрузчика Android класса приложений. Вы можете загрузить указанный Dex, и банки, застежка-молния, APK в classes.dex

Dex предназначен для погрузки, и банки, застежка-молния, APK в classes.dex

Многие блоге, что PathClassLoader может загружать только декс APK установлен, на самом деле, это должно говорить о виртуальной машине Dalvik на. Но, как правило, не заботятся о Dalvik. Быть

Отношения между ними заключается в следующем:


PathClassLoader а также DexClassLoader Общий родительский класс BaseDexClassLoader 。

Видно, что единственная разница между ними: DexClassLoader Нужно пройти один optimizedDirectory Параметры и создайте его как File Объект пропущен super ,а также PathClassLoader Тогда дайте NULL напрямую. Следовательно, оба могут загружатьсяУказанные dex и classes.dex в банке, zip, apk

В исходном коде API 26 тег оптимизированногоDirectoryDoreTory TexClassLoader предназначен для обеспокоения, и реализация также изменяется.

. Сенсорный путь кклада!

Двойной Pro-комиссионный механизм

Можете увидеть создание ClassLoader Необходимость получить один ClassLoader parent параметр. это parent Цель заключается в реализации родительских комиссий. который:

Когда классный погрузчик получает запрос на класс нагрузки, сначала делегируйте задачу нагрузки на погрузчик родительского класса, рекурсивно, если родительский класс загрузчик может завершить задачу загрузки класса, она будет успешно возвращаться; только погрузчик родительского класса не может быть завершен Эта задача погрузки загружена с собой.

Итак, мы создаем классную загрузку: new PathClassLoader("/sdcard/xx.dex", getClassLoader()); Может не только можно загрузить класс в xx.dex.

Стоит отметить, что: c = findBootstrapClassOrNull(name);

Согласно имени метода, он должен быть загружен, когда родитель нулевой. BootClassLoader Loaded класса.

new PathClassLoader("/sdcard/xx.dex", null) Можете ли вы загрузить активность .Class?

Но на самом деле реализация среди Android: (разные Java)

findClass

Вы можете видеть, что себя, когда все Отец ClassLoader не может загрузить CLASS. findClass метод. findClass Определение в ClassLoader является:

На самом деле, любой ClassLoader подкласс может переписать loadClass а также findClass Отказ В общем, если вы не хотите использовать родительский доверить это, loadClass Изменить его реализацию. Переопределение findClass Затем, в соответствии с делегацией родителей, родитель ClassLoader не может найти класс, определить, каким образом вы можете найти класс. Наш PathClassLoader Будет нести ответственность за загрузку MainActivity Класс написано в такой программе, с использованием двойной про-возложенного отец ClassLoader загрузку Framework Activity Отказ иллюстрировать PathClassLoader Не переписал loadClass Таким образом, мы можем взглянуть на PathClassLoader findClass Как это реализуется.

Это очень просто достичь, от pathList Найдите класс в классе. Продолжайте просмотреть DexPathList

Тепловой ремонт

PathClassLoader Существует массив элементов, и является членом DEXFILE в классе ELEMENT для представления файла DEX, т.е. X DEX в АПК, а массив элементов имеет X элементы.


существовать PathClassLoader Массив элементов: [patch.dex, classes.dex, classes2.dex]. Если он существуетKey.classСуществует копия patch.dex и classex2.dex. Когда вы найдете класс поиска, петлю получить dexElements Dexfile, посмотриKey.classЗатем верните сейчас и не смогу загрузить дефект в последующем элементе.Key.classNS.

Связанный исходный код:BaseDexClassLoader,DexPathList

Генерировать декс Разработка Грейла: ворс + автоматическое поколение DEX


dx --dex --output=output.dex input.jar


java -jar dx.jar --dex --output=output.dex input.jar

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

Многие пользователи задаются вопросом увеличения производительности своего Android-гаджета, ведь это не просто «звонилка» в случае со смартфоном, и не просто медиаплеер, в случае, если это планшет.

В данной статье мы разберем очередной твик, который может несколько ускорить работу операционной системы Android.


Большинство пользователей Android-устройств слышали о таких понятиях, как одексированная и деодексированная прошивка. На данную тему мы уже составили отдельную статью. Так вот, отключение проверки байт-кода или disabling verify-bytecode, способно заметно улучшить производительность, особенно на аппаратах со сравнительно небольшим (256-512 Мбайт) объемом оперативной памяти. Изначально считалось, что данный твик актуален только для деодексированных прошивок, но практика показывает, что он полезен и для одексированных версий. Сразу отметим, что всегда перед проведением каких-либо манипуляций с программным обеспечением вашего устройства, настоятельно рекомендуется создавать резервные копии.

Для проведения данной операции нам потребуются, во-первых, Root-права и инсталлированный Root Explorer, а во-вторых, установленный терминал, например Android Terminal Emulator.

Итак, после создания полного бекапа всех данных, открываем терминал и прописываем в него последовательно следующие команды:

setprop dalvik.vm.verify-bytecode false

setprop dalvik.vm.dexopt-flags v=n, o=v

Далее, используя Root Explorer, находим файл build.prop, который находится в памяти устройства в директории system. Открываем его и добавляем туда следующие строки:

Внимание! Если какая-то из строчек уже присутствует в файле, достаточно изменить их значения на указанные выше, дубликатов быть не должно!

После этого снова открываем терминал, куда вводим следующие команды поочередно:

После чего производим перезагрузку устройства и радуемся полученному результату.

Если по какой-либо причине вдруг понадобится отключить действие данного твика, то есть обратно включить проверку байт-кода, то достаточно открыть терминал и ввести туда такие команды:

setprop dalvik.vm.verify-bytecode true

Как результат проделанных операций получаем немного больше свободной оперативной памяти, улучшение производительности устройства и более плавное переключение между приложениями, а также быстрый повторный запуск любых программ. Единственные минусы – некорректная работа некоторых приложений, но справедливости ради скажем, что бывает это крайне редко. Иногда возможны зависания при извлечении или установке карты памяти microSD.

Всем привет. Недавно мне valdikss рассказал об андроид-вирусе, который может немало навредить пользователю, если он недостаточно внимателен. Мне захотелось узнать его внутренности, т.к. более или менее в последнее время занимаюсь ресерчем андроид приложений, но вирусы никогда еще не исследовал. До его рассмотрения, мне сразу бросилось в глаза название файла — android_update-1.apk. Первым делом делаю то, что делает каждый андроид ресерчер — распаковывает его dex2jar-ом (ну и параллельно можно посмотреть WinRAR-ом список файлов).

dex2jar

Когда я распаковал файл dex2jar-ом у меня получился красивый jar. Я обрадовался и кинулся смотреть его в JD-GUI.

image

image

Но, к сожалению, JD-GUI не смог полностью декомпильнуть получившийся файл, зато в самом конце файла были интересные строки.

Тут 2 варианта: либо вирус «китайского происхождения», либо ошибка кодировки. Думаю, пока рано делать выводы.

WinRAR

Как известно, APK — формат архивных исполняемых файлов-приложений для Android. Список файлов, которые входят в APK-архив, можно с легкостью просмотреть WinRAR-ом, что я и сделал.

image

На первый взгляд ничего особенного, но я знаю, что в папке assets разработчики хранят локальные файлы — html страницы, картинки, ну, в общем, локальные ресурсы, которые можно дергать из приложения.

image

Там я нашел файл classes.dex. Classes.dex — контейнер который, если мы распакуем, получим (если повезет) исходный код приложения под Android. По стандарту, файл classes.dex должен начинаться следующими байтами:


Что в ASCII — dex.035.
Но файл assets\classes.dex начинался так:


Явно зашифровано. Уже начинает проявляться логика работы зловреда. Когда мы скачиваем на смартфон и запускаем apk, он устанавливается, дергает из своих ресурсов файл classes.dex, расшифровывает, (по логике) получает какой то новый аpk, который и выполняет свою основную функцию.

Чтобы полностью понять как все работает, надо посмотреть действие зловреда в динамике. На реальном устройстве запускать — самоубийство. В качестве эмулятора я взял Genymotion, его преимущества как эмулятора описывать не буду, все здесь написано. Также, вместе с Genymotion, я использую Android Studio (в дальнейшем AS) 1.2 (нет слов, чтобы описать его слаженную работу). Когда мы запускаем Android Studio и Genymotion, они связываются с помощью adb. В Android Studio удобно смотреть лог работы приложения, в данном случае зловреда.

Установка apk привела к странной ошибке:

image

Я подумал: «все, зловред упал, вряд ли он запустится». Нажал на OK. Я частично знал, как он должен работать, так что перешел в Settings -> Security -> Device administrators и увидел, что он как раз заработал так, как надо, прописал уже себя в администраторах, заметите, он меня не спросил: «Ты согласен установить это приложение? Оно будет использовать такие-то права.», ну, как все приложения.

Если мы попытаемся удалить его из администраторов (нажав на checkbox, он отмечен красным), то вылезет окно:


После нажатия на кнопку деактивации нас ждет сюрприз — приложение невозможно удалить.


Окейййй. Посмотрим сетевой трафик, вдруг он что-то куда-то шлет. В эмуляторе, на WiFi соединение, поставим прокси и перезагрузим эмулятор. Так я и думал — есть и сетевая активность


тело в POST-запросе пустое.

Откроем logcat в AS и посмотрим, вдруг это приложение что-то записывает в логах. Нам везет:


Вот что получается — зловред берет из ресурсов файл assets/classes.dex, расшифровывает, записывает в /data/data/com.adobe.jaguar/app_dex/new.apk.

Так. Чтобы теперь узнать, каков его основной фунционал, нам надо поймать файл new.apk. Устанавливаем total commander на андроид и переходим в /data/data/com.adobe.jaguar/app_dex/. Папка оказалось пустой, после запуска new.apk файл удаляется. Возник вопрос: как получить его? Сначала подумывал, не написать ли мне приложение под андроид, которое в цикле следит за папкой /data/data/com.adobe.jaguar/app_dex/ и когда зловред снова создаст этот файл, мое приложение скопирует его, и я наконец узнаю что, оно делает на самом деле. Хорошо, что я в некоторых вопросах ленивый. Немного подумав, решил поэкспериментировать над правами папки /data/data/com.adobe.jaguar/app_dex/, и тут тоже повезло — он создал файл new.apk и упал.

Копируем new.apk из андроид, распаковываем dex2jar-ом и декомпилируем с помощью JD-GUI.


Опять иероглифы… Я решил открыть получившийся файл luyten-ом, мало ли, вдруг JD-GUI не может что-то правильно декомпильнуть.


.
Да, я был прав, это не иероглифы, а зашифрованный текст, нашел функцию которая занимается расшифровкой, но из всего apk только этот класс был обфусцирован, luyten тоже упал на нем. Есть еще один декомпилер — DJ Java Decompiler, у него туго с графикой, поэтому я его использую только для просмотра отдельных классов, а не всего проекта. Он, как бы, смог декомпильнуть, но, к сожалению, я не смог понять, как именно идет расшифровка.

Класс который отвечает за расшифровку (буду рад если взгляните на код, с первого взгляда AES, но не факт):

Нам уже из сетевой активности известно, что по сети передаются POST-запросы, так что этот код отправит POST-запрос:

В некоторых участках кода я увидел функции, в именах которых есть слово из 4-х букв — «bank».

Теперь у нас есть полная картина, этот зловред — банковский троян, который маскируется под андроид апдейт для Adobe Flash Player. После установки создает сервисы com.adobe.jaguar:jaguar_bf и com.adobe.jaguar:jaguar_obs. Сканируют файловую систему (в теле new.apk нашел код) на предмет установленных программ банк-клиентов, если находит их, то читает файлы из папки shared_prefs и отправляет злоумышленнику.

Мораль:
1. Не устанавливайте root и банк-клиент на одном устройстве
2. Не доверяйте приложениям, скачанными из сторонних магазинов

С прибытием MIUI 11 на Xiaomi телефоны, пользователи видят, как разряд батареи происходит намного быстрее. Эти проблемы не являются совпадением и связаны с MIUI 11, что поразительно, учитывая, что уровень настройки всегда был признан за его хорошую оптимизацию.

Эти проблемы с аккумулятором достигли Xiaomi Mi 9T и других смартфонов, которые находятся в среднем диапазоне, входном диапазоне или высоком уровне, независимо от процессора или его конфигурации. К счастью, великий и широкий сообщество Xiaomi нашел ошибку и позволяет нам ее решить. Мы также покажем вам несколько советов, с помощью которых можно восстановить автономность вашего мобильного телефона с помощью MIUI 11.

Xiaomi батарея

Как активировать оптимизатор батареи в MIUI 11

Оптимизатор батареи был с нами с Android 7, хотя сейчас производители все больше усложняют доступ пользователям. Проблема разряда аккумулятора в MIUI 11 возникает из-за этого и связана с Android 10. К счастью, команда MIUI показала нам некоторые продвинутые шаги с помощью которого мы можем активировать оптимизатор батареи через ADB без необходимости рутировать наш мобильный или другие более сложные шаги.

Этот процесс не опасно , но если мы не выполним эти шаги правильно, может произойти сбой, и вы будете нести ответственность.

  • Первое, что нам нужно сделать, это загрузить исполняемый файл ADB на наш компьютер.

Вы можете скачать исполняемый файл на свой компьютер из следующих ссылок в зависимости от вашей операционной системы: ADB для Windows – ADB для Mac – ADB для Linux

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

Избегайте разрядки аккумулятора вашего мобильного телефона Xiaomi

С приходом MIUI 11 произошло снова, проблема разряда батареи MIUI 10 повторилась. Для ее решения у нас есть простая опция, которая позволяет любому пользователю оптимизировать свою батарею с помощью следующих шагов:

  • Вводим настройки и прикасаемся Приложения .
  • Мы нажимаем на Разрешения и выберите автоматический запуск.
  • Отсюда мы выбираем все приложения, которые мы не хотим запускать в одиночку, экономя батарею.

Permisos optimizar batería MIUI 11

Тем не менее, это не самое передовое решение, а скорее серия патчи, которые помогут нам с дренажом батареи в случае, если мы не хотим делать шаг, который мы видели ранее с нашим мобильным телефоном. Мы покажем вам другие дополнительные опции с теми, которые экономят заряд батареи в MIUI 11:

Активировать темный режим

Темный режим завещал MIUI 11 остаться и с ним, особенно в AMOLED экраны Мы предотвратим засветку всех пикселей, чтобы увеличить аккумулятор нашего мобильного телефона Xiaomi. Вы можете легко активировать темный режим в MIUI 11 из раздела Настройки> Дисплей и, наконец, темный режим, где мы также можем его запрограммировать.

Уменьшить расход батареи в MIUI 11

В полном приложении безопасности Xiaomi у нас есть раздел, посвященный батарее, где мы сможем узнать, какие приложения используют больше батареи и избавиться от них. Мы также можем следовать совет, который дает нам MIUI 11 для экономии заряда аккумулятора, среди которых мы найдем оптимизацию яркости экрана или активацию экономии заряда аккумулятора.

Читайте также: