Обфускация и оптимизация J2ME кода в Sun One

Обфускация (obfuscation) это преобразование кода программы, делающее его нечитаемым при декомпиляции и таким образом защищающее интеллектуальную собственность автора программы. Оптимизация это преобразование кода, приводящее к уменьшению размера приложения и увеличению скорости его выполнения. Побочным эффектом при обфускации является оптимизация кода. В приведенной ниже статье демонстрируются преимущества обеих техник, а также описывается использованиеRetroGuard иJODE - двух бесплатных утилит для Sun ONE Studio Mobile Edition.

Что такое обфускация и оптимизация?

Оптимизация размера программы и скорости его выполнения всегда была одной из главных проблем программирования. Применительно к приложениям для мобильных телефонов оптимизация играет ключевое значение, поскольку недостаточная оптимизация кода приложения легко может привести к краху всего проекта. Это связано, прежде всего, с ограниченностью ресурсов телефона и жесткими требованиями к размеру приложения. Техника оптимизации MIDlet-ов включает в себя:

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

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

  • Замена имен классов и их членов на произвольные сочетания букв
  • Удаление имен файлов-исходников

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

Интегрируемые утилиты для выполнения обфускации и оптимизации

Среда программирования Sun ONE Studio Mobile Edition позволяет встраивать различные модули для выполнения обфускации и оптимизации от сторонних производителей. В этой статье я хочу рассмотреть два модуля с открытым кодом: RetroGuard и JODE. Они легко встраиваются в IDE и позволяют быстро проводить преобразование кода, учитывая специфику MIDlet-ов. Обфускаторы встраиваются в Sun ONE Studio как фильтры для процесса компиляции MIDlet suit-ов. Вместо того чтобы применять обфускацию к каждому отдельному классу или пытаться получить список выполняемых классов, RetroGuard и JODE просто применяют обфускацию ко всем классам, входящим в JAR. JODE выполняет более полную оптимизацию, определяя и удаляя неиспользуемые классы и методы из MIDlet suit-а.

Инсталляция

Ниже описан процесс инсталляции модулей

  1. Установите Sun ONE Studio 4 update 1 Mobile Edition, затем используйте Update Center для загрузки и установки Mobile Edition модулей.
  2. С помощью Update Center загрузите и установите J2ME Wireless, JODE Integration, and RetroGuard Integration модули -kjava.nbm, kjava-obfuscator-jode.nbm, and kjava-obfuscator-retroguard.nbm. Из главного меню выберитеTools/Update Center, затем отметьте и установите все необходимые модули (рис.1)

После установки модуля J2ME Wireless, в Mobile Edition Online Help добавится новая секция "Managing Obfuscators and Optimizers". Откройте "Adding Obfuscators and Optimizers" для получения детальной инструкции по установке и настройке модулей обфускации и оптимизации.

RetroGuard находится в модуле kjava-obfuscator-retroguard.nbm. Его можно использовать сразу после установки.

JODE надо загружать отдельно, затем необходимо настроить Obfuscator Registry, чтобы связать установленный JODE модуль с закаченной утилитой JODE. Это можно сделать следующим образом.

  1. Скачайте файл jode-1.1.1.jar.
  2. Из главного меню Sun ONE Studio Mobile Edition выберитеTools>Obfuscators. Это приведет к открытию Obfuscator Registry (Рис. 2).
  3. Выберите JODE в левой панели. Перейдите в поле Executable Path и нажмите кнопку "...". Выберите скачанный файл jode-1.1.1.jar.
  4. Закройте окно Obfuscator Registry. JODE готов к работе.

Обзор возможностей

После установки модулей интерфейс Sun ONE Studio изменится:

  • Mobile Edition Online Help - добавится новая секция "Managing Obfuscators and Optimizers".
  • Obfuscator Registry - появится новое окно с настройками для каждого установленного обфускатора.
  • MIDlet Suite properties - появится новое свойство Obfuscate and Obfuscator.

Online Help

Новая секция Online Help содержит обзор обфускаторов и оптимизаторов, описывается их инсталляция и настройка. ОткройтеHelp > Help Sets > Mobile Edition Help, а затем "Managing Obfuscators and Optimizers".

Obfuscator Registry

Чтобы открыть Obfuscator Registry выберитеTools > Obfuscators. Расположенная слева панель содержит список установленных обфускаторов и оптимизаторов. После выбора одного из них в правой части окна отображаются настройки. Используйте кнопку "Set As Default" чтобы выбрать обфускатор, который будет использоваться при компиляции MIDlet suit-а. Выбранный по умолчанию обфускатор можно также изменить в индивидуальных настройках MIDlet Suit-а

Расположенная в правой нижней части окна закладка Properties содержит настройки, регламентирующие отношения между IDE и утилитой.

Закладка Expert содержит настройки самой утилиты. Информацию о них можно найти в соответствующем разделе документации.

Настройки MIDlet Suite

Каждый MIDlet Suite имеет индивидуальные настройки. С их помощью можно установить используемый обфускатор. Когда свойство Obfuscate установлено в False, MIDlet компилируется безо всякой фильтрации и обфускации. Если это свойство установлено в True, используется обфускатор, указанный в поле Obfuscator. Первоначально он имеет значение, установленное по умолчанию в Obfuscator Registry.

Демонстрация

Проведем небольшое тестирование. Возьмем несколько примеров, поставляемых вместе с Sun ONE Studio Mobile Edition, и прогоним их через Retro Guard и JODE. Результаты работы приведены в таблице:

Сравнение результата компиляции JAR файлов (в байтах)
MIDlet Suite Без обфускации RetroGuard JODE
demos 180,146 143,038 109,364
games 50,653 39,975 38,451
photoalbum 221,665 218,740 218,654
UIDemo 23,526 19,675 20,113

К сожалению, демонстрацию не удалось завершить. Обфускатор натолкнулся на UIDemo и вылетел. RetroGuard проглотил UIDemo, но полученный в результате MIDlet не запускался. JODE сначала столкнулся с той же проблемой. Изменение настроек позволило получить менее защищенный, но рабочий MIDlet. Для JODE необходимо установить свойство Renamer в Off, а Unreachable Methods and Class в Preserve. Проблема возникла, поскольку UIDemo содержит массив жестко прописанных имен классов, доступ к которым получает с помощью Class.forName(...). Обфускатор не может изменять жестко установленные настройки, таким образом, имена классов изменялись, а массив с названиями классов содержал старые названия. Избегайте подобных методов кодирования.

Ссылки

  • RetroGuard – Java байткод обфускатор Retrologic Systems
  • JODE – декомпилятор и оптимизатор от Sourceforge.net

В основе статьи лежит работа"Obfu scation and Optimization: New Functionality with the RetroGuard and JODE Modules for Sun ONE Studio Mobile Edition" от Vaughn Spurlin.
Перевод:aRix




Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна