Improving ProGuard Name Obfuscation — статья о том, как сделать обфускацию с помощью ProGuard более запутанной. Утилита ProGuard входит в комплект Android Studio и представляет собой систему оптимизации Java-классов. Она удаляет неиспользуемый код, а также сокращает имена классов, методов и переменных, делая исполняемый файл меньше. Побочным эффектом этого является обфускация, когда из-за изменения имен код становится более трудным для понимания.
Еще по теме: Деобфускация приложения с Dex-Oracle
По умолчанию ProGuard переименовывает классы, методы и поля, используя английский алфавит: первый переименовывается в a, второй в b, двадцать седьмой — в aa и так далее. Проблема такого подхода в том, что он очень предсказуем; взломщику придется разобраться в твоем коде только один раз, и он легко найдет нужный участок кода в другой версии приложения: его имя, скорее всего, будет таким же.
Эту проблему можно побороть, используя разные словари. В интернете даже нашелся словарь, содержащий запрещенные для использования в Windows имена файлов, что должно помешать распаковке исполняемого файла в Windows, но на деле почти не работает. Применяя разные словари к каждой новой версии приложения, можно сделать порядок генерирования имен непредсказуемым и запутать взломщика.
Загружается такой словарь с помощью следующих инструкций в файле proguard-rules.pro внутри проекта:
1 2 3 4 |
-obfuscationdictionary method-dictionary.txt -packageobfuscationdictionary package-dictionary.txt -classobfuscationdictionary class-dictionary.txt |
Также автор рекомендует использовать следующую опцию:
1 |
-repackageclasses 'o' |
Она переместит все классы в пакет o, что в теории должно еще сильнее запутать взломщика.
Еще по теме: Обфускация PowerShell