Pull to refresh

Comments 26

Очень обрадовало появление такого функционала в SDK, но пока не могу испытать его испытать. И в связи с этим появилось два вопроса:
— На основании чего может быть создан файл seeds.txt
— Как будет выглядеть обфусцированный код после реверсинга?
по поводу второго пункта — сам нашел, проглядел наличие примеров
>На основании чего может быть создан файл seeds.txt
— Хороший вопрос, подозреваю, что сюда попадают методы суперклассов типа onCreate(), onReceive(), которые Вы переопределяете.
Точно не знаю, на developer.android.com об этом ни слова.
seeds создается на базе списка классов, к которым вы и система обращаетесь по имени (рефлексия и т.д.) и на базе списка методов, которые привязаны к вызовам изнутри системы, к примеру для андроида:
# вызываются путем объявления в манифесте
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
 
# динамическое поведение
-keep public class * extends View { 
public <init>(android.content.Context); 
public <init>(android.content.Context, android.util.AttributeSet); 
public <init>(android.content.Context, android.util.AttributeSet, int); 
public void set*(...); 
}
 
# Also keep - Enumerations. Keep the special static methods that are required in enumeration classes.
-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
} и т.д.
За статью спасибо — тему как-то подзабыли :)

Для своего проекта прикричивали его в build-impl для netBeans.
Важно помнить, что при использовании функционала PtoGuard возникает ряд важных ограничений. Например, при использовании ACRA(crash-репорты), заметно ограничивается уровень обфускации. Надо много чего сохранять. Эта же проблема и с обычной java, естественно, есть.

И эти ограничения могут хорошо подпортить жизнь при отладке :)
нет смысла уменьшать уровень обфускации с целью сохранения читабельности crash репортов, достаточно для каждой выпущенно версии сохранять mapping и потом восстанавливать код уже при исправлении багов. версия приложения приходит к креш-репорте. и глупо по этому параметру снижать уровень обфускации.

отладка на обфусцированно коде — это при реверс-инжиринге? или вы это такая новая техника отладки?
Говорим о разных вещах.
Начну с конца :)
— Если приложение работало без ProGuard — оно может с ним не работать. И искать причины можно долго.
— Есть вот такой док. code.google.com/p/acra/wiki/ACRAProGuardHowTo Для нашего прилоежния он не помог. Пришлось оставлять еще часть классов, ввиду нашей архитектуры.
Проблема кроется в использовании вами или сторонними библиотеками Reflection. Например, аналогичная проблема есть во floggy с ProGuard (для J2ME).
по моему, говорим об одном и том же.
знаю архитектуру приложения, которое пишешь — нет никаких проблем при составлении правильного seeds. безусловно, это займет некоторое время, но отладка приложения, которые падает после обфускации, всегда выдает конкретное место, конкретный класс и конкретную проблему из-за которой выполнение программы прерывается. это вполне закономерно и предсказуемо, я бы даже не рискнул называть это проблемой, ибо это цена обфускации.
Руками можно все :)
Мы нормально-ленивые. Если при падении мне выдадут строку кода я буду более счастлив, чем некий ID и коммент.
Это вопрос скорее не к стилю и принципов обфускации, а к стоимости ПО/наработок vs стоимость/желание рефакторить приложение.
падает действительно в конкретном месте… если не учесть try-catch NullReference возникет явно не том месте, где кроется причина падения. А поиск исходного места зависит от фантазии разработчика, писавшего оный код. :)
это я как раз понимаю, все ленивые, а многие еще и корявые. но это никак не соотносится с предупреждением о:
Важно помнить, что при использовании функционала PtoGuard возникает ряд важных ограничений. Например, при использовании ACRA(crash-репорты), заметно ограничивается уровень обфускации. Надо много чего сохранять. Эта же проблема и с обычной java, естественно, есть.


просто я немного растерян. корявый перевод половины страницы из официальной документации по андройду, несколько невнятных комментариев, а люди всё радуются, а потом удивляются, что в жизни всё немного не так, как тут «понаписали».
Согласись, иногда плюс поста не в решении проблемы, а хотябы в ее упоминании, imho.

Уверен — трафик на страничку ProGuard пополнился российским, а уж сильные андроид-девелоперы сделают расширенный пост, если лень поборют и не найдут что-нибудь поинтересней :)
возможно. только что же это за девелоперы такие, которые даже не прочитали release notes к sdk tools.
Полагаю, суть в том, что теперь девелоперы осведомлены об интересе к этому вопросу (и в некотором смысле мотивированы написать соответствующий пост), а не в том, что они до этого сами не знали о ProGuard.
Более подробная информация по вопросам настройки proguard, без привязки к версии SDK и готовый пример
www.androidengineer.com/2010/07/optimizing-obfuscating-and-shrinking.html (английский)

Ничего сложного в подключении нет. Главное, как было сказано выше, не забыть указать -keep public class для нужных activity, view и прочего.

Зачем вообще защищать приложения от реверс-инжиниринга? Все приложения должны идти по open source лицензии, а авторы должны жить на donations и концертах, встречах с фанатами…
Почему считается что работа разработчика андроид важнее, чем того же автора книги или музыканта, не способного на «обфускацию кода»…
потому что приложения воруют, а donation'ы делают всё же нечастно
или это вы тролите так?
Я просто удивляюсь сколько среди читателей лицемеров, которые минусуют в случае, если я выступаю протип новостей о новом начинании piratbay распространять музыку, и в то же время рассуждают, как защитить приложение андроид. Печально просто это. Надеюсь, кто-то задумается.
я думаю что те, кто минусуют вас за музыку и те кто рассуждают, как защитить приложение под андроид, разные люди.

а вообще были и наверно есть до сих пор сообщения, когда бесплатные приложения с рекламой воровали — просто меняли в них id для рекламной площадки и выкладывали снова в маркет. В результате деньги за рекламу шли не автору приложения.
скажите, а вот вы сами и ваши знакомые много делаете donation'ов?
Если это был вопрос мне то да, я сделал donations на сумму более 1000$ на open source продукты, которые использую. Про минусующих лицемеров — печально.
А вы перестаньте передёргивать, глядишь и не будут люди казаться лицемерными там, где этого нет и в помине. Скажите ещё, что _прослушивание_ музыки без отчислений равносильно убийству… Копирасты — такие копирасты :(
ЗЫ. Да, на случай, если вы совершенно искренне проводите эту параллель, поясняю — рассматриваемая защита — это не защита от копирования, это защита от плагиата. Где вы видели в начинании пиратбея призывы, пособничество, помощь плагиату той же музыки???
ЗЗЫ. Впрочем, таки не думаю, что вы настолько… хм… недалёки, что не понимаете этого. Скорее всего сознательно передёргиваете. Вопрос — зачем вам так нагло и злонамеренно врать?
UFO just landed and posted this here
Как это забыли? В статье же сказано о выносе нужных классов в исключения. По умолчанию в кофиге уже исключены наследники Activity, Service, BroadcastReceiver и прочие.
Найти бы способ, как заюзать ProGuard при экспорте в IntelliJIDEA, а то кодить в Идее, а релизить в Эклипсе не комильфо :)
Дык, дать команду ant release не так уж и сложно :)
Sign up to leave a comment.

Articles