Русский / Russian English / Английский

Сейчас на форуме:
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Основной форум —› Взлом Android приложений
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 38 . 39 . >>
Посл.ответ Сообщение

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 12 сентября 2011 12:37 · Поправил: 25 июня 2016 11:59 SaNX New!
Цитата · Личное сообщение · #1

В теме обсуждаются вопросы взлома под андроид и соответствующие тулзы.
ТУТОРИАЛЫ:
--> Тутор от chelpa<--
--> От аффтора antilvl<--
--> дебаг .so<--

ТУЛЗЫ:
JEB
ApkAnalyser
--> Android Reverse Engineering (A.R.E.) <--
--> Apktool <--
--> Smali/baksmali <--
--> APKRecovery <--
--> Dex2Jar <--
--> APKInspector <--
--> Lucky Patcher 1.2.0 <--
--> Crack Assist 0.3 <--
--> ART <--
--> JD-GUI <--
--> DexInspector <--
--> Android unpacker <--
GikDbg


В аттаче fernflower, очень годный жава декомпилер.
{ Атач доступен только для участников форума } - fernflower.jar

| Сообщение посчитали полезным: 4kusNick, WmLiM, gsx3000, Maximus, CoolMax_86, Rustem, Oott, streit, t0ShA, BAHEK, sooqa, Ara, VodoleY, vden, Thegodofviruses, SDFnik, Soso, ff0h, RAMZEZzz, quency, XroM_N70, Alinator3500, Coderess, samtehnik, Isaev, dgyst, ALSSL, dosprog, omeh2003, d0wn, ELF_7719116, Bad_guy


Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 3 ноября 2011 12:35 New!
Цитата · Личное сообщение · #2

7.1.0 для HTC Desire S. найтбилды исправно ставлю - так до сих пор 2.3.7 льется.

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 4 ноября 2011 04:56 · Поправил: chelpa New!
Цитата · Личное сообщение · #3

В общем, так сложилось, что две игры с одинаковой защитой мне так и не поддаются. Если у кого-нибудь будет время, буду благодарен, если поисследуете, очень интересует решение и метод, которым к нему придёте.
игры уже выкладывал в сообщениях раньше AftermatchXD и Spirit. Spirit мной частично взломан, он уже не вылетает в маркет и не пытается себя удалить, но до сих пор не записывает результаты в таблицу рекордов и чем дольше играешь, тем больше замедляется, где-то утечка памяти или лавинообразно процессы новые создаются.
******************
В Spirit не получается рестартануть приложение, чтобы дебаджить с самого начала, может быть кто-нибудь еще методы знает?
Или как вариант такой вопрос, как запустить установленный апк из Linux консоли прямо на телефоне? в свое время где-то находил как парень запускал приложение с помощью какой-то утилиты из adb.

Есть консольная команда am (консоль на андроиде я имею в виду). С её помощью можно было прописать строку запуска приложения в IDA, но пока не получается запустить com.jakyl.spirithd
Я пробовал так
am start com.jakyl.spirithd
am start -w -e package com.jakyl.spirithd
am instrument -w -e package com.jakyl.spirithd
и еще некоторые варианты, но так и не запустилось.

********************************

нашел способ как остановить либу при старте, странно, что раньше не додумался создал прыжок сам на себя, при дебаге просто его дальше пускаю

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 6 ноября 2011 11:52 · Поправил: SaNX New!
Цитата · Личное сообщение · #4

Кто-нибудь пробовал ломать Talking Tom2 Full (--> Link <--)?
Там есть две функи Allow и Dontallow. Так вот, после правки LVL, чтоб вызывалось Allow, кэш качает и распаковывает, но прога отваливается по таймауту (примерно через 55 секунд после запуска). В логах DDMS появляется запись "process talkingtom2 died". Пока на этом встрял, хз чо делать дальше Какой командой завершают процессы в андроиде?

Ранг: 617.3 (!)
Статус: Участник

Создано: 6 ноября 2011 13:11 · Поправил: Vovan666 New!
Цитата · Личное сообщение · #5

SaNX пишет:
Какой командой завершают процессы в андроиде?

Code:
  1. public void onDestroy() {
  2.     super.onDestroy();
  3.  
  4.     /*
  5.      * Notify the system to finalize and collect all objects of the
  6.      * application on exit so that the process running the application can
  7.      * be killed by the system without causing issues. NOTE: If this is set
  8.      * to true then the process will not be killed until all of its threads
  9.      * have closed.
  10.      */
  11.     System.runFinalizersOnExit(true);
  12.  
  13.     /*
  14.      * Force the system to close the application down completely instead of
  15.      * retaining it in the background. The process that runs the application
  16.      * will be killed. The application will be completely created as a new
  17.      * application in a new process if the user starts the application
  18.      * again.
  19.      */
  20.     System.exit(0);
  21. }


finish();

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 6 ноября 2011 13:18 · Поправил: SaNX New!
Цитата · Личное сообщение · #6

Нету здесь System.Exit. Ondestroy есть, но что-нить типа ->Destroy нету тоже. Финиш есть, но походу это тупик, т.к. вызывается дохера откуда

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 10 ноября 2011 00:05 New!
Цитата · Личное сообщение · #7

Всё. Spectral Soul доломал. Оказалось, что идентификатор устройства проверялся по чек сумме составленной на MAC адрес устройства.

Теперь родился такой вопрос: как заставить прогу считать себя лицензионной по LVL без изменения кода самого пакета, воздействуя лишь на параллельный процесс DRM защиты в самой системе андроида? К какому процессу нужно аттачиться ИДОЙ? И в какой экспорт функции лезть для перехвата? Никто не озадачивался такой проблемой?

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 10 ноября 2011 09:07 New!
Цитата · Личное сообщение · #8

chelpa
дык далвик же, ида идет лесом.

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 10 ноября 2011 10:53 · Поправил: chelpa New!
Цитата · Личное сообщение · #9

но далвик же обращается к системному процессу запущенному на аппарате и уже тот ему отвечает лицензия эта прога или нет. Или я что то упустил?

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 10 ноября 2011 10:55 New!
Цитата · Личное сообщение · #10

Далвик же байткод. Оно может и общается через свою ВМ. Только как ты идой будешь дебажить байт-код? Это как визуалбэйсик в пикоде дебажить отладчиком - можно, но пиздец как безперспективно

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 10 ноября 2011 11:27 · Поправил: chelpa New!
Цитата · Личное сообщение · #11

ладно, забил, проблема номер два.... Обновил устройство с android 2.2.1 до 2.3.5 теперь не ребейзит при подключении Идой и пишет ошибку: Failed to find data segment of /system/bin/linker

если заменить linker от версии 2.2.1 попрет? или устройство начнет зависать? и выложите кто-нибудь свой linker от работающей версии плиз.

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 10 ноября 2011 12:37 · Поправил: SaNX New!
Цитата · Личное сообщение · #12

chelpa
хуй вот, не идет отладка на версиях выше 2.3, как ни ебись. решается только новым андроид_сервером, который в иде 6.2 идет, на сайте написано, что ильфак поправил этот глюк. только вот этого самого сервера в паблике нет.

BUGFIX: multithreaded Android applications could not be debugged on some devices

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 10 ноября 2011 13:12 New!
Цитата · Личное сообщение · #13

а ты файл linker от версии ниже 2.3 записывал вместо того, что там?

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 10 ноября 2011 13:14 New!
Цитата · Личное сообщение · #14

У меня другая ошибка была, чото типа could not set shbp.

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 10 ноября 2011 13:24 · Поправил: chelpa New!
Цитата · Личное сообщение · #15

кинь мне свой файл linker
очень надо, только от девайса где ребейзит

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 10 ноября 2011 13:56 · Поправил: SaNX New!
Цитата · Личное сообщение · #16

