Реверс-инжиниринг android приложений

Картинка


В этой статье я постараюсь рассказать про реверс-инжиниринг приложений для android. Этот процесс несколько отличается от оного для win-приложений: здесь нет отладчика и нет ассемблера, вместо них выступают LogCat и байт-код. Как вы уже догадались, мы будем исследовать приложение с целью его взлома, или, проще говоря, «крякать».

БРИФИНГ


В качестве подопытного кролика я выбрал программу «Multi Mount SD-Card». Ее суть заключается в монтировании flash-накопителя девайса с одновременным доступом к нему системы и пользователя. Дело в том, что по умолчанию android не имеет доступа к смонтированному в данный момент накопителю. Для пользователей Eclair это не так критично, но вот пользователи Froyo+ писают кипятком не радуются, когда установленные на карту программы вылетают при ее монтировании. Собственно для решения этой проблемы была и написана эта программа. Ах да, программе нужны root права.

Для начала нам нужен дистрибутив программы, чтобы было что ломать. Но где же его взять? Ведь для этого надо ее купить. Ну, или выпросить у уже купившего человека. Таким человеком стал creage с форума 4pda, который любезно расшарил купленный apk.

Итак, у нас есть дистрибутив, мы уже установили программу, запускаем… И тут бац! Видим окошко с предложением купить лицензию. Отсюда вытекает, что проверка идет через интернет, пробуем отключить — не помогает. Покупателю приложения не дают никаких ключей и логинов, что говорит нам о привязке к чему-то вроде hardware_id или google-аккаунта. Следовательно у нас есть несколько вариантов взлома: либо захардкодить в программу заведомо правильную проверяемую информацию, либо вырезать из кода все участки, проверяющие валидность лицензии. Я выбрал второй вариант, ибо он мне больше нравится.

Инструментарий


Для работы нам нужны инструменты. Я было хотел рассказывать про них по ходу дела, но все-таки передумал и решил написать про все заранее. Собственно, сегодня нам понадобится следующий список инструментов:


Введение


Прежде чем приступать, я немного объясню структуру android приложений. Каждое приложение есть файл с расширением apk, упакованный zip’ом. В нем содержатся ресурсы приложения, AndroidManifest.xml и classes.dex. Что же из себя представляет последний? Это байт-код программы, скомпилированный специально для виртуальной машины dalvik. Получить из него чистый исходный код на java нельзя, но можно получить dalvik opcodes — набор команд для виртуально машины, грубо говоря, это местный ассемблер. А еще можно превратить dex файл в jar, после чего декомпилировать его и получить более-менее читаемый код на java. Чем мы и будем сейчас заниматься.

Декомпиляция


Все манипуляции с apk мы будем проводить с помощтю утилиты Apk Manger. Это эдакий единый фронт-енд для набора библиотек, работающих с apk. Напомню, у вас должны быть установлены драйвера для девайса и включен режим USB-debugging. Приступим.
  1. Копируем multimount.apk в папку apk_manager\place-apk-here-for-modding и запускаем Script.bat. Если все хорошо, то появится консоль с зелеными надписями.
  2. Необходимо декомпилировать apk. Выбираем одноименный пункт 9. Консоль после этого не закрываем.
  3. Открываем multimount.apk архиватором и копируем файл classes.dex в папку dex2jar, после чего перетаскиваем его на dex2jar.bat. В Total Commander перетаскивание не работает.
  4. Появившийся classes.dex.dex2jar.jar открываем с помощью jd-gui. Окно пока не закрываем, оно понадобится позже.


Начало анализа


Для получения начальной информации о приложении посмотрим на его манифест. Из него можно понять, что главным активити являются настройки. Значит код, предлагающий купить приложение, находится где-то там. Еще можно заметить странную строчку в самом низу:
  1. <uses-permission android:name="com.android.vending.CHECK_LICENSE" />

Что же это? Как подсказывает гугл, эта строчка намекает на то, что в приложении используется LVL, то есть менеджер лицензий android. Ну что ж, это даже хорошо, ведь у нас есть документация. Почитав которую, пожно понять, что этот LVL не только управляет лицензиями, но и подвергает код обфускации, что существенно усложнит нам работу.

Ну да ладно, приступим непосредственно к анализу кода. Переключаемся на jd-gui, разворачиваем дерево, и видим три пространства имен: первое — что-то связано с рекламой, второе — набор классов LVL, третье — то, что нам надо.
Заходим в него и видим последствия обфускации. Открываем MultiMountSDCardConfigure, бегло просматриваем код. В глаза сразу бросается длинная строчка с каким-то хэшем. Это base64 public key. А вокруг него находятся и остальные строчки, проверяющие лицензию. Их нам необходимо выпилить.
  1.     com.android.vending.licensing.h localh = new com.android.vending.licensing.h(arrayOfByte, str4, str3);
  2.     v localv = new v(this, localh);
  3.     m localm1 = new m(this, localv, "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg1...");
  4.     f = localm1;
  5.     m localm2 = f;
  6.     j localj = e;
  7.     localm2.a(localj);


Открываем apk_manager\projects\multimount.apk\smali\com\rafoid\multimountsdcard\widget\MultiMountSDCardConfigure.smali и видим байт-код. Прежде чем читать дальше, советую сначала просмотреть список команд. Нам необходимо найти те самые строчки и закоментить их. Вот они:
  1. ...
  2.     #iput-object v1, p0, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardConfigure;->e:Lcom/android/vending/licensing/j;
  3.  
  4.     #new-instance v1, Lcom/android/vending/licensing/m;
  5.  
  6.     #new-instance v2, Lcom/android/vending/licensing/v;
  7.  
  8.     #new-instance v3, Lcom/android/vending/licensing/h;
  9.  
  10.     #sget-object v4, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardConfigure;->d:[B
  11.  
  12.     #invoke-virtual {p0}, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardConfigure;->getPackageName()Ljava/lang/String;
  13.  
  14.     #move-result-object v5
  15.  
  16.     #invoke-direct {v3, v4, v5, v0}, Lcom/android/vending/licensing/h;-><init>([BLjava/lang/String;Ljava/lang/String;)V
  17.  
  18.     #invoke-direct {v2, p0, v3}, Lcom/android/vending/licensing/v;-><init>(Landroid/content/Context;Lcom/android/vending/licensing/n;)V
  19.  
  20.     #const-string v0, "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg..."
  21.  
  22.     #invoke-direct {v1, p0, v2, v0}, Lcom/android/vending/licensing/m;-><init>(Landroid/content/Context;Lcom/android/vending/licensing/k;Ljava/lang/String;)V
  23.  
  24.     #iput-object v1, p0, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardConfigure;->f:Lcom/android/vending/licensing/m;
  25.  
  26.     #iget-object v0, p0, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardConfigure;->f:Lcom/android/vending/licensing/m;
  27.  
  28.     #iget-object v1, p0, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardConfigure;->e:Lcom/android/vending/licensing/j;
  29.  
  30.     #invoke-virtual {v0, v1}, Lcom/android/vending/licensing/m;->a(Lcom/android/vending/licensing/j;)V
  31. ...

Закоменчиваем, сохраняем. Вроде как, все, можно пользоваться. Осталось только скомпилить и установить.

Компиляция и установка


Для этого будем использовать уже знакомый нам Apk Manager.
  1. Если вы ещё не закрыли окно консоли, переключаемся на него и выбираем пункт 14. Скрипт сам скомпилит, подпишет и установит apk на девайс.
  2. Запускаем приложение и видим, что теперь нам не предлагают ничего покупать, но окошко с процессом проверки висит и не закрывается.


Опять анализ


Теперь нам необходимо обнаружить и удалить код, показывающий ненужный нам диалог. Переключаемся на jd-gui и находим чуть выше следующие строчки:
  1. rogressDialog localProgressDialog = ProgressDialog.show(this, str1, str2, 1, 0);
  2. b = localProgressDialog;

Теперь надо найти их в MultiMountSDCardConfigure.smali. Вот они:
  1. ...
  2.     #invoke-static {p0, v0, v1, v6, v7}, Landroid/app/ProgressDialog;->show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZ)Landroid/app/ProgressDialog;
  3.  
  4.     #move-result-object v0
  5.    
  6.     #iput-object v0, p0, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardConfigure;->b:Landroid/app/ProgressDialog;
  7. ...

