С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
MegaSinner
91 / 87 / 3
Регистрация: 09.04.2010
Сообщений: 746
#1

Как защитить приложение? - Программирование Android

23.02.2013, 16:03. Просмотров 3870. Ответов 17
Метки нет (Все метки)

*.apk без проблем открывается винраром, *.dex, содержащий весь код, также легко декомпилируется с помощью соответствующего софта. Как засекьюрить код? Есть ли какие-то обфускаторы для этого? Слышал о ProGuard, но не понян, как с ним работать..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2013, 16:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как защитить приложение? (Программирование Android):

Как защитить приложение - Программирование Android
Доброго времени суток! Пишу диплом тесно связанный с безопасностью. Функциональную часть моего андроид приложения я уже реализовал и...

Как защитить приложение от распространения - Программирование Android
Как это лучше всего сделать. Может привязка к ID устройства, но тогда надо заранее перед компиляцией знать его. Или может серийный номер,...

Как защитить intentService от чистильщика? - Программирование Android
Добрый день, Собственно вопрос в названии темы. Есть фоновый сервис, который при первоначальном запуске приложения делает довольно...

Защитить переменную класса от записи - Программирование Android
Имеется класс: public static class MyClass { int my_field; public void setMyField(int value) { my_field = value; ...

Допиленное узкоспециализированное приложение или неповоротливое многофункциональное приложение? - Программирование Android
Если вопрос про "что нужно знать?" висит, то и этот должен зайти. Появилась дилемма при выборе идеи для приложения, хочу узнать Ваше...

Узнать приложение которое запустило моё приложение - Программирование Android
Приветствую всех! Помогите разобраться. Есть ли возможность узнать, что за приложение запустило моё приложение? т.е. к примеру мою...

17
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
23.02.2013, 17:43 #2
Цитата Сообщение от MegaSinner Посмотреть сообщение
Слышал о ProGuard, но не понян, как с ним работать..
значит придётся разобраться потому как именно он используется для защиты от декомпеляторщиков
вы создаёте тхт файл и в нём описываете конфиги. примеры как это делать есть на сайте прогуарда. там куча приемером на все случаи жизни. потом файл добавляете к проекту и указываете к нему путь.
0
Vladimirys
309 / 206 / 25
Регистрация: 16.01.2010
Сообщений: 589
24.02.2013, 17:55 #3
А чего там понимать то. Он уже встроен. Там все просто до безобразия. И после безобразия - тоже
Что бы включить "стражника" - нужно прописать его местонахождения в файле - project.properties
У меня так:
proguard.config=C:/android-sdks/tools/proguard/proguard-android.txt: proguard-project.txt
Если в приложение встроена реклама то в файле - proguard - project .txt дописать -dontwarn com.google.ads.**
Иначе может вылетать с ошибкой.
Все, теперь когда мы жмем Export Signed Aplication Pacage
Происходит обфускация а в паке проекта появляться пака proguard.
2
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
24.02.2013, 19:10 #4
Цитата Сообщение от Vladimirys Посмотреть сообщение
proguard.config=C:/android-sdks/tools/proguard/proguard-android.txt: proguard-project.txt
ну это если на все прилаги один и тот же конфиг
0
tester3000
4 / 4 / 0
Регистрация: 19.10.2012
Сообщений: 33
24.02.2013, 20:34 #5
ProGuard переименовывает название методов в коде и т.д. это лишь немного затрудняет процесс реверсинга.
ИМХО толку от него нет если Jad, jd-gui и др. например не полностью или не правильно декомпилируют метод всегда можно глянуть smali код.
0
Vladimirys
309 / 206 / 25
Регистрация: 16.01.2010
Сообщений: 589
26.02.2013, 16:08 #6
Цитата Сообщение от tester3000 Посмотреть сообщение
ProGuard переименовывает название методов в коде и т.д. это лишь немного затрудняет процесс реверсинга.
Может быть, все таки пруфчика добавите?
Вот к примеру с офф сайта:

ProGuard can:
Evaluate constant expressions.
Remove unnecessary field accesses and method calls.
Remove unnecessary branches.
Remove unnecessary comparisons and instanceof tests.
Remove unused code blocks.
Merge identical code blocks.
Reduce variable allocation.
Remove write-only fields and unused method parameters.
Inline constant fields, method parameters, and return values.
Inline methods that are short or only called once.
Simplify tail recursion calls.
Merge classes and interfaces.
Make methods private, static, and final when possible.
Make classes static and final when possible.
Replace interfaces that have single implementations.
Perform over 200 peephole optimizations, like replacing ...*2 by ...<<1.
Optionally remove logging code.

Добавлено через 8 минут
Это существенно затрудняет реверс. А если, использовать имена переменных, без смысла - то делает почти невозможным. Делает бесполезным, возню с более чем половиной приложений на маркете. П
0
tester3000
4 / 4 / 0
Регистрация: 19.10.2012
Сообщений: 33
28.02.2013, 13:42 #7
Vladimirys, если интересно почитай статьи посвященные reverse engeniring под Android. Сколько читал и сам пробовал небольшие приложения реверсить проблем с ProGuard у меня и у других не возникло

пример реверса каких-то обоев:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
final class a
    implements android.preference.Preference.OnPreferenceClickListener
{
 
    a(LiveWallpaperSettings livewallpapersettings)
    {
        a = livewallpapersettings;
        super();
    }
 
    public final boolean onPreferenceClick(Preference preference)
    {
        String s1 = a.getPackageManager().getPackageInfo(a.getPackageName(), 0).versionName;
        String s = s1;
_L2:
        View view = a.getLayoutInflater().inflate(0x7f030000, null);
        ((TextView)view.findViewById(0x7f0a0000)).setText(Html.fromHtml(a.getString(0x7f07000c).replaceAll("\\{VersionName\\}", s)));
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(a.a);
        builder.setIcon(0x7f020005).setTitle(0x7f070005).setView(view).setPositiveButton(0x104000a, new b(this));
        builder.show();
        return false;
        android.content.pm.PackageManager.NameNotFoundException.namenotfoundexception;
        s = "";
        if(true) goto _L2; else goto _L1
_L1:
...
Если какой-то участок не декомпилировался например:
Java
1
2
3
 public final void onTouchEvent(MotionEvent param1) {
      // $FF: Couldn't be decompiled
   }
Используем др. декомпилятор если и это не помогло смотрим smali код
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.method public final onTouchEvent(Landroid/view/MotionEvent;)V
    .locals 9
 
    const/4 v8, 0x0
 
    const/4 v7, 0x1
 
    const/4 v6, 0x0
 
    invoke-super {p0, p1}, Landroid/service/wallpaper/WallpaperService$Engine;->onTouchEvent(Landroid/view/MotionEvent;)V
 
    invoke-virtual {p1}, Landroid/view/MotionEvent;->getAction()I
 
    move-result v0
 
    and-int/lit16 v0, v0, 0xff
 
    packed-switch v0, :pswitch_data_0
 
    :goto_0
    :pswitch_0
    return-void
 
    :pswitch_1
    invoke-virtual {p1}, Landroid/view/MotionEvent;->getX()F
 
    move-result v0
 
    invoke-virtual {p1}, Landroid/view/MotionEvent;->getY()F
 
    move-result v1
...
Добавлено через 9 минут
Конечно большие проекты сложнее реверсить (если конечная цель переписать с нуля проект по этому коду или сделать программу не жадной) но если мне например нужно узнать как разработчик реализовал определенный метод в проекте ProGuard мне не мешает.
0
Vladimirys
309 / 206 / 25
Регистрация: 16.01.2010
Сообщений: 589
28.02.2013, 23:46 #8
Так а в чем смысл, реверсить "Hello World". Его проще написать самому. Оно понятно, если в приложении 2 метода и 2 переменных, там особо их "не замешаешь". Но их особо никто и не скрывает.
0
tester3000
4 / 4 / 0
Регистрация: 19.10.2012
Сообщений: 33
01.03.2013, 08:16 #9
Vladimirys, смысла реверсить "Hello World" нет. Я просто показал тебе как обычно реверсят определеный метод и я не считаю что ProGuard существенно затрудняет реверс приложений под Андройд, можно взять большой проект с ProGuard и найти то что нужно и понять как устроен определеный метод все засивит для чего тебе надо реверсить чужую программу.

Да если представить например что все Java исходники андройда будут накрыты ProGuard вскрыть и найти нужный метод будет очень долго но возьми например топовые приложения в маркете размер обычно в районе ~5-20 MB (игры и т.п. не в счет там целая куча всякого рода графики и видео) думаю что найти и понять как устроен интересующий тебя кусок Java кода не проблема.
0
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
01.03.2013, 10:47 #10
лично я не вижу смысла во вскрытии прилаги ради того что бы узнать как устроен кусок кода. 95% всех решений лежат на поверхности интернетов. а даже если что то не понятно - так лучше проконсультироваться с кем и реализовать самому (заодно прокачаешся).
знаю одну ситуацию - когда используешь закрытую либу и пытаешся разобраться как там что устроено если доки не помогают.
ну это если опустить вариант - использование декомпилера для поиска уязвимостей и кряканья прилаги (и тп.)

я не знаю как было раньше но пологаю что сейчас прилагу не крякнешь потому как появилась новая фича - лицензирование
0
tester3000
4 / 4 / 0
Регистрация: 19.10.2012
Сообщений: 33
01.03.2013, 15:48 #11
Цитата Сообщение от YAUHEN Посмотреть сообщение
я не знаю как было раньше но пологаю что сейчас прилагу не крякнешь потому как появилась новая фича - лицензирование
А я не знаю как сейчас но примерно месяца 2-3 назад это успешно обходили путем кастрации и патча этого самого лицензирования из приложения
0
Kira_the_first
7 / 7 / 1
Регистрация: 23.10.2016
Сообщений: 78
Завершенные тесты: 1
30.11.2016, 17:39 #12
Цитата Сообщение от MegaSinner Посмотреть сообщение
Как засекьюрить код?
Смотря какую защиту вы желаете приобрести.
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
30.11.2016, 17:52 #13
А например если я разрабптываю игру то как сделать защиту от патчей? Чтобы ни LuckyPatcherом ни Freedomом ее нельзя было взломать? Что для этого в apk нужно добавлять? Что использовать какие инструменты?
1
Kira_the_first
7 / 7 / 1
Регистрация: 23.10.2016
Сообщений: 78
Завершенные тесты: 1
07.12.2016, 17:41 #14
Цитата Сообщение от yura91 Посмотреть сообщение
Чтобы ни LuckyPatcherом ни Freedomом ее нельзя было взломать? Что для этого в apk нужно добавлять? Что использовать какие инструменты?
Компания Glu.Inc защитила себя от этого(это я вам как взломщик говорю), врядли они вам откроют коммерческую тайну бесплатно(защита от изменения и биллинг + антипатч), а гамелофт ввела систему банов, вечно просит обновления, для этого нужен инет, с инета проверили подпись и в бан. Freedom уже на современных версиях не работает. Что могу посоветовать: сделать цену поменьше(на самую большую покупку сделать 10грн например), впадло будет ломать за такую низкую цену; премиум-версии приложения выкладывать в гугл-плей отдельно, а не заставлять юзера её покупать; сделать онлайн-игру, где данные будут и хранится и генерироватся на сервере; юзать криптосистемы(не спрашивайте как, любой код для криптования который я нахожу в интернете - нерабочий, не могу скомпилить).
0
vxg
08.12.2016, 12:01     Как защитить приложение?
  #15

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2016, 12:01
Привет! Вот еще темы с ответами:

Как оптимизировать приложение? - Программирование Android
При загрузке apk-файла в google play выдает ошибку==&gt;Архив APK-файла не оптимизирован. Запустите инструмент оптимизации, а затем повторите...

Как закрывать приложение? - Программирование Android
Заранее извеняюсь за глупый вопрос, но чет не могу найти ответа, или не так задаю вопрос гуглу)) как закрыть приложение? какой метод...

Как запустить приложение? - Программирование Android
Здравствуйте, помогите разобраться пожалуйста, я скачала JDK, Eclipse, и создала первое приложение, Hello, но не понимаю как же мне...

Как привязать приложение к ВК? - Программирование Android
Помогите пожалуйста,мне нужно что-бы приложение делало пост автоматически. Скиньте весь код если не трудно.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
08.12.2016, 12:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.