chelpa
у меня нету такого девайса. у меня был самс гэлэкси эйс, на нем ведроид 2.2, там дебажило. но тело сдохло, теперь у меня НТС Дезайр С, на нем 2.3.7 и не дебажит с этой версией андроид_сервера.

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 10 ноября 2011 16:53 · Поправил: chelpa New!
Цитата · Личное сообщение · #17

всё, решил проблему.... нужно было заменить файл app_process от прошивки с версией 2.2.1 и всё заработало на 2.3, правда я и linker еще оттуда пихнул в туже папку /system/bin/

тут оба файла http://narod.ru/disk/31132421001/ida_for_2.3.x.rar.html

после замены надо перезагрузить устройство, правда у меня устройство armv7 и файлы могут быть под эту архитектуру, но есть шанс, что и на других заработают.

**********************************************************
С aftermatch продвинулся похоже... похоже защита построена на подписи пакета... либа проверяет кем подписан пакет, и если не их фирма то работает в демо режиме. Но пока не проверено, это я для тех, кто может быть тоже изучает.
***********************************************************
ураааааа! я aftermatch сломал нашел чек суммы вот ломаный --> Link <--

Spirit сломался по аналогии с aftermatch-ем SanX ты кота доломал?

| Сообщение посчитали полезным: OttoFix


Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 15 ноября 2011 11:56 · Поправил: chelpa New!
Цитата · Личное сообщение · #18

SaNX пишет:
Нету здесь System.Exit. Ondestroy есть, но что-нить типа ->Destroy нету тоже. Финиш есть, но походу это тупик, т.к. вызывается дохера откуда


в общем в коте в этом, проверка crc идет, я его сломал. ЗАйди в либу libSoundtouch001.so и найди там строку getCRC. В этом месте он считывает crc classes.dex. Ну а дальше я думаю ты сам врубишься. Там же неподалёку найдешь и подпрограмму с явным названием exit, её надо избегать при проверках Могу выложить уже сломанный вариант.

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 15 ноября 2011 13:34 New!
Цитата · Личное сообщение · #19

chelpa
чото нихуа не вкурил:

Code:
  1. .text:0001DA44                 PUSH            {LR}
  2. .text:0001DA46                 SUB             SP, SP, #0x1C
  3. .text:0001DA48                 STR             R0, [SP,#0x20+var_14]
  4. .text:0001DA4A                 STR             R1, [SP,#0x20+var_18]
  5. .text:0001DA4C                 STR             R2, [SP,#0x20+var_1C]
  6. .text:0001DA4E                 LDR             R3, [SP,#0x20+var_1C]
  7. .text:0001DA50                 STR             R3, [SP,#0x20+var_C]
  8. .text:0001DA52                 LDR             R0, [SP,#0x20+var_C]
  9. .text:0001DA54                 BL              _ZN10soundtouch10SoundTouch5setupEP8_jobject ; soundtouch::SoundTouch::setup(_jobject *)
  10. .text:0001DA58                 ADD             SP, SP, #0x1C
  11. .text:0001DA5A                 POP             {PC}


оно вызываеццо
Code:
  1. .method public static setup(Ljava/lang/Object;)V
  2.     .locals 0
  3.     .parameter "arg0"
  4.  
  5.     .prologue
  6.     .line 115
  7.     invoke-static {p0}, Lcom/outfit7/soundtouch/JSoundTouchJNI;->SoundTouch_setup(Ljava/lang/Object;)V
  8.  
  9.     .line 116
  10.     return-void
  11. .end method
  12.  


но оно же нихуа не возвращает. Куда оно сохраняет CRC?


Ранг: 196.6 (ветеран)
Статус: Участник

Создано: 15 ноября 2011 16:43 New!
Цитата · Личное сообщение · #20

вместо того, чтобы править проверки crc, проще подкинуть в apk оригинальный .dex, с другим именем, подменить это имя в том месте, где .dex открывают, и пусть себе считает crc на здоровье

| Сообщение посчитали полезным: SaNX


Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 15 ноября 2011 22:21 New!
Цитата · Личное сообщение · #21

Ну кому как проще, можно конечно и подсунуть оригинальный, а толку? Работы ровно столько же, crc сумма в одном месте считывается, и то я её заменил на свою и со своей же сравнивал)) Занимает пять минут правки. К тому же чаще считают crc не classes.dex, а всего пакета апк целиком + отдельно crc библиотеки. Я всё-таки за универсальные способы, без лишнего мусора в апк.

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 15 ноября 2011 22:23 New!
Цитата · Личное сообщение · #22

chelpa
покажи на примере этой игры, как искал и где патчил, а то я что-то не вкуриваю нихера

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 16 ноября 2011 09:06 · Поправил: chelpa New!
Цитата · Личное сообщение · #23

ок, распишу, что да где. Пока просто времени мало, сегодня день рождения и дня на 4 я выпаду из виртуальной жизни, но потом всё покажу с ходом мысли и как допёр.

Вот пока взломанные варианты, чтобы посмотреть где поправил. --> Link <--

**************************************

Попробую с работы по быстрому написать как ломал вкратце:

Итак, как фиксить LVL от гугля все в курсе, на этом не останавливаюсь. Пофиксили LVL и смотрим на поведение программы. Запускается, работает, ничего не говоря вылетает. Варианта как это делается (мне известных) три:

1. либо проверяют crc какой либо части паки или всего пакета апк.
2. либо проверяют какой подписью подписан пакет и если компания не их, то не лицензия.
3. запрос лицензии из либы по интернету либо с того же гугля, либо со своего сайта.

С подписью прием в некотором смысле оригинальный и встречался один раз, потому решил, что банально CRC проверяют, а делают это обычно из библиотек, так как поправить smali в разы проще, чем либу, хотя иногда тут можно поспорить. Библиотек в нашем коте две: libsoundtouch001.so и libffmpeg001.so.
Приложив мозг я оставил в покое библиотеку libffmpeg.so , потому что из названия ясно, что она видео гонять должна и прочее, хотя и там могло быть что-то, но с этим я бы разбирался потом.

Открыв библиотеку libsoundtouch001.so в IDA, что же там искать? Самое простое поискать по слову "crc" в закладке Strings. Ищем и находим там getCRC. Дважды щелкаем по ней и попадаем сюда:

Code:
  1. data:811470C0                                         ; .text:off_811101A4o
  2. .rodata:811470D7                 ALIGN 4
  3. .rodata:811470D8 aGetcrc         DCB "getCrc",0          ; DATA XREF: soundtouch::SoundTouch::setup(_jobject *)+162o
  4. .rodata:811470D8                                         ; .text:off_811101A8o
  5. .rodata:811470DF                 ALIGN 0x10
  6. .rodata:811


щелкаем по Data Xref и попадаем:

Code:
  1. .text:8111012C                 LDR             R3, =(aGetcrc - 0x81110132)
  2. .text:8111012E                 ADD             R3, PC  ; "getCrc"
  3. .text:81110130                 MOV             R2, R3
  4. .text:81110132                 LDR             R3, =(aJ - 0x81110138)
  5. .text:81110134                 ADD             R3, PC  ; "()J"
  6. .text:81110136                 BL              _ZN7_JNIEnv11GetMethodIDEP7_jclassPKcS3_ ; _JNIEnv::GetMethodID(_jclass *,char const*,char const*)
  7. .text:8111013A                 MOV             R3, R0
  8. .text:8111013C                 STR             R3, [SP,#0x30+var_18]
  9. .text:8111013E                 LDR             R3, =(_ZN7JObject3envE_ptr - 0x8114A350)
  10. .text:81110140                 LDR             R3, [R4,R3] ; JObject::env
  11. .text:81110142                 LDR             R3, [R3]
  12. .text:81110144                 MOV             R0, R3
  13. .text:81110146                 MOV.W           R0, #0x11
  14. .text:8111014A                 MOV.W           R1, #0
  15. .text:8111014E                 LDR             R3, =(unk_8114A578 - 0x81110154)
  16. .text:81110150                 ADD             R3, PC
  17. .text:81110152                 STRD.W          R0, R1, [R3]
  18. .text
  19.  


тут видно что сразу за ней вызывается _ZN7_JNIEnv11GetMethodIDEP7_jclassPKcS3_ ; и как раз её результатом скорее всего и будет нужный нам CRC. Но где же будет результат? Чаще всего он в R0 после выполнения, а как мы видим далее R0 записывается в некую переменную unk_8114A578.

Ок посмотрим где потом эта переменная используется, дважды кликнув по ней и посмотрев Xref:

Code:
  1. .bss:8114A578 unk_8114A578    DCB 0x11                ; DATA XREF: soundtouch::SoundTouch::setup(_jobject *)+12o
  2. .bss:8114A578                                         ; soundtouch::SoundTouch::setup(_jobject *)+184o
  3. .bss:8114A578                                         ; .text:off_81110164o
  4. .bss:8114A578                                         ; .text:off_811101B0o
  5. .bss:8114A578                                         ; sub_811101B4+10o
  6. .bss:8114A578                                         ; .text:off_811101E4o
  7. .bss:8114A578                                         ; sub_811101E8+10o
  8. .bss:8114A578                                         ; .text:off_81110220o
  9. .bss:8


ок, сходим куда-нить, чтобы понять правы мы или нет, к примеру сюда sub_811101E8+10 (я на самом деле тыкался везде как раненный лось) и что мы там видим:

Code:
  1. .text:811101F6                 LDR             R3, =(unk_8114A578 - 0x811101FC)
  2. .text:811101F8                 ADD             R3, PC
  3. .text:811101FA                 LDRD.W          R0, R1, [R3]
  4. .text:811101FE                 LDR             R3, =(__data_start - 0x81110204)
  5. .text:81110200                 ADD             R3, PC
  6. .text:81110202                 LDRD.W          R2, R3, [R3]
  7. .text:81110206                 CMP             R0, R2
  8. .text:81110208                 BNE             loc_8111020E
  9. .text:8111020A                 CMP             R1, R3
  10. .text:8111020C                 BEQ             loc_81110216
  11. .text:8111020E
  12. .text:8111020E loc_8111020E                            ; CODE XREF: sub_811101E8+20j
  13. .text:8111020E                 MOV.W           R0, #0  ; status
  14. .text:81110212                 BLX             exit


ну тут вообще всё явно, наша переменная сравнивается с переменной __data_start и если они не равны, то программа выходит. Значит наша задача просто записать в обе переменные одинаковые значения и всё будет работать на ура, а вот где записать? лучше это делать там где вызывается getCRC:
1. переменную unk_8114A578 в самом конце той функции.
2. А переменную __data_start любым HEX редактором по смещению, она там намертво забита.

Вот всё что успел написать, надеюсь будет полезным. С Aftermath всё значительно сложнее было.

| Сообщение посчитали полезным: WmLiM, SaNX, obfuskator


Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 19 ноября 2011 18:37 New!
Цитата · Личное сообщение · #24

chelpa
позырь screencast video recorder. Там хитрая схема сцуко
Я ломал версии до 2.4, щас уже 2.7 есть: (--> Link <--). Суть такова, есть файло raw\sc - это архив. из него извлекают файло elf с дописанным заголовком:
Code:
  1.  00000000:  45 4C 46 01-01 01 01 00-00 00 00 00-00 00 00 00  ELF
  2.  00000010:  02 00 00 01-0A 7F 45 4C-46 01 01 01-00 00 00 00    ELF

первые 14h байт нужно убирать. Сама проверка от маркета отламываеццо несложно, а вот запись этого файла с верным заголовком теперь хз как происходит. Раньше просто тупо был write(III), где было с какого места стрима писать и какую длину. Я просто указывал нужные мне старт 14h байт.
А теперь такого нет, аффтар видимо мониторит на ломанные версии
Я сделал так, чтоб файл не создавался и подложил уже нормальный - дык тоже хуй, cannot start server.

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 21 ноября 2011 09:55 · Поправил: chelpa New!
Цитата · Личное сообщение · #25

SaNX пишет:
Сама проверка от маркета отламываеццо несложно, а вот запись этого файла с верным заголовком теперь хз как происходит.


Ну в общем мне тоже не по силам и не по времени с ней разобраться. В смали одной строкой в валидаторе урезанном нашел как поправить, но сам сервис он потом не видит, я пофиксил в либе libutil_mod_sc.so запрос лицензии, вроде нормальные значения уходят в дальвик, а он сука пишет мол критическая ошибка, а потом меняет надпись с ожидания сервера на то, что мол сервер не стартовал. И запись того файло как раз в этой бибилитеке и был, но не понял что там да как происходит

в этой же либе создается какой-то файл "d", но в манипуляциях никак разобраться не могу. Надо нормальный файл из лицензии дернуть наверное.

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 21 ноября 2011 17:30 New!
Цитата · Личное сообщение · #26

Да ничо не надо дергать. d=sc из дистриба. потом sc стирается, и с именем temp создается файло, дернутое из d. потом это файло переписываеццо в sc и запускаеццо. вот оно и пишет, что ждет сервис sc. файл этот валидный есть в архиве d, но с кривым заголовком (14h удалить надо).

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 22 ноября 2011 11:05 · Поправил: chelpa New!
Цитата · Личное сообщение · #27

На данный момент с файлом "d" разобрался. Файл d=classes.dex , по нему (почему то так) чек-сумму считают командой линукса "cksum". Интересно другое, ну обошел я эту проверку, дальше проверяется лицезия из натива, тоже обошел, создается файл sc. А дальше он пишет что критическая ошибка и сервис не запускает. Про смещения, сколько не искал, вроде нет их теперь, но почему процесс не запускается, не пойму. Или, почему он запускается и далвик косячит. В общем на этом пока тупик, хотя библиотека почти вся разобрана, где-то проверка, которую я упускаю.

***********************************************************

Мега lol . Купил в маркете ее, перед этим снес всё, что ранее было. А она сука с той же ошибкой запуска сервиса у меня запускается))))))))))))))) Значит ломанул правильно, просто у меня не запускается из-за чего-то. В общем оставил я её тебе на растерзание, не люблю реверсом глючных прог заниматься никогда не поёмешь, где я косячу, а где они

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 22 ноября 2011 14:17 New!
Цитата · Личное сообщение · #28

chelpa
скинь свой вариант, я проверю.

Ранг: 90.7 (постоянный)
Статус: Участник

Создано: 22 ноября 2011 14:27 · Поправил: chelpa New!
Цитата · Личное сообщение · #29

Вот эта поделка, но думаю вряд ли заработает --> Link <--

отпишись только как она запустилась или нет и что да как было, чтобы понять, где покопать.

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 22 ноября 2011 17:19 New!
Цитата · Личное сообщение · #30

chelpa
хехе "Please support android developers"

Ранг: 30.0 (посетитель)
Статус: Участник

Создано: 22 ноября 2011 22:51 New!
Цитата · Личное сообщение · #31

Доброго времени суток. Вопрос такой. Как с маркета качать что либо не на андроид тело?
Добыть платное приложение можно лишь купив его?
Надеюсь ответят тут. Ибо близко к тематике топика.
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 38 . 39 . >>
 eXeL@B —› Основной форум —› Взлом Android приложений

Видеокурс ВЗЛОМ