Как вытащить apk файл из прошивки?

Как открыть и распаковать ZIP и IMG прошивку Андроид. Как распаковывать прошивки KDZ, DZ, BIN, QSB, INB на Android устройствах.

Как вытащить apk файл из прошивки?

Способы извлечения и замены файлов в прошивках Android-устройств

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

Что представляет собой прошивка

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

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

Стоит ли распаковывать прошивку

Распаковка прошивки представляет собой непростой процесс, который требует времени и соответствующих навыков, но является весьма актуальным и полезным.

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

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

Распаковка прошивки Android в ZIP-формате

Любые ZIP-папки распаковываются привычным архиватором, например WinZip. При этом процесс распаковки занимает всего несколько минут, так как объем сжатых файлов не превышает 500 Мб. Скачать и установить программу можно на любой компьютер.

Для распаковки Android-прошивки нужно найти архив на ПК, кликнуть на нем правой кнопкой мыши, выбрать распаковку и указать директорию для переноса всех файлов. Решая, чем распаковать ZIP-прошивку Android или любой другой архив в данном формате, можете воспользоваться такими архиваторами, как WinRAR, 7-Zip, PeaZip или IZArc.

Распаковка IMG-прошивок

Популярным расширением архивов c инсталляционными файлами и прочими данными по прошивке является .img. Это особый подвид архивов, который не разбирается на составляющие привычными методами.

Если вы не знаете, как открыть IMG-прошивку Android на Huawei, понадобится выполнить ряд специфических действий и скачать дополнительный софт. Для работы с прошивками такого типа понадобятся утилиты EXT4 Unpacker и EXT2 Explore. После их скачивания можно приступить к процессу извлечения файлов, который проходит по такой схеме:

  1. Распакуйте IMG-архив прошивки в любую директорию на компьютере.
  2. Запустите программу EXT4 Unpacker и с ее помощью найдите файл system.img.
  3. Сохраните файл system.img с расширением .ext4 с помощью кнопки «Сохранить как».
  4. После распаковки запустите софт EXT2 Explore от имени администратора. Во вкладке «File» выберите пункт «Open Image», укажите место расположения ранее созданного system.ext4.
  5. В правой части окна программы EXT2 Explore нажмите на иконку жесткого диска правым кликом мышки, в выпадающем меню выберите опцию «Save». Будет предложена директория для извлечения, укажите любую удобную папку и дождитесь окончания процесса.

Так осуществляется распаковка IMG-прошивки Android с целью извлечения из нее полезных данных и инсталляторов.

Преобразование KDZ-архива в DZ-архив для последующего создания BIN-папки и привычных архивов

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

Если вы думаете, как самому поменять файлы в прошивке Android формата .kdz, заблаговременно скачайте программы Windows LG Firmware Extract и EXT2 Explore. Процесс распаковки выполняется за схемой:

  1. Запустите Windows LG Firmware Extract, укажите рабочую папку «Working Folder». Ею может оказаться любая директория на ПК, куда вы хотите произвести распаковку.
  2. Нажмите на кнопку «Open», в поле «KDZ / TOT File» выберите файл своей прошивки. Вы увидите все файлы, которые хранятся в KDZ-архиве.
  3. Нажмите на кнопку «Extract KDZ» и дождитесь, пока программа отформатирует архив в DZ-формат. Об успешном окончании процесса будет свидетельствовать надпись «Progress Done».
  4. Перейдите к пункту «DZ File», выберите в нем только что созданную прошивку в DZ-формате. Откроется таблица имеющихся в архиве файлов. Нужно выбрать все файлы с расширением .bin и нажать на кнопку «Extract DZ». После завершения процесса появится надпись «Progress extract DZFile Done».
  5. Для преобразования файлов .bin в формат .img необходимо нажать на кнопку «Merge System bin». В директории, которую вы изначально указали в качестве рабочей папки, будет создан каталог «Merge output», в котором найдете system.img.

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

Распаковка QSB и INB-прошивок

Прошивки с расширением .qsb и .inb являются прерогативой устройств компании Lenovo. Их распаковка не занимает большого количества времени и проводится посредством всего одной утилиты LenovoWinTools.

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

Для работы с прошивкой через редактор LenovoWinTools достаточно установить русифицированную программу, зайти в пункт «Файл» и посредством имеющихся инструментов выбрать свою прошивку. Далее потребуется подождать, и тогда прямо из программы сможете оперировать файлами прошивки.

Как прошить устройства на базе Android

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

Декомпиляция 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

> toolsbinsdkmanager.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

> toolsbinsdkmanager.bat «build-tools;25.0.3» «platform-tools»

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

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

> adb devices

List of devices attached

> adb shell «pm list packages -f -3 | grep 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 (;;) и тому подобное. Но общую структуру кода можно посмотреть, посравнивать с тем, что есть в файлах smali. Для этого нам потребуется dex2jar отсюда: https://sourceforge.net/projects/dex2jar/ и jd-gui отсюда: http://jd.benow.ca/

> dex2jar-2.0d2j-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-tools25.0.3zipalign 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_srcapktool.yml, в параметре minSdkVersion:

> build-tools25.0.3apksigner sign —ks android_keystore.jks —min-sdk-version 14 foobar_fixed.apk

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

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

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

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

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

Яндекс погода

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

Спотифай — ладно, слушаем с женой музыку, сохраняем, один общий плейлист в машине.

2ГИС — многовато для приложения, использующего векторную графику для построения карт без фото-подложки как у Яндекс карт к примеру, но тоже ладно, москва+глобальная карта в любом случае сейчас+еще пара регионов и по ним путеводители с фоточками имеются, так что простительно.

Вконтакте — тоже все понятно, это уже целый комбайн с мини приложениями, огромным функционалом, музыкой и тонной контента.

Но вот Яндекс погода? Какого хрена? Единственное назначение этого приложения — это небольшой виджет на экране который дает мне немного информации. Ладно там есть еще карта осадков на макетной подложке. И всё.

Я далек от написания приложений для андроид, но Яндекс, приложению для своего функцианирования в теории достаточно получать пакеты текстовых данных для формирования информации, откуда там 1 ГБ? Если я не прав — попрошу разбирающихся в теме людей меня поправить и даю добро модераторам на апдейт поста, если будет ответ.

Лучше один раз увидеть

Протестировал, проверил вроде всё что можно. ))

Читайте также  Как открыть PDF файл в двух окнах?

Сегодня пишет пользователь — «при вводе данных — приложение выбрасывает».

Ок, опять тестирую, проверяю на разных телефонах — работает.

По логам — чисто.

Присылают видео — действительно выбрасывает.

И тут, пригляделся внимательнее.

Пользователь вводит число заканчивающееся на ноль, промахивается и нажимает на кнопку сворачивающее приложение.

Уфффф. Расследование окончено. :)

Автономность

Нужен ещё параметр для учёта температуры на улице

Войти в айти. Часть 5

Привет, Пикабу! Да, да.. это очередной пикабушник с кризисом среднего возраста, который вдруг осознал и понял, что с детства мечтал быть программистом. Давненько не было отчёта о моём пути в профессиональный мир разработки. Если вдруг Вам интересен мой опыт, то предыдущие срезы тут:

Вкратце, с чего всё начиналось:

0) Увольнение с военной службы по контракту

2) Высшее образование (заочное) по направлению «Информатика и вычислительная техника»

3) Выучил Java, сейчас изучаю Kotlin и Swift

4) Есть несколько карманных проектов в Play Market, всё довольно простенькое, но стараюсь развивать

5) Женат, детей нет, кот есть

6) В it не работал

Цель — к декабрю 2020 набрать в сумме 1.000.000 загрузок на Android, выучить Swift и выпустить приложение на ios.

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

Давайте подведу итоги того, что я имею на данный момент:

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

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

— Физкультура важна не менее умных книг. Мало движения — тает мотивация, появляется прокрастинация.

— 1.000.000 загрузок набрать не удалось. Цифры гораздо скромнее. На данный момент в сумме загрузок около 240.000, активных пользователей в сумме по приложениям около 83.000

— если из 100 скачавших приложение человек 30 не удаляют его, то это вполне хороший показатель, значит его можно и нужно развивать!

— гайды создания интерфейсов не всегда работают. Порой плюнув на рекомендации корпораций можно сделать что-то, что «зайдёт» людям.

— после 30 на работу в it устроиться можно!

В последнем своём приложении я собрал весь накопленный опыт и понял, что теперь не стыдно рискнуть пройти собеседование. Казалось бы, всего лишь блокнот. Но мне так понравилось работать над деталями, и пробовать новые технологии при работе над ним, что я могу говорить теперь об этом часами. Оказывается, что к созданной тобой программе можно испытывать чувства привязанности и симпатии, что-то вроде любви к своему питомцу. Странно это=)

Результаты по Android меня вполне удовлетворили, чего не сказать о ios. Времени и сил не хватило на всё, буду заниматься им в рамках общего развития. Надеюсь что к весне смогу сделать что-то простенькое.

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

Если мечтаете сменить род деятельности, выделите время, составьте план, определите сроки и вперёд! Другой жизни не будет, а занятие любимым делом профессионально — это очень, очень круто!

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

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

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

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

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

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

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

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

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

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

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

Модификация стоковых прошивок для Android. Часть 1

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

Каково же было мое разочарование, когда я приобрел телефон из поднебесной, где заводскими настройками было запрещено использование Google, Skype, Facebook и других приложений. В принципе, на некоторые вещи можно было закрыть глаза, но когда мой телефон не подразумевал использование учетной записи Google — я взял с себя обещания обязательно разобраться во что бы мне это не стало.

Прошло пол года и мои кастомные прошивки с успехом используются по всему миру.

В данной серии статей пойдет речь о том, как делать reverse программирование для Android, реализовывать патчи, твики и моды.

Преамбула

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

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

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

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

Подготовка среды

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

1. Android SDK. Это среда разработки приложений для Андроид. Для того чтобы делать модификации, нам обязательно придется проверять наш программный код. Среда разработки самое лучшее, что мы можем использовать.
2. Android Kitchen. Данная утилита позволит вам работать с образами системных партиций официальной ну или неофициальной прошивки.
3. JD-GUI. Декомпилятор программного кода языка Java. Сразу отмечу, что это самый лучший декомпилятор в плане удобства использования.
4. DJ Java Decompiler. Еще один декомпилятор, или дизассемблер, как некоторые любят называть, программного кода языка Java. Не удобен в плане использования, но разбирает код, который иногда не понимает JD-GUI.
5. smali. Еще один дизассемблер, но уже dalvik кода. smali нужен для дизассемблирования, а backsmali ассемблирования кода.
6. dex2jar. Утилита для конвертации исполняемых файлов Dalvik кода.

Преобразование прошивки

Разумеется, прошивка, которая стоит у вас на телефон от производителя оптимизирована с целью сокращения энергопотребления. Для того чтобы прошивку можно было изменять, ее необходимо преобразовать в формат, позволяющий изменять код. Для этого используется Android Kitchen. Можно конечно и руками, как я и делал раньше, пока не нашел эту самую «кухню». Как вытаскивать системную область из телефона, устанавливать среду, делать DEODEX прошивки, вы можете прочитать в интернете. Если вам уже ничего не понятно, я думаю стоит повременить со статьей, пока вы не наберете достаточно опыта.

Читайте также  Курс обучения созданию сайтов на WordPress

После того, как прошивка из оптимизированного вида (ODEX — оптимизированный dalvik исполняемый код, если мне не изменяет память) стала DEODEX (то бишь НЕ оптимизированной), все исполняемые файлы готовы к модификации.

Непосредственно модификации

Создание патчей

Как я уже и рассказывал, мой телефон изначально имел запрет на использование Google. Ну хоть ты тресни, на Playstore не зайти, учетную запись не настроить, телефонная книга толком не синхронизируется. Зачем нужен такой Android? Долго копаясь в логах (logcat) самого устройства, я нашел записи, которые говорили о том, что использование Google запрещено. Самое не удобное в Android, вы видите лог, но не знаете какое системное приложение его производит. Чтобы отыскать от куда ноги растут, мне пришлось распотрошить все системные приложения до дизассемблированного Java кода. Это заняло достаточно времени, но я до сих пор пользуюсь проделанной работой при анализе и поиске нужного кода. Этапы получения подобного инструментария следующие:
1. Сделать DEODEX всей прошивки
2. Вашу новую DEODEX прошивку надо будет собрать и прошить на телефон. Как это делается — тема другой статьи.
3. Из каждого файла, находящегося в /system/framework вытащить файл classes.dex и переконвертировать в JAR посредством dex2jar.
4. Каждый полученный JAR открыть в JD-GUI и пере-сохранить в исходный код
5. Распаковать исходный код из архива.

В итоге у меня получилось столько папок, сколько было JAR файлов в /system/framework, и каждая папка имела структуру исходных кодов Java.
Путем несложных манипуляций, я быстро отыскал то место, которое генерировало записи в logcat.

Не будем рассматривать всю логику запрета, так как для каждого случая это отдельная история. Мне пришлось потратить пару часов, прежде чем я нашел где производятся проверки, построить в голове блок схему алгоритма и понять куда надо лезть, чтобы алгоритм чуть чуть «попортить».

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

Код находился в файле HTCExtension.jar, а класс, который содержал данную подпрограмму находился в comhtcutilcontactsBuildUtils$Customization.java

Распаковка и анализ оригинального файла

1. Сперва нам надо взять оригинальный DEODEX JAR файл, который отвечает за нужную нам часть кода. В нашем случае HTCExtension.jar.
2. Открыть любым архиватором и вытащить от туда classes.dex
3. С помощью конвертера dex2jar преобразовать его в JAR файл. Команда: dex2jar.bat classes.dex
4. Открыть полученный classes_dex2jar.jar файл в JD-GUI.
5. Да, чаще всего JD-GUI декомпилирует код не так как он выглядит в оригинале, оно и понятно, но читать вполне можно. В исходнике мы видим, что подпрограмма проверяет параметры проекта и языковой флаг прошивки. В нашем прискорбном случае возвращается значение TRUE.

6. Чтобы сделать патч, нам надо дизассемблировать сам Dalvik код. Для этого используем baksmali. Удобнее всего создать отдельную папку и положить туда три файла вместе: HTCExtension.jar, smali.jar и baksmali.jar. Даем команду java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar

— это API вашей версии Android. Для JB — это 16
— папка, где находятся все фреймворки прошивки.

В моем случае это была команда
java -Xmx512m -jar baksmali.jar -a 16 -d S:devAndroidAndroid-KitchenWORKING_JB_15systemframework -o HTCExtension -x HTCExtension.jar
7. В нашей вновь созданной папке появилась папка HTCExtension, а в ней наши файлы с Dalvik кодом.
8. Отыскиваем файл по пути comhtcutilcontactsBuildUtils$Customization.java и смотрим код:

9. Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:

10. Самый простой способ спасти отца русской демократии, это изменить код на следующий:
, то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как
11. Да, метод ,будет работать. Но мы же не ищем легких путей — это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде

12. А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.

Создание Dalvik кода

1. Открываем Android SDK.
2. Создаем новый проект, и в наш единственный тестовый класс пишем следующий код

3. Компилируем наш проект и затем берем собранное приложение из рабочей области.
4. Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5. Даем команду
8. Все, код для патчинга готов.

Накатывание патча

1. Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2. Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем comhtcutilcontactsBuildUtils$Customization.java файле.

3. Сохраняем файл. Да, забыл сказать, редактор нужен нормальный, например Notepad++ или EditPlus. Кому какой нравится.

Компиляция и сборка патченного JAR файла

1. С помощью backsmali мы распотрошили наш JAR файл, а теперь его надо собрать обратно.
2. Даем команду java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3. В нашей папочке появляется файлик classes.dex
4. Снова открываем HTCExtension.jar файл архиватором и заменяем в нем существующий classes.dex на наш только что созданный.
5. Все, наш HTCExtension.jar содержит модифицированный программный код.

Замена оригинального файла на патченный

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

1. Заменить текущий рабочий файл можно следующими командами, если у вас уже стоит DEODEX прошивка и имеется root доступ:

1-ая команда закидывает патченный файл на флешку
2-ая команда открывает shell
3-ая команда дает root доступ
4-ая команда монтирует систему в режим чтения/записи
5-ая команда делает резервную копию файла
6-ая команда перезаписывает существующий файл новым патченным.
7-ая команда настраивает разрешения
8-ая команда удаляет кэш
9-ая команда делает перезагрузку устройства.

2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.

Эпилог

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

К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.

Как скачать (скопировать) установочный apk файл с Android устройства (планшета, телефона, читалки)

Например, прекрасное приложение для чтения RSS лент новостей gReader было удалено из Google Play. Его конечно можно скачать из непроверенных источников, в том числе с форума 4pda. Но, к сожалению, разработчики большинства приложений и магазин приложений Гугл Плей не предоставляют проверочные хэш суммы (md5, sha1, sha256), поэтому нет никакой гарантии того, что в установочный файл не было внедрено зловредное программное обеспечение.

Но поскольку установочный .apk файлы сохраняются на Android устройстве после установки, то можно скачать (скопировать) их с Андроид устройства и установить уже без магазина приложений. При этом на Android планшете/телефоне/читалке/приставке может понадобиться включить разрешение на установку приложений из недостоверных источников.

Как скачать (скопировать) установочный apk файл с Android устройства при помощи ADB

  1. В Windows может понадобиться установка USB драйвера для вашего Андроид устройства. В Linux этого не требуется в 99% случаев.
  2. Установите Android Device Bridge (ADB). Для этого нужно скачать бинарные файлы ADB для вашей платформы (Windows, Mac, Linux). Для работы с ADB, достаточно скачать Android SDK Platform-Tools.

В Ubuntu установить ADB проще простого, достаточно выполнить следующую команду в терминале:

sudo apt install android-tools-adb

  • Подключите Android устройство к компьютеру по USB кабелю (ADB можно пользоваться и по Wi-Fi, но для простоты опустим этот случай).
  • Для вывода всех установленных на Андроид устройстве APK пакетов наберите в терминале (командой строке)

    adb shell pm list packages

    Если мы знаем часть названия APK пакета, то можем вместо вывода всех приложений сразу вывести только те, в которых встречается эта часть названия. Например, для поиска gReader достаточно ввести в наберите в терминале (командой строке)

    adb shell pm list packages -f | grep название_пакета

    В ответ должны получить полное название пакета. В случае с gReader это будет

    adb shell pm list packages -f | grep greader
    package:com.noinnion.android.greader.rea der

    Далее нужно найти расположение пакета при помощи команды pm path название_пакета (без приставки «package:» из команды pm list packages)

    adb shell pm path com.noinnion.android.greader.reader
    package:/data/app/com.noinnion.android.g reader.reader-1/base.apk

    Остаётся только скачать (скопировать) APK файл с Android устройства на компьютер при помощи команды adb pull путь_к_пакету имя_пакета.apk. При этом можно опустить имя_пакета.apk, тогда пакет сохранится с тем же самым именем, под которым хранится на устройстве (для greader и многих других приложений это будет base.apk)

    adb pull /data/app/com.noinnion.android.greader.r eader-1/base.apk=com.noinnion.android.gr eader.reader greader.apk

    Если этот способ кажется слишком сложным, то смотрите дальше.

    Бесплатное Андроид приложение AirDroid позволяет получить доступ к Android устройству с компьютера по Wi-Fi. При этом мы сможем видеть на экране компьютера экран смартфона, но в данном случае нам понадобится другая полезная фишка приложения — способность передавать файлы с Android устройства на компьютер (скинуть файлы с компьютера на Android смартфон, планшет, читалку, ТВ приставку тоже можно). При этом AirDroid удобно показывает список Андроид приложений установленных на устройстве, так что искать их расположение не придётся.

    Как скачать (скопировать) установочный apk файл с Android устройства при помощи Андроид приложения AirDroid

    1. Установите приложение AirDroid на Android устройство.
    2. Подключите устройство по Wi-Fi
    3. Запустите AirDroid
    4. Регистироваться нам вовсе не понадобится. поэтому пропускаем этот шаг (нажав на кнопку «Пропустить»).
    5. Нажмите «AirDroid Web»
    6. Введите на компьютере в интернет-обозревателе (браузере) адрес, указанный в AirDroid Web, например: http://192.168.1.177:8888
    7. На Android устройстве согласитесь на подключения компьютера к телефону, нажав на кнопку «Принять»
    8. В браузере на компьютере должны появится «рабочий стол» с иконками. Нажмите на Apps
    9. Если навести мышкой на нужное приложение, то напротив этого приложения появляется иконка Download, позволяющая скачать данное приложение на компьютер. Также можно поставить галочки напротив всех приложений, которые хотите скопировать с устройства на компьютер, после чего нажать кнопку Download правом верхнем углу окна «Apps»

    Как извлечь APK-файлы из Android-устройства. [Пошаговая инструкция]

    Здравствуйте читатели нашего сайта. Как-то один из посетителей попросил помощи, ему понадобилось извлечь APK-файлы из Android-смартфона. Таким образом, мы решили описать ответ на данный вопрос в этой F.A.Q. статье. С помощью данной операции можно сделать резервирование всех установленных приложений на смартфоне, планшете или других гаджетах которые работают под управлением операционной системы Android.

    В каких случаях делается резервирование установленных приложений?

    Ситуация первая. Вам нужно сбросить телефон к заводским настройкам, но доступа к интернету нет или только мобильный. Вам совсем не хочется потом скачивать заново приложения из Google Play, поскольку это займет много времени. Именно для таких случаев существует возможность извлечения APK-файлов из Android-устройства или скачивания ранее установленных APK-файлов на компьютер.

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

    Таких ситуаций существует множество.

    Как извлечь APK-файлы из Android-устройства?

    Для выполнения этой задачи нам пригодится бесплатное приложение «ES Проводник», которое можно найти на Google Play. Почему именно этот проводник? Да все просто, это отличный и удобный в использовании диспетчер файлов и он уже имеет интегрированную функцию резервирования приложений. С помощью данной функции можно извлечь нужные APK-файлы из Android-устройств.

    Способ 1. Итак, Вы установили «ES Проводник», теперь запускаем его:

    Заходим в меню приложения для этого нажимаем указанную нами кнопку в верхнем левом углу экрана устройства. Раскрываем раздел «Библиотеки» и нажимаем APPs.

    Если Вы все сделали правильно – перед Вами откроется окно с установленными пользовательскими приложениями. Далее выбираем приложение которое нужно извлечь и нажимаем кнопку Резервировать в нижней части экрана.

    Рисунок 3 Рисунок 4

    Все извлеченные приложения находятся в папке «Память телефона/backups/apps». Возможно, Вы заметили что на рисунке 3 и 4 некоторые файлы выделены красным или зеленым цветом, так вот: зеленым цветом помечены приложения которые были резервированы ранее и находятся в папке apps, а красным – приложения, которые тоже были извлечены ранее но удалены из папки apps (удалены только извлеченные файлы, а не установленные). Вот в принципе и все, что касается извлечения этим способом.

    Теперь с этими файлами можно делать все что угодно: скинуть на компьютер, отправить другу по Bluetooth или по электронной почте. Еще раз напомним – этот способ делает резервирование только тех приложений, которые были установлены пользователем, но не системных. Для резервирования системных приложений пользуйтесь способом 2.

    Способ 2. Запускаем тот же самый «ES Проводник». В верхней части экрана находится выбор разделов памяти (рисунок 6) или заходим в меню «Локальное хранилище» (рисунок 7) и выбираем пункт /Устройство.

    Рисунок 6 Рисунок 7

    Далее надо перейти в system/app. Здесь находятся все приложения, которые установлены на устройстве: как пользовательские, так и системные. Затем ищем нужный APK-файл и копируем его в нужную папку. Таким образом, Вы получите готовый APK-файл для инсталляции на других гаджетах.

    Мы надеемся, что данный пост помог решить поставленную задачу и Вам удалось извлечь APK-файлы из Android-устройства. Если Вам известны другие способы резервирования программ или возникнут подобные вопросы – напишите нам.

    Оставайтесь с нами, впереди еще много интересного.

    Как вытащить apk файл из прошивки?

    Обновлено 2015-09-17: исправлены ссылки на программы

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

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

    Предварительная подготовка

    Нам понадобится телефон с андроидом, дата-кабель к нему, настроенный для работы с ADB компьютер 1 , установленный Android SDK (каталоги tools и platform-tools должны быть вынесены в переменную окружения PATH ).

    Также на телефоне необходимо разрешить отладку через USB.

    Ещё необходимо добавить какой-нибудь каталог, в который вы можете писать, в переменную окружения $PATH, у меня туда добавлен каталог

    Получение apk-файла приложения

    Есть несколько способов добыть файл с пакетом приложения:

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

    Первые два способа тривиальны, о них не будем рассказывать, а вот третий достоин внимания. Подключаем телефон кабелем к компьютеру, проверяем, что девайс видится командой adb :

    Допустим, нас интересует приложение Google+, очевидно, что где-то в названии приложения должно быть слово plus , ищем:

    Что мы только что сделали? Мы выполнили команду на стороне девайса ( adb shell ), команда называется pm (т.е. package manager), опция команды list packages говорит сама за себя, опция -f включает отображение связанных с пакетом файлов; а plus — это фильтр.

    Видим, что интересующее нас приложение лежит в файле /data/app/com.google.android.apps.plus-1.apk , вытаскиваем его на компьютер:

    Разбор apk-файла на части

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

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

    Для этого есть замечательный инструмент android-apktool, полная инструкция по установке описана на официальном сайте. Нас интересует версия 2.X, скачиваем jar-файл в каталог

    /bin , туда же скачиваем скрипт-обёртку, примерно так:

    Проверяем в терминале, что команда apktool работает, просто набираем и смотрим. Если выдаётся ошибка, фиксим, например, пермиссии на файл. Когда всё заработает, можно приступать к декодированию, всё просто:

    После завершения процесса внутри каталога gplus будут лежать декодированные (в некоторой степени) внутренности пакета. К примеру, там уже можно смотреть в нормальном виде xml-файлы (макеты интерфейса или манифест). Там даже можно увидеть слегка декодированные исходники приложения, но не в виде java-кода, а в виде smali-файлов, об этом формате подробнее можно тут прочитать, при желании их можно даже редактировать и затем собрать назад в apk-пакет (это также можно сделать при помощи apktool ).

    Дизассемблирование до java-кода

    Следующий шаг — попытаться добраться до близкого к оригинальному java-кода приложения. В этом нам поможет программа dex2jar, качаем с сайта проекта архив с программой (файл вида dex2jar-0.0.9.8.tar.gz), она тоже написана на java, внутри каталог с кучей файлов, из которых нам понадобится каталог lib (скопируем его целиком в

    и dex2jar.sh , скопируем его туда же в

    /bin . Запускаем на примере нашего пакета (на большом пакете программа может долго работать):

    После выполнения получим в этом же каталоге jar-файл (в нашем случае — com.google.android.apps.plus-1_dex2jar.jar ).

    Это самый обычный java jar archive, содержащий обычные class-файлы со скомпилированным java-кодом.

    Декомпиляция class-файлов в java-файлы

    Финальный этап — это получение более-менее читабельного java-кода из class-файлов с байткодом. Эта задача частично решается программой из предыдущего раздела: скопируем в каталог

    /bin скрипт d2j-jar2jasmin.sh . Результатом работы скрипта является каталог с файлами в формате jasmin, что, однако, вовсе не java-код, но тоже может оказаться полезным для анализа:

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

    Что осталось за кадром

    Я не рассматриваю вопрос преобразования odex-файлов в dex-файлы. Об этом можно самому прочитать вот тут, например.

    Аналогично вопрос обратной сборки файлов в apk-пакет тоже не рассматривается. Так же как и подписывание/выравнивание apk-пакета.

    Ссылки

    • apktool
    • dex2jar
    • Java decompiler

    особенности настройки линукс-машины для работы с телефоном по дата-кабелю раскрываются в соответствующей статье на сайте developer.android.com ↩

    Комментарии

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

    Да чё вы так всё усложнили?! Тут проще чем написать слово «молоко»! Просто поменяйте расширение «apk» в «rar». И всё!

    P.S. Написано на Си.)

    Читай статью повнимательней:

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

  • Борис Аладышкин/ автор статьи

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

    Понравилась статья? Поделиться с друзьями:
    Itsovet61.ru
    Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: