-7

Декомпиляция apk: туда и обратно

Скорее памятка для себя, чем пост для общественности.


С офсайта https://developer.android.com/studio/index.html забираем Android SDK Tools (ссылка внизу страницы). На данный момент там выложена версия 3859397.


Распаковываем и устанавливаем platform-tools и build-tools для последнего релиза Android. Соответствие имени релиза, версии Android и значению Android API можно посмотреть на https://source.android.com/source/build-numbers


> tools\bin\sdkmanager.bat --list

...

build-tools;25.0.2 | 25.0.2 | Android SDK Build-Tools 25.0.2

build-tools;25.0.3 | 25.0.3 | Android SDK Build-Tools 25.0.3

cmake;3.6.3155560 | 3.6.3155560 | CMake 3.6.3155560

...


> tools\bin\sdkmanager.bat "build-tools;25.0.3" "platform-tools"


Далее получаем на руки apk-шку, которую будем препарировать. Название пакета можно взять из адресной строки браузера, открыв страницу с программой на Play Market. Далее ищем и вытаскиваем архив через adb (root не требуется).

Пусть например, для программы "Sample Foobar" имя пакета будет com.example.foobar


> adb devices

List of devices attached

1234567890abcdef device


> adb shell "pm list packages -f -3 | grep com.example.foobar"

package:/data/app/com.example.foobar-1.apk=com.example.foobar


> adb pull /data/app/com.example.foobar-1.apk

/data/app/com.example.foobar-1.apk: 1 file pulled. 3.0 MB/s (39955506 bytes in 12.719s)


С сайта https://ibotpeaches.github.io/Apktool/ забираем и устанавливаем apktool, который умеет декомпилировать архив apk в набор файлов и обратно.


> java -jar apktool_2.2.2.jar d -o foobar_src com.example.foobar-1.apk


Декомпилированный код будет в формате smali - синтаксис и краткая справка на офсайте https://github.com/JesusFreke/smali/wiki. Описание команд можно посмотреть на http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html или на официальном сайте Android https://source.android.com/devices/tech/dalvik/dalvik-bytecode


Уже можно изучать исходный код. В Notepad++ можно добавить подсветку синтаксиса smali с https://forum.xda-developers.com/showthread.php?t=2760141, а для IntelliJ Idea недавно вышел плагин https://github.com/JesusFreke/smali/wiki/smalidea, который, по заявлению автора, даже позволяет отлаживать приложение на телефоне через ddms (проверять это я, конечно, не буду.)


Можно облегчить себе изучение кода, попробовав декомпилировать apk в исходный код на Java, но надо иметь в виду, что с вероятностью в 99.5% код получится нерабочий и его невозможно будет скомпилировать обратно в apk. В зависимости от фазы Луны и погоды на Марсе, в таком коде будут присутствовать совершенно дикие конструкции типа for (;;) {return; /* и дальше код */ } и тому подобное. Но общую структуру кода можно посмотреть, посравнивать с тем, что есть в файлах smali. Для этого нам потребуется dex2jar отсюда: https://sourceforge.net/projects/dex2jar/ и jd-gui отсюда: http://jd.benow.ca/


> dex2jar-2.0\d2j-dex2jar -os -ts -r com.example.foobar-1.apk


На выходе имеем com.example.foobar-1-dex2jar.jar. Запускаем jd-gui и открываем в нем этот jar:


> java -jar jd-gui-1.4.0.jar


Можно изучать код прямо в jd-gui, а можно экспортировать весь Java-код через меню File -> Save all sources.


После того, как поизучали, добавили нужное и удалили ненужное, собираем обратно smali в apk:


> java -jar apktool_2.2.2.jar b -o foobar_unaligned.apk foobar_src


Выравниваем запакованные файлы по 4-байтовой границе:


> build-tools\25.0.3\zipalign 4 foobar_unaligned.apk foobar_fixed.apk


Если ещё нет своего keystore, то его можно сделать с помощью программы keytool.exe, которая входит в состав JRE:


> keytool -keystore android_keystore.jks -genkey -alias recompile


Далее подписываем apk, используя сертификат из своего keystore. Указываем такое же значение min-sdk-version, как указано в исходнике foobar_src\apktool.yml, в параметре minSdkVersion:


> build-tools\25.0.3\apksigner sign --ks android_keystore.jks --min-sdk-version 14 foobar_fixed.apk


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

Дубликаты не найдены

+1

А мне было полезно, плюсану

+1

на 4пда, этих памяток ...

0
Схоронил, спасибо
0

думаю тут будет актуален тег "реверс-инжиниринг".

-2
ТС, Пикабу вообще то не личная записная книжка если что!!!
Похожие посты
43

