Как внедрить код в существующий Apk?

Я знаю, что можно декомпилировать и перекомпилировать apk. И я видел этот пост: Внедрение кода в APK раньше, но я хочу без декомпиляции или обратного проектирования.

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

Итак, мой вопрос:

Есть ли способ внести некоторые изменения в apk (изменить сенсорные и ключевые события в игровом приложении) и добавить в него некоторые коды, не затрагивая реальный исходный код?


person Milad Faridnia    schedule 20.11.2014    source источник
comment
нюхать нюхать, пахнет взломом и вторжением...   -  person injecteer    schedule 20.11.2014
comment
Если вы посмотрите сообщение, о котором я упоминал, вы найдете несколько крупных компаний, которые этим занимаются. @injecteer   -  person Milad Faridnia    schedule 20.11.2014


Ответы (2)


Для чего-то простого, как это, все, что вам нужно, это baksmali/smali. Просто вставьте один вызов сборки в свой пользовательский класс, а остальное вы можете написать на Java.

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

person Antimony    schedule 20.11.2014
comment
Кажется, это хорошая идея, но не могли бы вы объяснить подробнее, как это сделать? @сурьма - person Milad Faridnia; 23.11.2014
comment
Не могли бы вы предложить пример одиночного вызова сборки в пользовательском классе. - person inquisitive; 18.05.2015
comment
@Antimony Есть ли способ внедрить единственный метод smali в мое приложение java console? - person dafie; 06.08.2018
comment
Настольные Java-приложения не используют dex. Для этого вам нужен обычный редактор файлов классов Java. - person Antimony; 06.08.2018
comment
Голосование против из-за отсутствия проработки этой процедуры и отсутствия внешних ссылок на то, что кажется гораздо лучшим подходом. - person varevarao; 13.02.2019
comment
@Вареварао. Я смущен. Вы хотите, чтобы я погуглил учебник по smali и связал его здесь? Я предположил, что любой желающий мог бы сделать это сам, если это необходимо. - person Antimony; 14.02.2019
comment
@Antimony, если вы считаете, что именно так ваш ответ может предоставить лучший контекст как новичкам, так и опытным учащимся, то это правильный путь. Чтобы процитировать образ жизни SO (stackoverflow.com/help/how-to-answer), краткость приемлема. , но лучше полные объяснения. Ссылки на внешние ресурсы приветствуются. - person varevarao; 15.02.2019

Для этого в первую очередь вы декомпилируете этот apk в исходный код для декомпиляции apk используется следующая цель

Шаг 1:

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

Теперь переименуйте расширение этого файла .apk в .zip (например, переименуйте имя файла.apk в имя файла.zip) и сохраните его. Теперь вы можете получить доступ к файлам class.dex и т. д. На этом этапе вы можете видеть чертежи, но не файлы xml и java, так что продолжайте.

Шаг 2:

Теперь извлеките этот ZIP-файл в ту же папку (или в НОВУЮ ПАПКУ).

Загрузите dex2jar (https://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=) и распакуйте его в ту же папку (или в НОВУЮ ПАПКУ).

Переместите файл class.dex в папку dex2jar.

Теперь откройте командную строку и измените каталог на эту папку (или НОВУЮ ПАПКУ). Затем напишите d2j-dex2jar class.dex и нажмите Enter. Теперь у вас есть файл class_dex2jar.jar в той же папке.

Загрузите декомпилятор Java (http://jd.benow.ca/), дважды щелкните jd-gui, щелкните в открытом файле и откройте файл class.dex.dex2jar из этой папки: теперь вы получаете файлы классов.

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

Шаг 3:

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

Поместите в файл .apk, который вы хотите декодировать

Загрузите последнюю версию apktool (https://code.google.com/p/android-apktool/downloads/detail?name=apktool1.5.2.tar.bz2&can=2&q=) И окно установки apktool (https://code.google.com/p/android-apktool/downloads/detail?name=apktool-install-windows-r05-ibot.tar.bz2&can=2&q= ) (оба можно скачать по одной ссылке) и поместите их в та же папка

Скачиваем framework-res.apk и кладем в ту же папку (не для всех apk нужен этот файл, но не помешает)

Открыть командное окно

Перейдите в корневой каталог APKtool и введите следующую команду: apktool if framework-res.apk

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

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

Шаг 4:

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

и обновите исходный код...

person Akhil    schedule 20.11.2014
comment
Практически все эти шаги являются наименее эффективным и надежным способом сделать это. И декомпиляция/перекомпиляция в любом случае редко является ответом. - person Antimony; 20.11.2014
comment
Не могли бы вы дать мне ссылку для скачивания того, что вы упомянули. @Ахил - person Milad Faridnia; 23.11.2014
comment
Я выполнил шаги 1 и 2, но у меня возникли проблемы с шагом 3. Сначала я не смог найти ссылку для скачивания framework-res.apk. Затем я продолжил без этого apk, но получил папку с таким количеством файлов .smali и без файла xml. @Ахил - person Milad Faridnia; 23.11.2014
comment
Почему важно изменить расширение файла? Это точно ничего не делает - person Ben; 22.03.2018