Закоменчиваем, сохраняем, компилим, устанавливаем, запускаем. Ура! Все работает. Но после непродолжительного тестирования мы понимаем что работает не совсем все, а именно функция авто-монтирования. Переключаемся на jd-gui, открываем MultiMountSDCardWidget$UpdateService и видим следующий кривой код:
  1.  
  2.    if (MultiMountSDCardWidget.b.booleanValue());
  3.     int j;
  4.     for (int i = 0; ; j = 1)
  5.     {
  6.       Boolean localBoolean = Boolean.valueOf(i);
  7.       RemoteViews localRemoteViews = MultiMountSDCardWidget.a(this, localBoolean);
  8.       Class localClass = MultiMountSDCardWidget.a;
  9.       ComponentName localComponentName = new ComponentName(this, localClass);
  10.       AppWidgetManager.getInstance(this).updateAppWidget(localComponentName, localRemoteViews);
  11.       return;
  12.     }
  13.  

Именно этот сервис отвечает за авто-монтирование. В самом начале мы видим какую-то проверку, в результате которой выполняется это самое монтирование. Код проверяет переменную b из главного активити, ту самую переменную, объявление которой мы закоментили, удаляя диалог. Так же мы поступим и с этой проверкой — закоментим ее к черту.
На сей раз открываем MultiMountSDCardWidget$UpdateService.smali и закоменчиваем следующие строчки:
  1. ...
  2. .method public onStart(Landroid/content/Intent;I)V
  3.     .locals 3
  4.  
  5.     #sget-object v0, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardWidget;->b:Ljava/lang/Boolean;
  6.  
  7.     #invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z
  8.  
  9.     #move-result v0
  10.  
  11.     #if-eqz v0, :cond_0
  12.  
  13.     const/4 v0, 0x0
  14.  
  15.     :goto_0
  16.     invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
  17.  
  18.     move-result-object v0
  19.  
  20.     invoke-static {p0, v0}, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardWidget;->a(Landroid/content/Context;Ljava/lang/Boolean;)Landroid/widget/RemoteViews;
  21.  
  22.     move-result-object v0
  23.        
  24.     new-instance v1, Landroid/content/ComponentName;
  25.  
  26.     sget-object v2, Lcom/rafoid/multimountsdcard/widget/MultiMountSDCardWidget;->a:Ljava/lang/Class;
  27.  
  28.     invoke-direct {v1, p0, v2}, Landroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
  29.  
  30.     invoke-static {p0}, Landroid/appwidget/AppWidgetManager;->getInstance(Landroid/content/Context;)Landroid/appwidget/AppWidgetManager;
  31.  
  32.     move-result-object v2
  33.  
  34.     invoke-virtual {v2, v1, v0}, Landroid/appwidget/AppWidgetManager;->updateAppWidget(Landroid/content/ComponentName;Landroid/widget/RemoteViews;)V
  35.  
  36.     return-void
  37.  
  38.     #:cond_0
  39.        
  40.     const/4 v0, 0x1
  41.  
  42.     goto :goto_0
  43. .end method
  44. ...

Запускаем и радуемся, что сэкономили целых 30 рублей на покупке этой полезнейшей программы.

Примечания


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