Сервис для перехода из 3D в 2D - наш, Российский...

Привет! Годами анимешники пытаются разорвать грани 2D мира. На реддите есть целый раздел посвящённый данным разработкам. Так вышло, что и я поучаствовал в схожем проекте.

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

Иногда выходит годно!

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Иногда кринжово не очень...

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Результат высылается на почту, что несколько устарело.

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

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

Оказывается, вам не нужен большой IP, чтобы оказаться вдохновителем крутого сервиса!

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

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

А ещё люди не читали инструкцию и публиковали туда всякие ~50 сантиметровые штуки. Угадайте, сколько пикабушников на 100 человек?

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Но кого остановит волна негатива? Не нас! Нужно найти проблему и решить её. (Даже, если это не так проблема)

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Можно заметить, что у получающихся картинок блеклые цвета. Это связано с тем, что нейросеть обучалась на старых аниме. Кроме того, у неё явные проблемы с тенями...

Поэтому, после моих настойчивых замечаний было решено потратить ещё немного времени на приложение и обучить его на современном аниме!

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Как идейный вдохновитель, графику должен был добыть я... Вы пробовали найти триста тыщ аниме голов? И чтобы эти головы были 2010+ года выпуска, да в достойном разрешении... Очень легко на самом деле - гуглите "Anime-Face-Dataset".

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

В идеале, стоило накачать рисунков из Printrest, как мне и советовали, но взять готовый архив проще же. Иногда я бываю СЛИШКОМ вдохновляющим - смог "продавить" простой путь =\

Итак, эти картинки загрузили в нейросеть и как-то поставили её учиться трансформировать 3D в 2D...

К сожалению, это РЕАЛЬНО оказался набор голов и других частей тела. Там не было фонов и их программа рисовать не научилась.

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Чтобы хоть как-то сгладить сиё недоразумение, в приложение была добавлена опция для ПоискЛицоОпределение. Теперь, люди, гордо загружающие себя в полный рост имеют хоть какой-то шанс увидеть достойный результат.

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

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

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Новая сеть хуже различает цвета волос и глаз. Зато реже уходит в трип из-за теней и не путает число глаз. Это же важнее чем их цвет?

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Ну и конечно лучше работает с котиками o(≧▽≦)o

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

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

Я вдохновил подругу на создание забавного сервиса, который всё же не пришёлся людям по душе. Мы получили опыт, повеселились, слили денег на сервера и набили синяки - это жизнь 2D она или 3D. Некоторых вон вообще грузовики сбивают.

Сервис для перехода из 3D в 2D - наш, Российский... Аниме, Не аниме, Программирование, Разработка, Машинное обучение, Android, Личный опыт, Длиннопост

Если честно, боюсь, что промахнулся немного с сообществом, но про разработку я знаю только GameDev ._.


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


Подруга моя, просьбы мои, тупые советы мои, тег ваш...


P.S. Нет. Это нельзя использовать в реальном времени на очках виртуальной реальности.

Показать полностью 12
436

Русская азбука Mорзе для Андроид

Русская азбука Mорзе для Андроид Программирование, Android, Азбука Морзе, Выживание, МЧС, Длиннопост, Бесплатно

Впечатлившись произведениями Павла Кучера решил изучить морзянку.

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


Нашёл неплохие программы по изучению для PC. Но за компьютер лишний раз сесть некогда и стал искать, что есть под андроид для обучения русской азбуке морзе. Выяснилось, что нет ничего. Т.е. что-то якобы есть, но по факту это оказывались или трейнеры для отработки того, что уже умеешь или справочники или что то типа превратим ваш текст в морзянку.


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

В общем думал справлюсь за несколько вечеров, но шли дни, недели, месяцы. Программа рождалась в муках, справочного материала на Яве под Андроид на русском ничтожно мало, на форумах помогают плохо. И повторюсь, что я вообще не программист. В итоге, когда доделал, то понял, что программке пропадать грех, ибо аналогов то нет. Решил уж потратить ещё несколько вечеров на оформление и выкладывание для всеобщего использования на Google Play и 4PDA.

Программа полностью бесплатна и не содержит рекламы.

Поэтапное изучение знаков азбуки Морзе на приём и на передачу по методике близкой к методике ДОСААФ СССР. Приложение можно использовать и в качестве игры из двадцати уровней с увеличивающейся сложностью.

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

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

Русская азбука Mорзе. Обучение https://play.google.com/store/apps/details?id=com.livejourna...

http://4pda.ru/forum/index.php?showtopic=787854

Приложение активно скачивается, почти 65 тысяч установок. В основном людям нравится. Правде не все андроид устройства одинаково полезны. На некоторых есть проблемы на "приём", у Явы есть особенности проигрывания звуков. Так, что у кого не пойдёт - не обижайтесь. Буду не против, если кто-то возьмёт за основу и перепишет программу профессионально.

Русская азбука Mорзе для Андроид Программирование, Android, Азбука Морзе, Выживание, МЧС, Длиннопост, Бесплатно
Русская азбука Mорзе для Андроид Программирование, Android, Азбука Морзе, Выживание, МЧС, Длиннопост, Бесплатно
Русская азбука Mорзе для Андроид Программирование, Android, Азбука Морзе, Выживание, МЧС, Длиннопост, Бесплатно
Русская азбука Mорзе для Андроид Программирование, Android, Азбука Морзе, Выживание, МЧС, Длиннопост, Бесплатно
Показать полностью 4
172

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0]

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

Коммент для минусов прилагается.

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё

Какое-то время назад появилась необходимость вести домашнюю бухгалтерию и собирать статистику по тому какие продукты покупаются, как часто, за сколько, где и т.п., с целью оптимизации расходов и планирования домашнего бюджета.
Но после нескольких неудачных попыток реализации проекта средствами Excel, Access и т.п., пришел к пониманию нескольких ключевых моментов:
1) Решение должно быть на мобильной платформе (т.е. никакого ПК)
2) Действия должны быть максимально простыми и удобными (т.е. чтобы все можно было делать на ходу в пару кликов)
3) Действия не должны занимать много времени

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

Шаг[0] - Получение данных из чека
С переходом России на систему онлайн касс и электронных чеков появилась отличная возможность не переписывать данные из чека, а копировать все с сайта ФНС. Для этих целей было скачено приложение, при помощи которого можно легко отсканировать QR код на чеке и получить электронную версию чека. Выглядит это примерно так:

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё

Далее, нажав "Выделить всё" и "Копировать" мы получаем все что нужно.

Шаг[1] - Преобразование и структурирование данных
Получение данных из чека, как оказалось, самая простая и незатейливая часть всего процесса. Дальше идёт танцы с бубнами.
После довольно продолжительных поисков в Play Market было найдено приложение - простая СУБД для дройда, с возможностью создания форм для заполнения и сохранения данных в виде таблиц, которые в последствии можно экспортировать в Google Drive в виде excel таблицы, и в котором есть возможность создавать довольно сложные скрипты и триггеры по средством JavaScript.
Для полноценной работы и удобства пришлось создать в этом приложении 3 библиотеки:
1) Чеки - для данных из чеков.

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё

В форме для заполнения всего три поля:
"Магазин" - Текстовое поле, где нужно выбрать один из существующих пунктов, или создать новый нажав "+"
"Координаты" - соответственно координаты магазина. Это нужно для большей точности, так как иногда в разных магазинах одной сети ассортимент немного различается.
"Чек" - поле куда нужно вставить данные скопированные из приложения проверки чеков ФНС.
После сохранения формы все выглядит таким образом:

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё

После сохранения добавляются поля:
"Адрес" - Подтягивается автоматически по координатам
"ИНН" - Подтягивается скриптом из чека
"ФН" - Подтягивается скриптом из чека
"ФД" - Подтягивается скриптом из чека
"ФПД" - Подтягивается скриптом из чека
"ККТ" - Подтягивается скриптом из чека
"Итого" - Подтягивается скриптом из чека
"Товары" - Подтягивается скриптом из чека

Так же после сохранения срабатывает триггер, который импортирует данные из чека в две другие библиотеки:
"Товары" - справочник товаров
"Покупки" - таблица с покупками

Вот так выглядит экран редактора скриптов:

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё

После импорта данных в библиотеке "Покупки" всё выглядит примерно таким образом:

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё

Каждую запись можно открыть и тогда будет возможность просмотра данных по покупке более подробно:

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё
Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё

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

Домашняя бухгалтерия, или Javascript от не программиста | Часть [0] Javascript, Программирование, Android, Субд, Excel, Длиннопост, Бухгалтерия, Моё

В случае корректировки каких-либо данных по товару в карточке покупки, данные в справочнике тоже обновляются скриптом.

В последствии, все данные из трёх библиотек - "Чеки", "Покупки" и "Товары" можно легко синхронизировать с Google Drive, где они будут доступны для просмотра и редактирования в виде Excel таблиц.
Для примера, таблица синхронизирована с библиотекой "Товары":
https://docs.google.com/spreadsheets/d/1jghXNRnxEgMop6qzA0pE...

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

Если пост кому-то будет интересен и не утонет в минусах, то в следующий раз расскажу обо всём подробнее...

Показать полностью 8
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: