Исходный код почему нельзя достать из игры
Перейти к содержимому

Исходный код почему нельзя достать из игры

Исходный код игры: что это такое и как можно его заполучить?

Lorem ipsum dolor

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

Для тех , кто не знае т, я зыки программирования нужны для человека, а не для компьютера. С их помощью программист пишет программы, которые удобно читать и понимать человеку. Поэтом у в основно м п рограммисты стараются писать код качественно, компактно и красиво для своего же удобства. А компьютеру совершенно не важна красота исходного кода, потому что он понимает только свой машинный язык, который состоит из единиц и нулей. Большинство написанных программистом программ компилируется в машинный язык, который человеку очень сложно понять.

Так происходит и с кодом игр. Программист пишет игр у н а известном ему языке и выпускает ее в широкое пользование. Исходный код игры обычно закрыт, а пользователям игры доступен лишь машинный код игры, который достаточно сложно понять. Можно ли с машинного кода получить исходный код? В принципе , можно, но это очень трудная и кропотливая работа с применением различных инструментов и подходов к анализу получаемых результатов. Для такого комплекса проводимых работ придуман даже свой термин — реверс-инженеринг ( реверсная инженерия или обратное программирование ) . Само действие по конвертации кода из машинного в код языка программирования называется декомпиляцией. И это действие является обязательной частью реверс-инженер ии .

Исходный код игры

Нужно понимать, что реверсная инженерия не дает стопроцентный результат. Полученный код с применением инструментов для реверса не будет кодом , идентичным исходному, но может быть очень похожим на него. Настоящий исходный код игры может быть доступен только в том случае, если разработчик опубликует его в открытом доступе.

Иногда разработчики используют такую практику — публикуют исходники игры в открытом доступе, чтобы каждый, кто смыслит в программировании, смог внести свою лепту в развитие игры. При этом авторское право сохраняется за разработчиками игры и регулируется соответствующими лицензиями и документацией.

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

Например , вы скачиваете файл игры с «ехе»-расширением, чтобы установить такую игру к себе на компьютер с операционной системой Windows. Если вы попытаетесь открыть такой файл для просмотра его кода, то максимум , что вы там обнаружите , — это объектный код, который состоит из «смеси» цифр и букв в 16-битовой системе исчисления. Полностью восстановить из объектного кода исходный не представляется возможным, только его частичное восстановление, чтобы можно было «уловить» алгоритмы и логику в игре.

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

Исходный код игры: для чего закрывать и для чего его хочется заполучить

  • с закрытым исходным кодом;

  • с открытым исходным кодом.

Для чего нужен исходный код игры

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

В общем, по конкретной игре нужно искать наличие исходного кода. Если же вы просто хотите «поиграться» с исходным кодом какой-либо игры, то мож ете найти игры 90-х или 2000-х годов, у которых исходный код открыт , и экспериментируйте сколько душе угодно.

Заключение

Исходный код игры — это гарантия авторского права на игру. У кого исходники, тот и автор. Восстанавливать исходный код — это довольно сложное занятие, которое потребует от вас специальных знаний. А самое главное , что чем «больше» и сложнее игра, тем дольше и менее точным будет восстановленный исходный код игры.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Есть ли способ получить исходный код из файла APK?

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

есть ли способ, чтобы извлечь исходный код из этого файла APK?

16 ответов

простой способ: используйте онлайн-инструмент http://www.javadecompilers.com/apk, загрузить apk и получить исходный код.

процедура декодирования .файлы apk, пошаговый метод:

Шаг 1:

создайте новую папку и скопируйте ее.файл apk, который вы хотите декодировать.

теперь переименуйте расширение этого .apk файл .zip (например, переименовать из filename.apk для имени файла.ZIP) и сохраните его. Теперь вы можете доступ к классам.DeX файлы и т. д. На этом этапе вы можете видеть drawables, но не xml и java-файлы, поэтому продолжайте.

Шаг 2:

теперь этот экстракт .zip-файл в той же папке (или новой папке).

скачать dex2jar и извлечь его в ту же папку (или новую папку).

ход занятия.dex файл на dex2jar папка.

теперь откройте командную строку и измените каталог на эту папку (или новую папку). Тогда пиши d2j-dex2jar classes.dex (для Mac terminal или ubuntu напишите ./d2j-dex2jar.sh classes.dex ) и нажмите enter. Теперь у тебя есть занятия.Декс.dex2jar файл в той же папке.

скачать Java decompiler, дважды щелкните по jd-gui, нажмите «Открыть файл» и откройте классы.Декс.dex2jar файл из этой папки: теперь вы получаете файлы классов.

сохранить все эти файлы классов (в JD-gui нажмите Файл — > Сохранить все источники) по имени src. На этом этапе вы получаете источник java, но .xml-файлы по-прежнему не читаются, поэтому продолжайте.

Шаг 3:

теперь откройте другую новую папку

положить в .apk файл, который вы хотите декодировать

скачать последнюю версию apktool и окно установки apktool (оба могут быть скачано по той же ссылке) и поместите их в ту же папку

откройте командное окно

Теперь запустите команду apktool if framework-res.apk и далее

apktool d myApp.apk (где myApp.apk обозначает имя файла, которое вы хотите декодировать)

теперь вы получаете папку с файлами в этой папке и можете легко читать xml-файлы apk.

Шаг 4:

это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае обеих новых папок)в одну

и наслаждайтесь исходным кодом.

это альтернативное описание-на всякий случай, если кто-то застрял с описанием выше. Выполните следующие действия:

  1. скачать apktool.bat (или apktool для Linux) и apktool_<version>.jar от http://ibotpeaches.github.io/Apktool/install/
  2. переименуйте файл jar сверху в apktool.jar и поместите оба файла в одну папку

промежуточный результат: файлы ресурсов, AndroidManifest.xml

промежуточный результат: classes.dex

результат исходный код

Примечание: не разрешается декомпилировать пакеты сторонних производителей; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, результирующий код, скорее всего, будет запутан

пока вы можете декомпилировать свой APK файл, вы, вероятно, нажмете одну большую проблему:

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

к сожалению, такие вещи убил много проекты.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git etc.

и как это сделать.

существует также новое приложение на Play Store С помощью которого можно декомпилировать apk (системные приложения тоже) и просмотреть исходный код прямо на вашем смартфоне. Она сохраняет файлы на SD карту, так что вы можете просмотреть его на вашем компьютере. Для этого не Требуется root или что-то еще.

просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.

apktool это лучшее, что вы можете попробовать. Я сохранил с ним xml, но, честно говоря, я не знаю, как он будет работать с ним .Java-код.

Я бы рекомендовал вам иметь репозиторий кода, даже если вы единственный кодер. Я использовал Проект Locker для моих собственных проектов. Это дает вам бесплатный SVN и Git РЕПО.

эти две статьи описывают, как сочетать использование apktool и dex2jar взять APK файл и создать проект Eclipse, который может создавать и запускать его.

  1. использовать apktool to получить файлы ресурсов из apk
  2. использовать dex2jar чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse.
  3. создать проект Eclipse укажите его на файлы ресурсов и новый файл jar
  4. откройте файл jar с помощью утилиты zip и удалите существующие ресурсы
  5. откройте файл jar с помощью JDGui для просмотра исходного кода
  6. Возьмите любой исходный код, который вам нужен от JDGui , вставьте его в класс внутри Eclipse и изменить его
  7. удалите этот класс из файла jar (так что у вас нет одного и того же класса, определенного несколько раз)
  8. запустить его.

apktool будет работать. Вам даже не нужно знать хранилище ключей для извлечения исходного кода (что немного страшно). Основным недостатком является то, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и основной.xml проходит отлично, хотя и может стоить вашего времени, чтобы по крайней мере восстановить их. В конечном счете, вам, скорее всего, придется переписать свой Java-код с нуля.

вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-Zip, чтобы распаковать их.

есть несколько способов сделать это:

используйте функцию «профиль или отладка APK» в Android Studio 3.0.

Это позволяет открывать и исследовать APKs в Android Studio. Занятия декомпиляция в smali. Ресурсы не извлекаются, и такие вещи, как» перейти к определению»,» найти все ссылки » и отладка не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smalidea.

android-studio

select-file

code

Jadx декомпилирует код в данном APK в исходные файлы java.

jdax-img

Apktool-это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать с помощью apktool. Вот пример этого в действии:

может быть легко увидеть источник:

в Android studio 2.3, Build -> Analyze APK -> Select the apk that you want to decompile .
Вы увидите, что это исходный код.

Я покажу вам другой способ декомпилировать .apk файлы.

вы можете выполнить первые 2 шага от «prankul Гарг«. Так что у вас есть еще одна возможность:

Шаг 3′:

скачать «JD-GUI», это легко найти. Открой свой .Джар файл в » JD-gui.исполняемый.» (Файл > Открыть файл > ‘ нашел свой .Джар «файл»). После этой процедуры можно сохранить все ресурсы в .zip.

1st-вы должны переименовать .apk до .zip

2nd-вы должны декодировать .Декс!—2— > файл (если хотите, расшифруйте .apk до dex2jar, это возможно)

3rd-вы должны декодировать .Джар С JD-GUI

ниже онлайн:

это сделать все одним щелчком мыши: decompiled .java файлы + ресурсы + xml (в одном .zip-файл) с очень хорошим декомпилятором (Jadx возвращает java-код в местах/функциях, где другие компиляторы возвращают комментарии внутри функции, такие как «невозможно декомпилировать» или некоторый ассемблер/машинный код android)

Apktool по инженерный 3-й партии, закрытые, бинарные приложения для Android.

Он может декодировать ресурсы почти в исходную форму и перестраивать их после внесения некоторых изменений.

Это позволяет отлаживать код smali шаг за шагом. Также это упрощает работу с приложением из-за проектной файловой структуры и автоматизации некоторых повторяющихся задач, таких как построение apk, так далее.

этот сайт https://www.apkdecompilers.com/ сделал это автоматически.

сначала я попробовал сайт, упомянутый в принятом ответе, но это не сработало для меня.

Я лично рекомендую Показать Java Android App чтобы получить исходный код. Вы можете скачать его из play store или из здесь

apktool — это путь. Онлайн-сервис apktool также существует:http://www.javadecompilers.com/apktool

некоторые ограничения, очевидно, существуют из-за сервиса «online nature»: вы можете извлекать и исследовать активы и файл манифеста, но на данный момент невозможно перекомпилировать приложение.

тем не менее, это без проблем способ «открыть» приложение для android.

вы можете попробовать DexPatcher. Он даже интегрируется с Android Studio. Он использует Apktool и Dex2Jar внутренне.
Вы также можете использовать эти инструменты независимо. Apktool декомпилирует apk и извлекает .файлы dex, которые могут быть преобразованы в jar с помощью Dex2Jar. Банку можно декомпилировать с помощью JD-GUI. Вы можете увидеть код Java с помощью этого инструмента. Хотя сходство декомпилированного кода с фактический код не может быть гарантирована. Есть некоторые продвинутые обфускации кода инструменты, доступные на рынке, которые испортят код, чтобы затруднить декомпиляцию / понимание. например. Должны быть

Вскрываем, модифицируем и запаковываем Android-приложения

Иногда некоторые приложения на Android чем-то не устраивают пользователя. В качестве примера можно привести назойливую рекламу. А то бывает и так — всем хороша программа, да только перевод в ней или кривой, или вовсе отсутствует. Или, например, программа триальная, а получить полную версию возможности нет. Как же изменить ситуацию?

Введение

В этой статье мы поговорим о том, как разобрать пакет APK с приложением, рассмотрим его внутреннюю структуру, дизассемблируем и декомпилируем байт-код, а также попробуем внести в приложения несколько изменений, которые могут принести нам ту или иную выгоду.

Чтобы сделать все это самостоятельно, потребуются хотя бы начальные знания языка Java, на котором пишутся приложения для Android, и языка XML, который используется в Android повсеместно — от описания самого приложения и его прав доступа до хранения строк, которые будут выведены на экран. Также понадобится умение обращаться со специализированным консольным софтом.

Итак, что же представляет собой пакет APK, в котором распространяется абсолютно весь софт для Android?

Декомпиляция приложений

В статье мы работали только с дизассемблированным кодом приложения, однако если в большие приложения вносить более серьезные изменения, разобраться в коде smali будет гораздо сложнее. К счастью, мы можем декомпилировать код dex в Java-код, который будет хоть и не оригинальным и не компилируемым обратно, но гораздо более легким для чтения и понимания логики работы приложения. Чтобы сделать это, нам понадобятся два инструмента:

  • dex2jar — транслятор байт-кода Dalvik в байт-код JVM, на основе которого мы сможем получить код на языке Java;
  • jd-gui — сам декомпилятор, позволяющий получить из байт-кода JVM читаемый код Java. В качестве альтернативы можно использовать Jad (www.varaneckas.com/jad); хоть он и довольно старый, но в некоторых случаях генерирует более читаемый код, нежели Jd-gui.

Использовать их следует так. Сначала запускаем dex2jar, указывая в качестве аргумента путь до apk-пакета:

В результате в текущем каталоге появится Java-пакет mail.jar, который уже можно открыть в jd-gui для просмотра Java-кода.

Устройство APK-пакетов и их получение

Пакет приложения Android, по сути, является обычным ZIP-файлом, для просмотра содержимого и распаковки которого никаких специальных инструментов не требуется. Достаточно иметь архиватор — 7zip для Windows или консольный unzip в Linux. Но это что касается обертки. А что внутри? Внутри же у нас в общем случае такая структура:

  • META-INF/ — содержит цифровой сертификат приложения, удостоверяющий его создателя, и контрольные суммы файлов пакета;
  • res/ — различные ресурсы, которые приложение использует в своей работе, например изображения, декларативное описание интерфейса, а также другие данные;
  • AndroidManifest.xml — описание приложения. Сюда входит, например, список требуемых разрешений, требуемая версия Android и необходимое разрешение экрана;
  • classes.dex — компилированный байт-код приложения для виртуальной машины Dalvik;
  • resources.arsc — тоже ресурсы, но другого рода — в частности, строки (да-да, этот файл можно использовать для русификации!).

Перечисленные файлы и каталоги есть если не во всех, то, пожалуй, в абсолютном большинстве APK. Однако стоит упомянуть еще несколько не столь распространенных файлов/каталогов:

  • assets — аналог ресурсов. Основное отличие — для доступа к ресурсу необходимо знать его идентификатор, список asset’ов же можно получать динамически, используя метод AssetManager.list() в коде приложения;
  • lib — нативные Linux-библиотеки, написанные с помощью NDK (Native Development Kit).

Этот каталог используют производители игр, помещая туда движок игры, написанный на C/C++, а также создатели высокопроизводительных приложений (например, Google Chrome). С устройством разобрались. Но как же получить сам файл пакета интересующего приложения? Поскольку без рута с устройства забрать файлы APK не представляется возможным (они лежат в каталоге /data/app), а рутить не всегда целесообразно, имеется как минимум три способа получить файл приложения на компьютер:

  • расширение APK Downloader для Chrome;
  • приложение Real APK Leecher;
  • различные файлообменники и варезники.

Какой из них использовать — дело вкуса; мы предпочитаем использовать отдельные приложения, поэтому опишем использование Real APK Leecher, тем более что написан он на Java и, соответственно, работать будет хоть в винде, хоть в никсах.

После запуска программы необходимо заполнить три поля: Email, Password и Device ID — и выбрать язык. Первые два — e-mail и пароль твоего гуглоаккаунта, который ты используешь на устройстве. Третий же является идентификатором устройства, и его можно получить, набрав на номеронабирателе код ##8255## и затем найдя строку Device ID. При заполнении надо ввести только ID без префикса android-.

Настройка Real APK Leecher

Настройка Real APK Leecher

Другие статьи в выпуске:

Хакер #170. Малварь для OS X

После заполнения и сохранения нередко выскакивает сообщение «Error while connecting to server». Оно не имеет отношения к Google Play, поэтому смело его игнорируй и ищи интересующие тебя пакеты.

Просмотр и модификация

Допустим, ты нашел интересующий тебя пакет, скачал, распаковал… и при попытке просмотра какого-нибудь XML-файла с удивлением обнаружил, что файл не текстовый. Чем же его декомпилировать и как вообще работать с пакетами? Неужели необходимо ставить SDK? Нет, SDK ставить вовсе не обязательно. На самом деле для всех шагов по распаковке, модификации и упаковке пакетов APK нужны следующие инструменты:

  • архиватор ZIP для распаковки и запаковки;
  • smali — ассемблер/дизассемблер байт-кода виртуальной машины Dalvik (code.google.com/p/smali);
  • aapt — инструмент для запаковки ресурсов (по умолчанию ресурсы хранятся в бинарном виде для оптимизации производительности приложения). Входит в состав Android SDK, но может быть получен и отдельно;
  • signer — инструмент для цифровой подписи модифицированного пакета (bit.ly/Rmrv4M).

Использовать все эти инструменты можно и по отдельности, но это неудобно, поэтому лучше воспользоваться более высокоуровневым софтом, построенным на их основе. Если ты работаешь в Linux или Mac OS X, то тут есть инструмент под названием apktool. Он позволяет распаковывать ресурсы в оригинальный вид (в том числе бинарные XML- и arsc-файлы), пересобирать пакет с измененными ресурсами, но не умеет подписывать пакеты, так что запускать утилиту signer придется вручную. Несмотря на то что утилита написана на Java, ее установка достаточно нестандартна. Сначала следует получить сам jar-файл:

Далее нам понадобится скрипт-обвязка для запуска apktool (он, кстати, доступен и для Windows), включающий в себя еще и утилиту aapt, которая понадобится для запаковки пакета:

Далее просто сваливаем содержимое обоих архивов в каталог

/bin и добавляем его в $PATH:

Если же ты работаешь в Windows, то для нее есть превосходный инструмент под названиемVirtuous Ten Studio, который также аккумулирует в себе все эти инструменты (включая сам apktool), но вместо CLI-интерфейса предоставляет пользователю интуитивно понятный графический интерфейс, с помощью которого можно выполнять операции по распаковке, дизассемблированию и декомпиляции в несколько кликов. Инструмент этот Donation-ware, то есть иногда появляются окошки с предложением получить лицензию, но это, в конце концов, можно и потерпеть. Описывать его не имеет никакого смысла, потому что разобраться в интерфейсе можно за несколько минут. А вот apktool, вследствие его консольной природы, следует обсудить подробнее.

Импорт APK в Virtuous Ten Studio

Импорт APK в Virtuous Ten Studio

Рассмотрим опции apktool. Если вкратце, то имеются три основные команды: d (decode), b (build) и if (install framework). Если с первыми двумя командами все понятно, то что делает третья, условный оператор? Она распаковывает указанный UI-фреймворк, который необходим в тех случаях, когда ты препарируешь какой-либо системный пакет.

Рассмотрим наиболее интересные опции первой команды:

  • -s — не дизассемблировать файлы dex;
  • -r — не распаковывать ресурсы;
  • -b — не вставлять отладочную информацию в результаты дизассемблирования файла dex;
  • —frame-path — использовать указанный UI-фреймворк вместо встроенного в apktool. Теперь рассмотрим пару опций для команды b:
  • -f — форсированная сборка без проверки изменений;
  • -a — указываем путь к aapt (средство для сборки APK-архива), если ты по какой-то причине хочешь использовать его из другого источника.

Пользоваться apktool очень просто, для этого достаточно указать одну из команд и путь до APK, например:

После этого в каталоге mail появятся все извлеченные и дизассемблированные файлы пакета.

Препарирование. Отключаем рекламу

Теория — это, конечно, хорошо, но зачем она нужна, если мы не знаем, что делать с распакованным пакетом? Попробуем применить теорию с пользой для себя, а именно модифицируем какую-нибудь софтину так, чтобы она не показывала нам рекламу. Для примера пусть это будет Virtual Torch — виртуальный факел. Для нас эта софтина подойдет идеально, потому что она под завязку набита раздражающей рекламой и к тому же достаточно проста, чтобы не потеряться в дебрях кода.

Поиск кода рекламы в jd-gui

Поиск кода рекламы в jd-gui

Итак, с помощью одного из приведенных способов скачай приложение из маркета. Если ты решил использовать Virtuous Ten Studio, просто открой APK-файл в приложении и распакуй его, для чего создай проект (File -> New project), затем в контекстном меню проекта выбери Import File. Если же твой выбор пал на apktool, то достаточно выполнить одну команду:

После этого в каталоге com.kauf.particle.virtualtorch появится файловое дерево, похожее на описанное в предыдущем разделе, но с дополнительным каталогом smali вместо dex-файлов и файлом apktool.yml. Первый содержит дизассемблированный код исполняемого dex-файла приложения, второй — служебную информацию, необходимую apktool для сборки пакета обратно.

Первое место, куда мы должны заглянуть, — это, конечно же, AndroidManifest.xml. И здесь мы сразу встречаем следующую строку:

Нетрудно догадаться, что она отвечает за предоставление приложению полномочий на использование интернет-соединения. По сути, если мы хотим просто избавиться от рекламы, нам, скорее всего, достаточно будет запретить приложению интернет. Попытаемся это сделать. Удаляем указанную строку и пробуем собрать софтину с помощью apktool:

В каталоге com.kauf.particle.virtualtorch/build/ появится результирующий APK-файл. Однако установить его не получится, так как он не имеет цифровой подписи и контрольных сумм файлов (в нем просто нет каталога META-INF/). Мы должны подписать пакет с помощью утилиты apk-signer. Запустили. Интерфейс состоит из двух вкладок — на первой (Key Generator) создаем ключи, на второй (APK Signer) подписываем. Чтобы создать наш приватный ключ, заполняем следующие поля:

  • Target File — выходной файл хранилища ключей; в нем обычно хранится одна пара ключей;
  • Password и Confirm — пароль для хранилища;
  • Alias — имя ключа в хранилище;
  • Alias password и Confirm — пароль секретного ключа;
  • Validity — срок действия (в годах). Значение по умолчанию оптимально.

Остальные поля, в общем-то, необязательны — но необходимо заполнить хотя бы одно.

Создание ключа в apk-signer

Создание ключа в apk-signer

WARNING

Чтобы подписать приложение с помощью apk-signer, ты должен установить Android SDK и указать полный путь до него в настройках приложения.

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

Теперь этим ключом можно подписать APK. На вкладке APK Signer выбираем только что сгенерированный файл, вводим пароль, алиас ключа и пароль к нему, затем находим файл APK и смело жмем кнопку «Sign». Если все пройдет нормально, пакет будет подписан.

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

Цифровая подпись необходима только стороннему софту, поэтому если ты занимаешься модификацией системных приложений, которые устанавливаются копированием в каталог /system/app/, то подписывать их не нужно.

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

Обычно авторы приложений создают специальные классы для вывода рекламы и вызывают методы этих классов во время запуска приложения или одной из его «активностей» (упрощенно говоря, экранов приложения). Попробуем найти эти классы. Идем в каталог smali, далее com (в org лежит только открытая графическая библиотека cocos2d), далее kauf (именно туда, потому что это имя разработчика и там лежит весь его код) — и вот он, каталог marketing. Внутри находим кучу файлов с расширением smali. Это классы, и наиболее примечателен из них класс Ad.smali, по названию которого нетрудно догадаться, что именно он выводит рекламу.

Мы могли бы изменить логику его работы, но гораздо проще будет тупо убрать вызовы любых его методов из самого приложения. Поэтому выходим из каталога marketing и идем в соседний каталог particle, а затем в virtualtorch. Особого внимания здесь заслуживает файл MainActivity.smali. Это стандартный для Android класс, который создается Android SDK и устанавливается в качестве точки входа в приложение (аналог функции main в Си). Открываем файл на редактирование.

Внутри находится код smali (местный ассемблер). Он довольно запутанный и трудный для чтения в силу своей низкоуровневой природы, поэтому мы не будем его изучать, а просто найдем все упоминания класса Ad в коде и закомментируем их. Вбиваем строку «Ad» в поиске и попадаем на строку 25:

Здесь создается поле ad для хранения объекта класса Ad. Комментируем с помощью установки знака ### перед строкой. Продолжаем поиск. Строка 423:

Здесь происходит создание объекта. Комментируем. Продолжаем поиск и находим в строках 433, 435, 466, 468, 738, 740, 800 и 802 обращения к методам класса Ad. Комментируем. Вроде все. Сохраняем. Теперь пакет необходимо собрать обратно и проверить его работоспособность и наличие рекламы. Для чистоты эксперимента возвращаем удаленную из AndroidManifest.xml строку, собираем пакет, подписываем и устанавливаем.

virttorch_with_ad Наш подопытный кролик. Видна реклама Он же, но уже без рекламы Он же, но уже без рекламы

Оп-па! Реклама пропала только во время работы приложения, но осталась в главном меню, которое мы видим, когда запускаем софтину. Так, подождите, но ведь точка входа — это класс MainActivity, а реклама пропала во время работы приложения, но осталась в главном меню, значит, точка входа другая? Чтобы выявить истинную точку входа, вновь открываем файл AndroidManifest.xml. И да, в нем есть следующие строки:

Они говорят нам (и, что важнее, андроиду) о том, что активность с именем Start должна быть запущена в ответ на генерацию интента (события) android.intent.action.MAIN из категории android.intent.category.LAUNCHER. Это событие генерируется при тапе на иконку приложения в ланчере, поэтому оно и определяет точку входа, а именно класс Start. Скорее всего, программист сначала написал приложение без главного меню, точкой входа в которое был стандартный класс MainActivity, а затем добавил новое окно (активность), содержащее меню и описанное в классе Start, и вручную сделал его точкой входа.

Открываем файл Start.smali и вновь ищем строку «Ad», находим в строках 153 и 155 упоминание класса FirstAd. Он тоже есть в исходниках и, судя по названию, как раз и отвечает за показ объявлений на главном экране. Смотрим дальше, идет создание экземпляра класса FirstAd и интента, по контексту имеющего отношение к этому экземпляру, а дальше метка cond_10, условный переход на которую осуществляется аккурат перед созданием экземпляра класса:

Скорее всего, программа каким-то случайном образом вычисляет, нужно ли показывать рекламу на главном экране, и, если нет, перескакивает сразу на cond_10. Ок, упростим ей задачу и заменим условный переход на безусловный:

Больше упоминаний FirstAd в коде нет, поэтому закрываем файл и вновь собираем наш виртуальный факел с помощью apktool. Копируем на смартфон, устанавливаем, запускаем. Вуаля, вся реклама исчезла, с чем нас всех и поздравляем.

  • Перевод приложений Android;
  • пример снятия триала с приложения.

Итоги

Эта статья лишь краткое введение в методы вскрытия и модификации Android-приложений. За кадром остались многие вопросы, такие как снятие защиты, разбор обфусцированного кода, перевод и замена ресурсов приложения, а также модификация приложений, написанных с использованием Android NDK. Однако, имея базовые знания, разобраться во всем этом — лишь вопрос времени.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *