Вопросы о Прогард

Я запутал свое приложение, используя ProGuard 4.7. После этого я распаковал свое приложение с помощью Dex2Jar. И я не был доволен результатом обфускации. А у меня следующие вопросы:

1.. Как замаскировать строковую константу?

(Возможно использование такого варианта: с сервера загружается строковая константа. Я знаю, что это повлияет на производительность, но на защиту в первую очередь)

2.. Как переименовать стандартные имена классов?

Например: после обфускации стандартные имена классов остаются без изменений. (можно сделать копии всех стандартных классов и потом ProGuard их переименует)

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.telephony.TelephonyManager;

3.. ProGuard создал много новых пакетов, но все рабочие классы находятся в одном из них. Как разместить их в разных пакетах?

a.a
b.a
my.package.name // here all working classes of my app
b.b
c.c

4.. Почему некоторые названия моих классов не изменились?


person XXX    schedule 08.03.2012    source источник
comment
Можно подробнее по пунктам 2 и 3? Что вы подразумеваете под стандартными библиотеками, вы имеете в виду библиотеки Android или те, которые вы добавили в свой проект? Что вы имеете в виду, что ProGuard создал новые пакеты, но поместил все рабочие классы в один, можете ли вы привести несколько примеров?   -  person cistearns    schedule 08.03.2012
comment
я обновил свой вопрос   -  person XXX    schedule 08.03.2012


Ответы (2)


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

Вопрос 3. Это ожидаемо и относится к вопросу 4. Любая часть пакета, содержащая ваши действия (или другие общедоступные точки входа), должна поддерживать этот путь.

Итак, если у вас есть пакеты:

com.mycompany.myapp.activities

Тогда пакет действий должен быть полностью сохранен, потому что никакие классы действий не будут запутаны. Кроме того, com.mycompay.myapp должен быть сохранен для любого элемента, на который ссылается XML, чтобы система могла правильно найти вашу запись, как определено в манифесте.

Похоже, ProGuard работает так, как должно быть в вашей настройке.

person cistearns    schedule 08.03.2012

Я могу помочь с парой из них.

  1. Захват строки с вашего сервера — это слабая защита, но тогда злоумышленник увидит этот URL-адрес и перехватит содержимое (или его Wireshark). Вы замедлили работу приложения и привязали пользователя к интернету практически без пользы. Proguard не может сделать это из коробки, если вы действительно хотите запутать свои строки, закодируйте их в Base64. Это не сильно замедлит кого-то, но, по крайней мере, это не очевидно. Дополнительная информация: скрытие строк в скрытом коде

  2. Не знаю

  3. Не знаю

  4. Существует ряд классов и интерфейсов, которые должны иметь общедоступные имена. Определения Services, Activity, AIDL — это лишь некоторые из них, но если вам нужна лучшая идея, опубликуйте имя класса/интерфейса и классы, из которых он происходит/реализует.

person Hounshell    schedule 08.03.2012
comment
Чтобы уточнить пункт 4, имена классов должны совпадать с тем, что есть в вашем xml, например, в манифесте и макетах. Система использует имена в xml для поиска различных точек входа в ваше приложение, поэтому вы не хотите, чтобы они были запутаны. - person cistearns; 08.03.2012