Создание патча update.zip для прошивки через рекавери



Реп: (274)
 
FAQ по созданию патча update.zip для прошивки через рекавери

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

(ключевые слова)


При возникновении ошибки максимально точно её сформулируйте (и обязательно выложите лог) и под спойлер прикрепите код скрипта.
Но предварительно попробуйте сами с ней разобраться, выполнив предложенные действия описанные под спойлером "Ошибки"


Напоминаю, тут не стол заказов. Автору в qms НЕ писать. Посты с просьбой собрать zip для "хххх" Recovery оффтоп

Все заявки на создание/редактирование update.zip оставляйте в теме Стол заказов на создание и редактирование патча update.zip для прошивки через рекавери


Сообщения, не относящиеся к теме обсуждения (оффтоп), удаляются без предупреждения


Возможности
  • Добавление нескольких пользовательских/системных приложений "за один клик" (одним патчем).
  • Добавление/удаление системных приложений без root прав и вспомогательных программ.
  • Изменение прошивки (замена файлов, украшательства и т.д.).
  • Обновление программы или прошивки.
  • Переразметка памяти (обсуждения в другой теме)
  • Получение root прав SuperUser, SuperSU, Magisk


Инструменты и файлы
Инструменты
  1. Установленный на телефоне кастомный рекавери (CWM/TWRP)
  2. NotePad++ (редактор с сохранением Unix формата)
  3. Zip_signer (подписчик архивов)
  4. Архиватор ZIP
  5. Файл-заготовка sample.zip (либо update-binary для ручной сборки)
    Прикрепленный файлZip_signer.rar ( 13.28 КБ )
    Прикрепленный файлsample-patch.rar ( 4.77 МБ )
    Прикрепленный файлupdate-binary.rar ( 113.25 КБ )
  6. Дополнительные версии бинарника. Прикрепленный файлbinary_all.rar ( 649.36 КБ )
  7. Бинарники (архив/исходники)
    Бинарники (исходники)
    Исходники бинарника, основная ссылка:
    https://android.google…ootable/recovery/+refs
    выбираем к примеру "android-9.0.0_r18" , потом ищем папку "updater", в папке "updater" исходники бинарника

    К примеру https://android.google…droid-9.0.0_r18/updater - можно глянуть все команды которые может выполнить бинари в андроид 9.0.0 (в файле install.cpp, в самом низу)

    © Octanium

  8. Подписчик для Linux: Прикрепленный файлsignapk.zip ( 9.24 КБ )
    + Android update-script (Пост Няшная #63580419)
Внимание! Патчи создаются только для мод.рекавери и результативно работают только в них. В стоковых рекавери (на аппаратах "из коробки") патчи не работают.

Программы | Скрипты для создания update.zip
Создание
Для того, чтобы установить новые системные приложения apk в Ваш аппарат, необходимо выполнить три шага:
  1. Собрать свой update.zip (из заготовки sample.zip)
  2. Подписать update.zip утилитой Zip_signer(Не обязательно!)
  3. Закинуть на флэшку и установить в аппарат через ClockWorkMod Recovery
Эти шаги являются универсальными, т.е. подойдут для выполнения других подобных операций.

ШАГ №1
Собрать новый update.zip, используя "болванку" sample.zip
Порядок использования sample.zip:
  1. Разархивировать архив sample.zip
  2. Удалить файлы подписи META-INF/CERT.RSA, CERT.SF, MANIFEST.MF (т.к. 2м шагом мы их будем создавать для своей сборки)
  3. Поместить в папку /data/app свое пользовательское приложение (xxxxx.apk)
  4. При необходимости отредактировать файл updater-script (подробнее позже)
  5. Заархивировать всё (META-INF и data) ZIP'ом без сжатия
ШАГ №2
Подписать update.zip с помощью утилиты Zip_signer
Порядок использования утилиты Zip_signer:
  1. Переименовать Ваш отредактированный (т.е. уже с приложением внутри) sample.zip в update.zip
  2. Поместить его в папку с программой Zip_signer
  3. Запустить файл zip_signer.bat
  4. Дождаться, пока процесс будет завершен
  5. В папке появится файл update-finished.zip - это и есть подписанный файл
  6. Переименовать update-finished.zip по своему усмотрению (согласно логике патча)
ШАГ №3
Установка нового приложения
  1. Перекинуть (переименованный) update-finished.zip на флэшку и установить его в аппарат через TWRP или CWM (install zip from sdcard -> chooze zip from internal sdcard -> Yes, install sample.zip)
  2. Перезагрузить аппарат
Создание в Linux
Действия те же самые как описано выше, за исключением подписи.
Подпись ZIP-архива:
  • Скачиваем signapk.zip и разархивируем в папку <папка-signapk>
  • Назначаем права для всего содержимого - "rwxrwxrwx" (chmod -R 777 ~/<папка-signapk>)
  • Выполняем программу подписи (signapk <имя архива с расширением>)



Маленький мануальчик по созданию апдейт скрипта на основе system.img и boot.img

Внимание! Патчи создаются только для мод.рекавери и результативно работают только в них. В стоковых рекавери (на аппаратах "из коробки") патчи не работают.

Структура патча | Редактирование update-script
Структура
Корень патча:
  • папка META-INF
  • папка источник установки приложений (system, data, sdcard, cache, sd-ext)
    Обязательные файлы:
  • META-INF/com/google/android/update-binary - системное средство запуска данного патча, также создает временную рабочую папку tmp
  • META-INF/com/google/android/updater-script - выполняемый скрипт по которому и происходят операции копирования и т.д.


Редактирование
Разберем sample.zip
Патч добавляет пользовательское приложение MyPiano в Data.

Код:
ui_print("=== Patching new application ===");

- Выводит на экран надпись и пустую строку.
run_program("/sbin/busybox", "mount", "/data");
- (Монтирует data) открывает доступ для работы с системным разделом.
package_extract_dir("data", "/data");
- Копирует содержимое папки data в соответствующую папку на устройстве.
set_perm_recursive(1000, 1000, 0771, 0644, "/data/app");
- Устанавливает владельца, группу и разрешения для содержимого папки на устройстве (инфо по коду ниже)
run_program("/sbin/busybox", "umount", "/data");
- Размонтирование data.
ui_print("=== Complete ===");
- Выводит сообщение о завершении процесса.

  • busybox - приложение для выполнения командной строки, устанавливается с кастомным рекавери, находится в ramdisk/sbin. в кастомных прошивках зачастую добавляют его в system/xbin


Возможные исправления для своих целей
  1. Изменение прав
    set_perm_recursive(1000, 1000, 0771, 0644, "/data/app/");

    можно заменить на:
    set_perm(1000, 1000, 0644, "/data/app/mypiano.apk");
    - В данном случае права изменятся только лишь для добавленного приложения
  2. Добавление системного приложения
    а. Корневая папка data меняется на system
    б. В коде updater-script тоже самое
    в. Права назначаются через set_perm только для добавляемого приложения, для системных код 0675 (инфо по кодам ниже)
  3. Удаление приложения/файла
    В код добавляется строка подобного вида:
    delete("/system/app/OldApk.apk");

    При условии что busybox находится в другом месте, возможная замена
    run_program("/sbin/busybox", "mount", "/data");
    - на -
    run_program("/system/xbin/busybox", "mount", "/data");

    либо
    mount("ext4", "EMMC", "/dev/block/mmcblk0p5", "/data");
    - При этом уточнить расположение блока нужного Вам раздела

Правилами хорошего тона в написании любого кода является использование TAB'ов (отступов в начале строки).
Пример-пояснение
Сначала это вырабатывается как привычка, а в дальнейшем при просмотре сложного кода - очень облегчает "чтение" кода, поиск необходимой информации, наглядность разделов/этапов кода.
В примере простенький скрипт, в котором основные рабочие функции выделены отступом. Т.е. все остальные попросту для красоты и удобства (их можно даже удалить).
Также возможно использование двойных и тройных TAB'ов, наглядный пример - написание кода сайтов html.
show_progress(1.000000, 2);
ui_print(" ");
ui_print("========================================");
ui_print("---------- Silent AUDIO Patch ----------");
ui_print("========================================");
ui_print("> Mounting system...");
run_program("/sbin/busybox", "mount", "/system");
ui_print("> Copying files...");
package_extract_dir("system", "/system");
ui_print("> Fixing permissions...");
set_perm_recursive(0, 0, 0755, 0644, "/system/media/");
ui_print("> Unmounting system...");
run_program("/sbin/busybox", "umount", "/system");
ui_print("------- Changing AUDIO Complete --------");
ui_print(" ");


Описание команд updater-script | Примеры использования команд
Команды
package_extract_dir
Синтаксис: package_extract_dir("<src-dir>", "<dst-dir>");
Копирует содержимое <src-dir> в <dst-dir>. Файлы в <dst-dir> имеющиеся в <src-dir> перезаписываются.
Пример: package_extract_dir("system", "/system"); Скопирует файлы из папки update.zip/system в /system

package_extract_file
Синтаксис: package_extract_file("<src-file>", "<dst-file>");
Копирует файл <src-file> в <dst-file>. Если файл <dst-file> существует, то он перезаписывается.
Пример: package_extract_file("test.sh", "/tmp/test.sh"); Скопирует файл test.sh из update.zip в /tmp/test.sh

format
Синтаксис: format("MTD", "<root>");
Форматирует раздел <root>(см. приложение).
Пример: format("MTD", "system"); Полностью отформатирует /system . Примечание: форматирование удаляет данные необратимо.
Пример 2: format("ext4", "EMMC", "/dev/block/mtdblock5", "0", "/system");
Определение номера блока под спойлером "инфо и материалы".

delete
Синтаксис: delete("<file1>"[, "file2", ..."fileN"]);
Удаляет файл(ы)
Пример: delete("/system/app/Calculator.apk"); Удалит Calculator.apk из папки system/app.

delete_recursive
Синтаксис: delete_recursive("<dir1>"[, "dir2", ..."dirN"]);
Рекурсивно удаляет папку(и) со всем содержимым
Пример: delete_recursive("/data/dalvik-cache"); Удалит папку /data/dalvik-cache со всем содержимым.

run_program
Синтаксис: run_program("<filetorun>"[, "<opt1>", "<opt2>", "<opt3>"]);
Запускает программу(скрипт) <filetorun>.
Пример: run_program("/tmp/install_busybox.sh"); Запустит скрипт /tmp/install_busybox.sh.

set_perm
Синтаксис: set_perm(<uid>, <gid>, <mode>, "<pathtofile>"[, ... "pathtofileN"]);
Устанавливает владельца, группу и разрешения для файла или папки, как ‘chmod’, ‘chown’, и ‘chgrp’ всё в одном
Пример: set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh"); Установит владельца, группу и разрешения для файла /system/etc/init.goldfish.sh

set_perm_recursive
Синтаксис: set_perm_recursive(<uid>, <gid>, <dir-mode>, <file-mode>, "<path>"[, ... "<pathN>"])
Рекурсивно устанавливает владельца, группу и разрешения для содержимого папки. <dir-mode> - для папок, <file-mode> - для файлов.
Пример: set_perm_recursive(0, 0, 0755, 0644, "/system/app"); Установит права для содержимого /system/app, для папок - 0755, для файлов - 0644.

show_progress
Синтаксис: show_progress(<fraction>, <duration>);
Продвижение прогрессбара на долю <fraction> за <duration> секунд. <duration> может быть нулевым для продвижения его по командe set_progress, а не по времени.
Пример: show_progress(0.100000, 1); Увеличит прогресс на 0.1 часть за 1 секунду

set_progress
Синтаксис: set_progress(<fraction>);
Устанавливает положение прогрессбара на долю <fraction>, для самого последнего вызова команды show_progress.
Пример: set_progress(0.500000);

symlink
Синтаксис: symlink("<link-target>", "<link-path1"[, "<link-path2>", "<link-path3>"]);
Создает символическую ссылку (как ‘ln-s’). <link-path> пишется в формате root:path, а <link-target> в формате целевой файловой системы (и может быть относительным). Википедия Symlink.
Пример: symlink("/data/app_s", "/system/app"); Создаст символическую ссылку на папку /data/app_s для папки /system/app

mount
Синтаксис: mount("<kind>", "<what>", "<path>");
Монтирует <what> в путь <path>. <what> должно быть название раздела, если <kind> это "MTD", или блок памяти если <kind> это "vfat"
Пример: mount("MTD", "userdata", "/data");

unmount
Синтаксис: unmount("<path>");
Отключает <path>.
Пример: unmount("/data");

ui_print
Синтаксис: ui_print("<message>");
Выводит на экран сообщение <message>
Пример: ui_print("Formatting SYSTEM...");

sleep
Синтаксис: sleep(<time>);
Пауза процесса на <time> секунд
Пример: sleep(5); - пауза 5 секунд, после чего код скрипта выполняется дальше.

wipe data-Подробнее

Несколько полезных команд для проверки версии Android перед установкой обновления
Информацию по запуску shell-скриптов с помощью updater-script + ещё вариант
Команды android 4.4+
set_metadata / set_metadata_recursive
Синтаксис: set_metadata (?????);
Устанавливает владельца, группу и разрешения (новая команда взамен set_perm для andriod 4.4.*)
Примеры: Android update-script (Пост #32151495)
Создание патча update.zip для прошивки через рекавери (Пост kory-vadim #81945464)

set_metadata / set_metadata_recursive
Синтаксис:
set_metadata("имя файла", "ключ1", "значение1", "ключ2", "значение2", ...)
set_metadata_recursive("имя директории", "ключ1", "значение1", "ключ2", "значение2", ...)
Ключи:
* uid
* gid
* mode (set_perm_extd only)
* fmode (set_perm_extd_recursive only)
* dmode (set_perm_extd_recursive only)
* selabel
* capabilities
первые три (uid, gid, mode) это тоже самое что и в chmod, заполняется "uid", 0, "gid", 1000, "mode", 06754.
для установки прошивки хватает трех ключей "uid", 0, "gid", 1000, "mode", 06754.
Пример: set_metadata("/system/xbin/shelld", "uid", 0, "gid", 1000, "mode", 06754, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
set_metadata_recursive("/system/xbin", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0755, "capabilities", "0x0", "selabel", "u:object_r:system_file:s0");

команды для Nexus'ов
block_image_update("/dev/block/platform/msm_sdcc.1/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");
Синтаксис: block_image_update("Путь к блоку раздела", package_extract_file("список информации для патча (?) "), "образ", "патч образа");
я так понимаю, что так прошивается сильно сжатая прошивка (образ системы).
Еще ifelse
Пример: ifelse(is_mounted("/system"), unmount("/system")); - если раздел сустем смонтирован дается команда на его размонтирование, если размонтиовать то нечего не происходит.

Информация по атрибутам set_metadata и подобным командам на Android 4.4+
Android update-script (Пост blackeangel #50803606)
Описание откуда берутся "u:object_r:uncrypt_exec:s0" и подобные атрибуты. . .
Примеры
Пример скрипта который может удалять\перемещать\бекапить файлы и вести лог действий
Android Script Creator (Пост Octanium #51085030)

Временный Busybox
временный busybox
Используется при отсутствии busybox, либо чтоб не привязываться к его расположению в системе.

package_extract_file("busybox", "/tmp/busybox");
set_perm(0, 0, 0777, "/tmp/busybox");
run_program("/tmp/busybox", "mount", "/data");
...
run_program("/tmp/busybox", "unmount", "/data");
©

Команды перезагрузки
перезагрузка
Код "перезагрузки" и "перезагрузки в рекавери" соответственно:

run_program("/sbin/reboot");

run_program("/sbin/reboot", "recovery");

Команда для новых версий андроид так же обязательно читаем Этот пост.

run_program
run_program
Установка BusyBox ©
Файл busybox кладем в /system/xbin
В скрипте updater-script:
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 1000, 0755, "/system/xbin/busybox");
run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");

------------------------------------------------------------

...

show_progress / set_progress
set_progress

Пример №1 - Android Script Creator (Пост Octanium #44840383)

------------------------------------------------------------

Пример №2

Когда скрипт выполняется очень быстро (1-4 секунд) я использовал следующий код:
show_progress(1.000000, 3);
Т.е. за 3 секунды прогресс бар доходит до 100% (постепенно).
Число "3" выбрано как [время установки скрипта]+1 сек, чтоб прогресс бар при установке гарантированно двигался и не успел дойти до 100% раньше, чем скрипт установится.

------------------------------------------------------------

...

sleep
sleep

Пример №1 - Android Script Creator (Пост Octanium #44840383)

------------------------------------------------------------

...

package_extract_dir
package_extract_dir
Синтаксис: package_extract_dir("<src-dir>", "<dst-dir>");
Копирует содержимое <src-dir> в <dst-dir>. Файлы в <dst-dir> имеющиеся в <src-dir> перезаписываются.
Пример: package_extract_dir("system", "/system"); Скопирует файлы из папки update.zip/system в /system

package_extract_file
package_extract_file
Синтаксис: package_extract_file("<src-file>", "<dst-file>");
Копирует файл <src-file> в <dst-file>. Если файл <dst-file> существует, то он перезаписывается.
Пример: package_extract_file("test.sh", "/tmp/test.sh"); Скопирует файл test.sh из update.zip в /tmp/test.sh

format
format
Синтаксис: format("MTD", "<root>");
Форматирует раздел <root>
Пример: format("MTD", "system"); Полностью отформатирует /system . Примечание: форматирование удаляет данные необратимо.

delete
delete
Синтаксис: delete("<file1>"[, "file2", ..."fileN"]);
Удаляет файл(ы)
Пример: delete("/system/app/Calculator.apk"); Удалит Calculator.apk из папки system/app

delete_recursive
delete_recursive
Синтаксис: delete_recursive("<dir1>"[, "dir2", ..."dirN"]);
Рекурсивно удаляет папку(и) со всем содержимым
Пример: delete_recursive("/data/dalvik-cache"); Удалит папку /data/dalvik-cache со всем содержимым.

set_perm
set_perm
Синтаксис: set_perm(<uid>, <gid>, <mode>, "<pathtofile>"[, ... "pathtofileN"]);
Устанавливает владельца, группу и разрешения для файла или папки, как ‘chmod’, ‘chown’, и ‘chgrp’ всё в одном
Пример: set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh") Установит владельца, группу и разрешения для файла /system/etc/init.goldfish.sh

set_perm_recursive
set_perm_recursive
Синтаксис: set_perm_recursive(<uid>, <gid>, <dir-mode>, <file-mode>, "<path>"[, ... "<pathN>"])
Рекурсивно устанавливает владельца, группу и разрешения для содержимого папки. <dir-mode> - для папок, <file-mode> - для файлов.
Пример: set_perm_recursive(0, 0, 0755, 0644, "/system/app") Установит права для содержимого /system/app, для папок - 0755, для файлов - 0644.


symlink
symlink
Синтаксис: symlink("<link-target>", "<link-path1"[, "<link-path2>", "<link-path3>"]);
Создает символическую ссылку (как ‘ln-s’). <link-path> пишется в формате root:path, а <link-target> в формате целевой файловой системы (и может быть относительным)
Пример: symlink("/data/app_s", "/system/app") Создаст символическую ссылку на папку /data/app_s для папки /system/app


mount
mount
Синтаксис: mount("<kind>", "<what>", "<path>");
Монтирует <what> в путь <path>. <what> должно быть название раздела, если <kind> это "MTD", или блок памяти если <kind> это "vfat"
Пример: mount("MTD", "userdata", "/data");
Пример монтирования на андроид 9-10

unmount
unmount
Синтаксис: unmount("<path>");
Отключает <path>.
Пример: unmount("/data");

ui_print
ui_print
Синтаксис: ui_print("<message>");
Выводит на экран сообщение <message>
Пример: ui_print("Formatting SYSTEM...");


Ошибки
Возможные ошибки и их решение

Если Вам знакомо что такое Recovery, CWM,TWRP, знаете что такое кастомные прошивки и с чем их едят, то наверняка вы сталкивались с тем что прошивка или обновление не устанавливается выводя при этом ошибку "Status #".

  • Signature verification failed. Installation aborted - Патчи создаются только для мод.рекавери и результативно работают только в них. В стоковых рекавери (на аппаратах "из коробки") патчи НЕ работают. Следует заменить стоковое рекавери на CWM или TWRP.
  • Status 0 - данный код ошибки возник из за того, что файл updater-script или update-binary отсутствуют в прошивке или обновлении
  • Status 255 - данный код ошибки возник из за того, что файл update-binary не подходит
    В обоих случаях лечится одинаково, нужно взять update-binary из любой прошивки для вашего девайса
  • Status 1 - данный код ошибки возник из за того, что заданы неправильные пути монтирования разделов
  • Status 3 - Эта ошибка проявляется при попытке распаковать из архива файлы с не-ASCII именами Подробнее
  • Status 4 - данный код ошибки возник из за того, что архив прошивка либо архив-обновление рассчитаны на более раннюю версию СWM (там использовался updater-script без бинарника update-binary).
  • Status 6 - а) Обозначает что updater-scpript создан не в Unix формате, поэтому при установке Android не распознает что там написано и выдает ошибку Status 6. Для того чтобы это исправить советую скачать и установить NotePad ++ и поменять формат;
      б) Синтаксическая ошибка (пропущен какой-либо символ, например ";", пропущена буква в команде)
  • Status 7 - а) Прошивка не подходит для Вашего девайса и в updater-script прописано другое название модели. Открыть updater-script и удалить строки содержавшие название чужой модели и переподписать прошивку.
      б) Через рекавери сначала смонтировать систему (mounts & storage - mount /system), затем ставить патч
      в) Решение проблемы с ошибкой STATUS 7: Sony Ericsson XPERIA neo - CyanogenMod 7 - FreeXperia PROJECT (OS 2.3) (Пост #11599821)
  • line *** col **: syntax error - Синтаксическая ошибка в строке кода №*** и символе №** (ищите где пропустили или поставили лишний символ, обычно это запятые и кавычки)
  • Symlink: some symlinks failed - Недостаточно места в системном разделе. Патч устанавливает файлы не в тот раздел/блок.
  • No space left on device - Недостаточно места в системном разделе. Патч устанавливает файлы не в тот раздел/блок.
  • format() expects 4 args got 5 либо format() expects 5 args got 4 - [функция format() ожидала Х аргумента, но получила Y] - в содержинии формата убираем либо добавляем название раздела, к примеру ("ext4", "EMMC", "/dev/block/mmcblk0p6", "0", "/system") . "аргумент" - те данные, которые написаны внутри скобок через запятую.
  • Ошибку не выдает, патч в мод.рекавери срабатывает, но нужное приложение не добавляется - см. раздел шапки РЕДАКТИРОВАНИЕ UPDATER-SCRIPT -> п.4, либо вручную монтировать необходимый раздел.
  • Please upgrade to latest binary либо ..... binary - Файл update-binary не подходит, нужно взять update-binary из любой прошивки для вашего девайса.
  • Не работает подписчик Zip_signer - проверьте java на компьютере, обновите либо установите заново.
    "java" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. - ошибка в Zip_signer - установите Java, Android update-script (Пост Vulcanus #54856173)

ps: Если в ходе ваших экспериментов часто появляются ошибки - попробуйте первым делом создать самый простой патч (взяв за основу sample.zip), а затем уже переходить на более сложные.
Это делается в первую очередь для того чтоб избежать механических ошибок в процессе создания патча, а также проверить совместимость с update-binary, совместимость с мод.рекавери и соответствие подписи.

Информация | Сопуствующие темы | Источники | Предложения
Инфо и материалы


Разное
Источники и благодарности
Предложения
Если Вы заметили ошибки в описании или есть материалы для дополнения статьи - просьба сообщить в теме, либо через QMS.

Также очень хотелось бы дополнить эту инструкцию другими примерами и возможностями патчей. В частности, наглядные примеры выполнения команд **_progress и symlink.
Постараюсь это сделать по мере создания патчей. А если стоящие материалы есть у Вас - тоже выкладывайте )

Кроме патча sample.zip хотелось бы добавить еще ряд других "стандартных" патчей
По вопросам наполнения и актуализации шапки темы, Вам всегда готов помочь Куратор Trykath

Сообщение отредактировал ~ Diamond ~ - 08.03.23, 11:33
Причина редактирования: Качественный бинарный файл для прошивки



Реп: (374)
* 1ferrari,
Ну и что значит твой пост? Ссылка, насколько я смог понять, ведет на первую страницу темы, последний пост датирован вчерашней датой. Что ты хотел сказать?



Реп: (85)
ottiwell я подключился к планшету через adb там в /system/app ни чего нет папки с ключом тоже нет что делать?



Реп: (319)
* sana88sol,
Распиши, как именно подключился?
Какие команды давал для ADB?
Вот такой картинкой, например.

Так просто там в /system и не будет, ибо в рекавери, по умолчанию раздел system не смонтирован.

* ottiwell,
Вот сейчас подключил Samsung S5 mini к ноутбуку Samsung R519.
Зашёл в рекавери через VOL+ и PowerOn.
На экране:

Android system recovery 3E
KOT49H.G800HXXU1ANK2

-reboot system now
-apply update from ADB
-apply update from external card
-wipe data/factory reset
-wipe cache partition
-apply update from cache

#MANUAL MODE #
-- Applyng Multi-CSC...
Applyed the CSC-code : SER
Successfully applied multi-CSC

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

По ADB DEVICES - список подключенных устройств пуст.
ADB kill-server и ADB start-server не помогли.
Перегружаюсь в систему - появилось Portable Devices SM-G800H
(даже как флешка не может подключиться, только как МТР-устройство или камера).
Потапал несколько раз по номеру сборки, включились "Параметры разработчика".
Поставил галку на "Отладка по USB".
Ноль эмоций - "Android Phone" - "Android ADB Device" так и не появилось :blink:
Кит-катовская пасхалка работает :-)

Сообщение отредактировал n-bear - 03.01.15, 11:05



Реп: (1444)
* n-bear,
Драйвер установи вручную для adb
У Андроида после 4 серии убрали поддержку "как флэшка", нужно либо кастомное рекавери и то не все. Либо

Сообщение отредактировал 1ferrari - 03.01.15, 15:30



Реп: (1444)
® SG USB Mass Storage Enabler
Другого не дано.

Добавлено 03.01.2015, 15:33:

ottiwell @ 03.01.2015, 00:55 *
у и что значит твой пос

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

Сообщение отредактировал 1ferrari - 03.01.15, 15:34



Реп: (85)
* n-bear, Я не через рекавери подключился. В рекавери комп планшет не видит. Вводил команды вот
Adb run
C:/Users/user/desktop/twrp - пытался установить рекавери
Fastboot boot recovery recovery.img



Реп: (828)
sana88sol @ 03.01.2015, 16:32 *
пытался установить рекавери
Fastboot boot recovery recovery.img
команда неправильная
fastboot flash recovery recovery.img



Реп: (85)
Все наконец-то вытянул через FTM режим ключ он же keys без расширения, а дальше как что с ним делать

Сообщение отредактировал sana88sol - 03.01.15, 21:00



Реп: (85)
Кто может подписать архив проги этим ключом сам не могу

Прикрепленные файлы

Прикрепленный файлaromafm1.91rus.zip ( 1.38 МБ )
Прикрепленный файлkeys.zip ( 1.51 КБ )



Реп: (74)
sana88sol "Zip_signer" из шапки для подписи юзал? Я его пробовал, но он не годится для стокового рекавери. Тебе нужно подписать и ты не понял методику, или не срабатывает подпись?

Это приложение подписывает файлы update.zip, APK или JAR файлы,
используя ваши собственные ключи или один из четырех встроенных
сертификатов (media, platform, shared, testkey). ZipSigner может
работать с существующими хранилищами ключей или вы можете создать свое
хранилище ключей, ключи и собственные сертификаты с этим приложением.
Поддерживаются хранилища JKS и BKS. MD5 и SHA1 отпечатки пальцев, а
также SHA1 хэш-ключ могут быть скопированы с экрана ключевых свойств.
Это приложение включает в себя несколько приложений: подпись
приложений apk, создание ключа, подпись приложений jar.
Встроенные ключи и режим автоматического выбора пригодятся
темостроителям и тем, кто занимается модификацией. Возможность
подписать с личными ключами
пригодится разработчикам.
https://play.google.co…nwood.zipsigner2&hl=ru



Каковы возможности рекавери <3e>? Там присутствуют пункты кроме работы с юзердатой, ещё восстановление с adb,кэша. Отгорел порт USB, что можно сделать через сток? Есть бэкап юзердаты, и на телефоне имеется root.
Тело висит на логотипе, после попытки переразметки eMMC. По меню рекавери понял, что системные папки есть, но они наверное пустые. Я бы наверное даже осилил бы патч, для восстановления структуры,
но даже на простейших подпись не канает-инстал аборт. Оно читает скрипты, впечатление получено от размера скрипта и отзыва инсталяции перед ошибкой.

Сообщение отредактировал maxxxx26 - 03.01.15, 23:06



Реп: (85)
* maxxxx26, В рекавери adb не работает, бекап не делал, root вшит в систему, смотрел в Android commander папки пусты потому что не смонтированы папки, писал выше, что через root explorer изменил владельца группу и остальное в /system/app и после перезагрузил и все кирпич. Вытянул через FTM режим ключ командой adb pull /res/keys появился файл keys без точки и расширения. Открыл файл блокнотом там куча цифр. Zip singer-ом не знаю как подписать архив.

Сообщение отредактировал sana88sol - 03.01.15, 23:48



Реп: (1444)
sana88sol @ 03.01.2015, 23:45 *
root explorer изменил владельца группу и остальное
конкретнее можно? Именно с этого места.



Реп: (74)
sana88sol то что ниже спойлера, не имеет к тебе отношения, это уже мой головняк со стоковым 3е рековери :)
Для подписанных патчей нужен ClockWorkMod Recovery, я дал тебе ссылку на Zip_signer с маркета из под андрюши, там удобно через интерфейс подписывать разными методами. пойдёт другое тело, планшет и возможно эмулятор андроид. Попробуй.
Ты бодал консольную версию для окон из темы? Рековери нужное стоит?

Сообщение отредактировал maxxxx26 - 04.01.15, 00:03



Реп: (1444)
* sana88sol, лови подписал за тебя
7 подписей

* maxxxx26,
Добавлено 04.01.2015, 00:03:

Программу я ему уже предлагал ранее Android update-script (Пост #36943013)

Прикрепленные файлы

Прикрепленный файлrazarxiviryi_menya.zip ( 9.29 МБ )


Сообщение отредактировал 1ferrari - 04.01.15, 00:03



Реп: (74)
1ferrari Не заметил, сорь. А по мне не подскажите, есть возможность влить прошивку, скажем lewa апдейтом через стоковое рековери? Что вообще можно сделать при условии невозможности законектить с ББ?
Может можно использовать для этого бэкап с неё юзердаты?

Сообщение отредактировал maxxxx26 - 04.01.15, 00:08



Реп: (85)
* 1ferrari, Не работает.Не проходит верефикацию как быть? прошивок нету на планшет



Реп: (74)
Если уверен, что всё делаешь верно, то наверное стоит сменить рекавери и попробовать опять.
Ну или Toggle signature verification – отключить проверку подписи. Такой пункт может быть в CWM рековери, тогда можно ставить любой хлам. Наверное разумно сделать перед этим полный бекап и быть готовым к прошивке кирпича.

reboot system now - перезагружает телефон.
install zip from sdcard – установка прошивки или апдейта.
choose zip from sdcard – выбрать файл прошивки на карте.

apply /sdcard/update.zip – применить апдейт update.zip с SD карты без выбора.

Toggle signature verification – отключить проверку подписи апдейта/прошивки.

wipe data/factory reset - полный сброс настроек и данных, при этом очищаются разделы /data и /cache во внутренней памяти устройства и очищается системная папка ".android_secure" на карте памяти.
wipe cache partition - удаляет лишь кэш, все данные пользователя сохранятся
backup and restore:
backup - создания образа всей прошивки вместе с приложениями и данными

restore - восстановление образа ваших системных разделов

delete – удаление созданного ранее бекапа с выбором

advanced restore - восстановление прошивки по частям

free unused backup data – чистить память от ненужных данных бэкапов на внешней карте памяти

choose backup format – дает возможность выбрать тип бекапа: tar или dup(default)

mounts and storage – монтирование/размонтирование/форматирование различных разделов
mount USB storage - подключение к компьютеру в режиме съёмного накопителя

advanced:
reboot recovery - перезагружает рековери

wipe dalvik cache - удаляет DalviK Cache (это кеш для запуска телефона, при удалении создается заново при загрузке телефона)

wipe battery stats - сброс статистики работы аккумулятора (после нажатия необходимо разрядить батарею полностью, а потом зарядите полностью, иначе результата вы не увидите)

report error - сохраняет лог ваших действий в CWM на карту памяти в папку clockworkmod

key test - проверка клавиш

show log - просмотр лога действий CWM, не выходя из него

fix permissions - скрипт, проверяет совместимы ли все приложения и совмещает их.
http://p350.ru/page/us…y-6014-cherez-fastboot

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

Сообщение отредактировал maxxxx26 - 04.01.15, 04:02



Реп: (97)
народ в написании скриптов ни чего абсолютно не понимаю, но получил 1 огромную проблему, прошил muiu через TWRP, откатиться обратно ни на какую прошивку не могу, т.к. все существующие по CWM или под сток рекавери, а заменить на другое рекавери так же не получается по тому что нет возможности установить root и загрузчик в телефоне заблокирован, может кто то помочь и написать скрипт что бы можно было установить старую прошивку для получения рута и смены рекавери ,
помощь в этой ветке последняя надежда(



Реп: (319)
* maxxxx26,
Отресторить бэкап юзердаты стокового рекавери 3Е ничего не даст.
Для начала надо раскрыть этот бэкап.
В отличие от мод.рекавери, где всё прозрачно (system.ext4.win - просто tar или tar.gzip архив),
3Е создаёт бэкап в каком-то левом формате.

3E с отключенной верификацией известен уже давно. Вот по этой ссылке, например.

* 1ferrari,
Драйверы вообще-то имеют устройства, а не программы. А устройств не появляется.
Тему по аппарату я выкурил, дрова видел и скачал, но цеплять-то их не к чему.
Ладно, прекращаем здесь оффтопить, с этим вопросом уйду в профильную тему.

* sana88sol,
____В рекавери adb не работает, смотрел в Android commander папки пусты.
____Вытянул через FTM режим ключ командой adb pull /res/keys
Как он не работает, когда вытянул файл, длину файла тоже надо указывать.
Команду adb shell пробовал давать?

___ появился файл keys без точки и расширения.
Видел твой keys - вообще не стандарт. 1403 байта.
Этим ключом подписать что-либо нельзя - это ответная часть замка, говоря иначе.
Цилиндровый механизм. А подписанный архив - это сам ключ с зубчиками.
Не подписанный - естественно - без зубчиков.
Подписывание архива - нарезание этих зубчиков.
Есть несколько наборов фрез (пар файлов) для этой операции
Например:
05.05.2010 17:21 1 001 certificate.pem
05.05.2010 17:22 633 key.pk8
02.10.2011 14:24 1 216 media.pk8
02.10.2011 14:24 1 675 media.x509.pem
02.10.2011 14:24 1 216 platform.pk8
02.10.2011 14:24 1 675 platform.x509.pem
24.06.2014 05:13 1 217 releasekey.pk8
24.06.2014 05:13 1 627 releasekey.x509.pem
02.10.2011 14:24 1 218 shared.pk8
02.10.2011 14:24 1 675 shared.x509.pem
02.10.2011 14:24 1 217 testkey.pk8
02.10.2011 14:24 1 675 testkey.x509.pem

testkey.pk8 + testkey.x509.pem - вот такая пара используется чаще всего:
А вот пример "нарезания зубчиков", *_signed.zip и есть "ключ с зубчиками".
java -jar signapk.jar -w testkey.x509.pem testkey.pk8 out\CWM_recovery_flashing.zip out_signed\CWM_recovery_flashing_signed.zip


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

Теперь делай:
Новый keys бери из этого архива ----> Прикрепленный файлkeys.zip ( 965 байт )

Записывай его на место вытянутого (того, что 1403 байта), видимо в ту же папку, где лежит ADB.EXE.
Давай команду
ADB PUSH /res/keys
Если ответит, что скопировалось столько-то байт за какое-то время, пытайся ставить апдейты
из архива в в этом сообщении.
Один из них должен сработать, именно тот, что подписан тестовым ключом.

Опять же, говоря языком механики, этим методом ты поменял цилиндровый механизм в замке.

Сообщение отредактировал n-bear - 04.01.15, 13:20



Реп: (85)
Я наконец-то установил TWRP от другой модели планшета сейчас смотрю разделы и на всякий бекап сделал

Куратор: Trykath

Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 29.03.24, 02:14