Вся информация представлена исключительно в ознакомительных целях. А так же для разработчиков, с целью улучшения программной защиты.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 59

    +6
    Взлом — как логичное продолжение цикла «Пишем первое приложение под андроид» на хабре :) Спасибо за статью!
      +2
      Именно. Хороший разработчик ведь должен знать как хорошо защитить своего ребенка. В этом ключе я склонен рассматривать статью. То, что наши приложения буду взламывать и экономить пол бакса, нужно принять как факт. Но неприятно же, когда ребенка крадут а потом насилуют.
        +5
        Хабраюзеры с детьми будут в шоке.
      0
      Отличная статья! Давно хотел что-нибудь на андроиде поисследовать, но не знал как подступиться :)
      а заголовки лучше без капса
        0
        Спасибо! Отличная информация, давно хотел попробовать но как-то руки не доходили самому искать тулзы :)
          +1
          А как же классическая приписка, что вся информация представлена в чисто ознакомительных целях, для разработчиков с целью улучшения защиты?)
            0
            Ну наверно эта статья писалась не для этих целях =)
            Хотя надо бы дописать.
              0
              И еще забыл подписать, что это не он ломал, а услышал все от незнакомого человека, когда ехал в метро.
              +17
              Я когда-то сам занимался крэкингом и слова WDasm, SoftICE, IDA pro для меня не пустые слова. Но когда я впервые попал в Android маркет, меня приятно удивили цены от 0.5$, да так, что я даже покупал несколько приложений, понимая, что рынок приложений под Android молод и своей небольшой лептой я хоть как-то помогаю развиваться этой замечательной платформе. Поэтому хорошо, конечно, что вы сэкономили целых 30 рублей и теперь вы на пути к сказочному богатству, но я не одобряю ваш материал в той форме подачи, которую вы использовали. Одно дело, когда программа заброшена и аналогов нет, стоит задача хоть как-то реанимировать её путём реверс-инжиниринга, другое дело, когда вы взламываете и так стоящий копейки софт, тем самым обрекаете его на прекращение разработки.
                0
                Мне кажется, вы сгущаете краски.
                В маркете все сделано для того, чтобы купить программу было проще, чем украсть. Кажется, даже возвращают на карту деньги, после удаления платной программы. Поэтому пиратство — удел немногих энтузиастов.
                Большинство программ (включая и Multi Mount SD-Card) имеют полнофункциональные бесплатные версии. Да и цена в 30руб намекает, что это скорее donate-форма поощрения авторского труда.
                Автору, да, думаю, следует убрать сарказм про взлом и халяву.
                  +2
                  Почитайте, пожалуйста, вот эту статью habrahabr.ru/blogs/android/109579/

                  Ребята из Белоруссии отдавали своё время, забивая на семью и досуг, разрабатывая приложение. Цена их приложения была $2.95 и они заработали 1 млн.руб. за год, из России покупатели составили 5%… И разработчики честно делают вывод, что лучше сразу ориентироваться на западный рынок, потому что у нас не привыкли ценить труд другого человека, даже если он просит за этот труд жалкие копейки. Я думаю пора менять ситуацию и побольше писать о том, как заработать и создать своё, чем о том, как гиена урвать бесплатно и убежать, ехидно смеясь. Я думаю, если вы были на 4PDA.ru, то видели какое количество ломанного софта там лежит и сколько людей, которые честно разработали свое приложение лишились своего куска хлеба из-за халявщиков.
                    +1
                    Прочитал, спасибо.
                    Ребята вполне логично говорят, что: «Программа стоит дешевле чашки кофе в приличном месте. Тот кто готов ходить на варез сайты, качать и устанавливать ручками обновления, делает это по каким-то другим соображениям, нежели ради экономии денег.»
                    Я согласен 100%-но, мой пост с той же смысловой нагрузкой.
                    Думаю, Вы понимаете, что редкий халявщик с 4pda — потенциальный покупатель. Сформулирую мысль кратко — человек, который привык покупать софт, купит его в любом случае. Человек, который никогда ничего не покупал, не покупает и не будет покупать -«как гиена урвать бесплатно и убежать, ехидно смеясь» или взломает или найдет аналог, но только не заплатит, даже $0,1.
                      0
                      По-моему, аудитория 4PDA — это бесполнезный балласт, они бы программу в любом случае не купили бы. Плюс нужно учесть неразвитость рынка платежей в России. Почти у каждого есть карточка, однако всё равно пользуются терминалами для оплаты мобилы вместо перевода с карточки (либо с сайта, либо через банкомат, либо через веб-банк).
                        +2
                        Поддержу. Я сам периодически заглядываю на 4пда в поисках нового софта, иногда ставлю что то. Но в итоге ничего из платного не прижилось, т.к. находились и бесплатные аналоги или понимал что притожение мне не нужно.
                        Было только два случая когда хотелось что то купить:
                        NFS, но на тот момент я не мог найти варианта покупки ни на маркете, ни на сайте ЕА, причем даже демо не нашлось. Но когда я понял что не играю просто удалил. В принципе согласен отдать EA рублей десять за пройденые три трассы :)
                        Второй случай Doom Wallpaper, и тут вот как раз начинаются гемморой с карточкой, надо сначала дотопать до банка, чтобы разрешили пользоваться в инете…
                        Ну и действительно есть часть софта без бесплатных вариантов, и тогда «пощупать», причем основательно, а не «вроде работает», можно только через левые источники.
                          0
                          Пользуюсь QIWI Visa Virtual, прицепить к Google Checkout труда не составило. Эта же карта привязана к PayPal. Если имеется к примеру $3 на счете, которые можно заиметь, пополнив счет QIWI в ближайшем терминале на 100 руб, то можно перепробовать большинство платных программ и если какие-то не понравятся — отказаться от них, Маркет это позволяет. Вот и всё, никакой варез и бесплатные аналоги не нужны, можно «пробовать» и платные проги абсолютно беспроблемно и официально.

                          Кому тяжко разобраться с QIWI, можно завести карту Связного для этих же целей, но топать все равно придется. Хотя, не вставая со стула, именно QIWI дает возможность завести карту в мгновенье ока.
                            0
                            Ну все равно, топать то придется :)
                            Я в курсе и про Киви и про другие сервисы, тут вопрос не в «не хочу» а в «пока лень, тем более ничего стоящего не попадалось еще, чтобы с этим морочиться». Ибо на попробовать создавать себе столько геммороя, особенно учитывая что, вроде как, период рефанда чуть ли не до 15 минут снизили, как то нет желания.
                          +1
                          Вот почему вы считаете, что карточка есть почти у каждого? Последняя статистика, что попадалась мне на глаза это порядка 60 млн. эмитированных карт российских банков, то есть даже не у каждого второго (не считая того, что у кого-то может и не одна карта быть). Плюс те что есть тоже зачастую к платежам через инет не приспособлены, особенно т. н. «зарплатные», проще сходить в банкомат, снять наличку, и внести её через терминал и перевести её на вебмани-яд (если в банкомате нет такой фичи)
                            0
                            У самой активной части населения (=потенциальная аудитория) карточки есть.

                            Неприспособленность зарплатных карточек — это часть проблемы мобильных платежей. Но сейчас куча карточек вполне себе допускают работу через интернет по умолчанию либо после заявления в банке.
                              0
                              Интересно, я не активная часть населения что-ли? На рынке ИТ товаров и услуг я в год трачу куда больше тех моих знакомых, у которых есть карты (зарплатные, по которым в инете не расплатится), пускай доходы у них в разы больше.
                          0
                          Живу в Беларуси, ломаную программу в 100 раз проще найти и скачать, чем за нее заплатить. Это не значит, что денег жалко, я бы с удовольствием купил несколько программ, но их разработчики не заботятся о том, чтобы её смог купить беларус. PayPal с нашей страной не работает. Бегать по разным банкам и делать международные карточки с надеждой, что их примет checkout — не выход.
                          Заводить кучу электронных кошельков в разных платежных системах и менять одни на другие с драконовскими комиссиями — тоже не хочется.
                          Пока не будет нормального способа покупки — никто покупать не будет.
                            0
                            QIWI представлен и в Беларуси, есть даже подразделение ОСМП-Беларусь

                            Достаточно на сайте завести кошелек, пополнить его в ближайшем QIWI-терминале хотя бы на 300-400 руб.
                            В поиске провайдеров вбить visa virtual, купить карту. Через несколько секунд придут CVV реквизиты карты и на ней будет уже заготовленная вами (те самые 300-400 руб.) сумма. Всё!

                            Дальше просто пытаетесь купить что-то в Маркете, система предложит зарегаться, проходите прямо со смартфона регистрацию и вводите свои CVV реквизиты. Готово, теперь вам остается только пополнять свою карту и покупать двумя кликами приложения.
                              0
                              А вот я, живя в Молдове, вообще не имею доступ к платному маркету, причём купив телефон у оператора. Так что даже и не куда прикручивать карточку. Знаю что есть всякие хитрости, чтобы заставить маркет думать, что я в него захожу из другой страны, но что бл@ть за сервис, которым я не могу пользоваться номарльно без напильника! Вот и качаю платные программы за неимением лучшего варианта.
                                0
                                Вас-то понять можно и, я надеюсь, вы тоже не будете обделены в будущем. Просто почему-то внедрение платного маркета происходит во всем мире поэтапно. Я говорю о тех, у кого возможность есть и причем вполне по карману, но они тратят больше времени и сил на взлом несчастной программы.
                            0
                            Необходимо отметить, что модераторы 4pda активно сотрудничают с авторами приложений — заключают с ними соглашение и активно выпиливают варез. Особенно заметно сотрудничество по разделам программ, авторы которых являются российские разработчики. Так что вы не найдете там пиратский Навител или софт от Abbyy, к примеру.
                              0
                              Соглашение на предмет чего? А вообще варез российских компаний вроде как активно выпиливал торрентсру, но его это не спасло.
                      • UFO just landed and posted this here
                          +1
                          Простите, а это законно?
                            +5
                            Нет. В соответствии со ст. 272 УК РФ за крекинг можно получить лишение свободы до 2 лет. При предварительном сговоре группы лиц — до 5 лет.
                              +2
                              Скачал, взломал, в тюрьму. Романтика!
                                +2
                                Получается, что nd0ut сознался в преступлении, и описал по шагам, как он его совершил. Зачем он это сделал?
                                  0
                                  Преступления по этой статье труднодоказуемы, и осуждали по этой статье только за создание вирусов.
                              –2
                              Ты сэкономил 30 рублей а нагадил хорошим людям на 300000.
                              Земля она круглая — икнётся ещё.
                                +5
                                Не думюа что после прочтения статьи 10 000 человек скачают эту программу и сломают :)

                                Лично для меня это чисто ознакомительная информация для общего развития,
                                а для тех кто дейсвительно ломает программы и выкладывает их на скачку — врядли они нашли тут что-то новое для себя ;)
                                  +1
                                  Я вот например не знал о существовании замечательной проги, а теперь задумываюсь не купить ли мне ее за 30 рублей. Так что это вопрос еще нагадил или пропиарил.
                                  +1
                                  =) этой статьей мы все в сговоре=) предварительная договоренность налицо.
                                  //humor
                                    +1
                                    Я вот тоже написал программку, выложил на продажу в Маркет вообще без всякой защиты, за один бакс.
                                    Но APK быстро добрые люди скачали-опубликовали.
                                    Сейчас заморачиваюсь с обфускатором и LVL.
                                    По теме статьи — ломать APKшки очень просто, намного интереснее придумать какую-то защиту…
                                      +2
                                      Опыт подсказывает, что самая лучшая защита, это еженедельные обновления с добавлением функционала и небольшими изменениями в схеме валидации.
                                        0
                                        Спасибо, я примерно так и собираюсь делать.
                                        Немного буду переделывать LVL и дополнительные проверки в разных местах. С каждой новой плюшкой ;)
                                          0
                                          Можете еще сделать так:
                                          если не пройдена проверка — показывать… рекламу. Глядишь и компенсирует что-нибудь :)
                                            0
                                            Спасибо, я тоже об этом думал.
                                            Но я не люблю рекламу :(
                                              0
                                              Я имею ввиду, ни смотреть, ни показывать.
                                              0
                                              Сомнительно. Пользователь, скачавший взломанное приложение, в коммерческом смысле потерян для данного приложения если не навсегда, то очень надолго.

                                              Если смотреть в сторону компромиссов, удачным был вариант, побуждающий пользователя приобрести приложение при каждом значимом действии (добавление/изменение/удаление записей, переход в другое окно и т.д.). Причём, именно так, без всяких западлянок. Видимо, пользователи это оценили.
                                                0
                                                Не раз и не два покупал приложения (правда для PC), которые сначала «тестил» взломанными. Хотя кавычки зря поставил, я их действительно тестил, насколько успешно они решают мои задачи и насколько отвечают моим привычкам в плане юзабилити. Удалено не одна сотня, куплено с десяток (если игры не считать). Единственная программа, которой я пользовался очень долго, но так и не купил — WinRAR — его я даже не ломал, просто иногда жал «Позже» (или как там было), после истечения триала.
                                              0
                                              Интересно, а можно свой class loader сделать и часть кода грузить из него, который будет в виде набора байтов для того кто пользуется этим декомпилятором… можно еще предварительно байты помешать перед загрузкой. Можно кусочек native code добавить наверно. Вообще защиты не существует, можно только затруднить работу крэкера.
                                                0
                                                Можно даже сделать шифрование данных на CRC своих классов, получаемое с помощью загружаемого модуля, но… кто знает, на каком этапе вас ломанут.
                                                  0
                                                  Мне кажется что CRC как-раз вырезается на раз. А вот загрузить и поменять массив данных в котором часть ваших классов и проверка на покупку — сложнее.В место CRC лучше AES в native с последующей загрузкой классов через JNI. Ломается легко, но для этого недостаточно статического анализа. Нужно больше телодвижений сделать. А когда сломано в процессе выполнения, потом нужно еще все собрать в apk, чтобы это ещё заработало.
                                          0
                                          Многие разработчики сходятся во мнении что под андроидом гораздо больше денег приносит реклама в приложениях чем их продажа.
                                          Поэтому например те же Angry Birds и SliceIt под андроид бесплатны.
                                            0
                                            Ну конечно, если ты в топе и имеешь 15-20к закачек в сутки — вполне может быть. И только за счёт того, что на 1000 кликнувших прийдёт один, купивший за доллар.

                                            В прочих случаях приходится давить на поощрять пользователя нажать на баннер и получить доп.функционал.
                                              0
                                              Кстати да в SliceIt как раз поощеряют — за нажатие на баннер дают подсказки.
                                              Помоему довольно удачная модель монетизации.
                                            0
                                            Я сходил по той ссылке и понял, что 39 найденных пиратов (сколько там зарегистрированных пользователей сервера?) должны навести всех нас на две мысли:

                                            1) Не стоит в качестве основного сервиса брать уродов, не умеющих принимать пластиковые карточки. ОСОБЕННО если ваш софт продаётся за карточки!
                                            2) Выбор области разработки с учётом полной опоры на сервер, который требует жёсткой авториации и собственный биллинг — это супер-к00л! Юзер, меющий свой баланс, не будет его расшаривать на весь интернет. А даже если и расшарит — то сервис в любом случае будет оплачен.
                                              0
                                              Поставьте рекламу. В отличии от айфона-аппстора, это основная модель монетизации андроид-приложений (а не плата за установку). Ведь в андроид уже встроены без всяких рутов/джейлбрейков удобные механизмы для распостранения, обмена и установки приложений в обход маркета. Это не хорошо и не плохо — это просто именно то, что отличает андроид от других платформ.

                                              Посмотрите на соотношение платных и бесплатных приложений в маркете и в магазинах для других мобильных платформ. Наглядный пример — Angry Birds: на айфоне монетизируются через аппстор, а на андроиде через рекламу.
                                              0
                                              Что-то не понял чем был получен первый листинг, который с «m localm1 = new m(this, localv, „MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg1...“);»?
                                                0
                                                Это код из класса MultiMountSDCardConfigure, который в classes.dex.dex2jar.jar, который сгенерил dex2jar.
                                                Вот скриншот, тык.
                                                0
                                                А, это декомпиленный .class получается. А то я подумал, что есть какой-то приличный декомпилер напрямую из dex.
                                                  0
                                                  при наличии приличного class->java декомпайлера этого вполне достаточно
                                                  0
                                                  основная пичалька с обновлениями, в таком случае
                                                    0
                                                    Хотел попробовать какой либо иной apk, но вывод в том, что найти не взломанный apk куда сложнее чем взломанный.
                                                      +1
                                                      На мой взгляд хорошая статья, показывать как в первую очередь будут Вас ломать и примерно понятно в какую сторону думать на предмет защиты от этого.

                                                      Only users with full accounts can post comments. Log in, please.