- Meta inf для андроид
- Русские Блоги
- Замена подписи Android
- Опасности вторичной упаковки
- Механизм подписи APK
- Нужно знать фон
- 1. Просмотр файла META-INF
- 2. Сначала посмотрите на первый файл MANIFEST.MF
- 3. Глядя на второй файл CERT.SF
- 4. Наконец, посмотрите на третий файл CERT.SF
- резюме
- Проверьте, можно ли заменить подпись
- Заменить шаги подписи
- updater-script как правильно составить
- Как должен выглядеть ZIP -обновление (структура)
- Инструменты редактирования update-script
- Команды updater-script
- Внимание! Программа Android +1 Updater Script
- Как узнать как задать правильные symlink в updater-script
- Узнать список всех папок в System
- Узнать все права, uid, gid и список файлов и папок
- Пример updater-script
- Бонус: Полезные команды в конце скрипта
Meta inf для андроид
Краткое описание:
Программа для создания updater-script (update.zip) на основе boot.img и system.img для любого процессора, в котором есть возможность прошивать образы системы в формате img(ext2,ext3,ext4)
Описание:
Программа для создания updater-script (update.zip) на основе boot.img и system.img нажатием лишь одной кнопки!
Программа абсолютна бесплатная. Без рекламы.
Возможности:
— Создание updater-script на edifi языке на основе file_contexts + system_statfile.txt
— Создание прошивок на edifi языке на основе boot.img + system.img
— Создание прошивок на edifi языке на основе boot.img + system.new.dat + system.transfer.list
— Создание прошивок на edifi языке на основе бэкапа TWRP
— Получение карты блоков процессоров МТ67хх
— Конвертирование file_contexts.bin в текстовый формат и обратно
— Калькулятор прав
— Получать file_contexts.bin/file_contexts из boot.img
— Создавать патчи с установкой через Aroma Installer
— Генерировать скрипт установки deodex прошивки поверх odex прошивки
Поддерживаемая версия Android: 4.2-8
Интерфейс: Russian/English
ОС: Windows, Linux 64bit
Recovery: TWRP
бета:
— поддержка system.new.dat (необходим файл system.transfer.list)
— теперь результат запакован в архив flash.zip
(остается подкинуть бинарник, boot.img, папку system, в META-INF разложить busybox и supersu.zip)
— теперь ничего добавлять не надо в готовый скрипт
бета2:
— переписана на VB6
— исправления в создании скрипта
бета 3:
— добавлен генератор блоков для MTK67xx на основе scattert файла
бета4:
— fix run-as
бета 5:
— оптимизация
бета 6:
— small fixes
beta 7:
— добавлен конвертер из file_contexts.bin в file_contexts
— убраны батники, теперь программа сама все делает
— исправлены некоторые ошибки
beta 8:
— исправлены ошибки
— sdat2img от 23.11.16
beta 13:
— исправлены ошибки
— поддержка андроида 4.2
— теперь в папку bin кладете busybox(архивом или бинарником), gapps, supersu, xposedinstaller
— 7z вместо встроеного в винду запаковщика
Beta14:
— исправлены ошибки, забытые в beta13
beta15:
— исправлены ошибки
beta16:
1. автоопределение языка и переключение на англ/рус
2. фикс длиных имен в симлинках
3. фикс некоторых capabilities для прошивок MIUI8
4. тестовый вариант генератора скрипта в unix скрипте
5. тестовый вариант генератора скрипта из папки, а не на основе образа
6. оптимизация части кода
7. добавлен донат
8. изменен интерфейс
9. добавлена справка на русском
beta17:
1. Возможно пофиксил появление ошибки 6, пробуйте и отписывайтесь
2. Добавил логгирование ошибок программы, чтоб с вами было проще работать.
beta17.4(29.07.17):
1. Поправил capability для андроида 7, 7.1, 8
2. Обновил компоненты
USG 1.8 alfa от 07.11.17:
*Полностью переписана прога на Java 1.8.
+ добавлена возможность создавать Aroma инсталлер для прошивок (Пока поддерживается установка zip и sh модов через Aroma)
+ калькулятор прав
+ создание деодекс скрипта-болванки для установки деодекса поверх одекса
+ пересчитать права в любом текстовом файле из RWX в цифры
+ получение system_statfile.txt из бэкапа TWRP
+ генерация скрипта по бэкапу TWRP
+ подписать архив тестовым ключом
+ поддержка Linux x64
+ добавлен Aroma generator (07.11.17)
+ добавлены пояснения к полям (07.11.17)
+ унифицирован генератор
по прежнему кнопки «генерировать по папке system» и «генерировать Unix-Shell скрипт» тестовые,
т.к. нет тестеров, поэтому они заблокированы
Требования к Linux:
0. Извлечь в домашнюю папку
1. Python 3.4+ (хотя в Ubuntu это вроде предустановлено все)
2. Выполнить в терминале(Ubuntu):
Источник
Русские Блоги
Замена подписи Android
Опасности вторичной упаковки
Проблема вторичной упаковки является лишь частью угрозы безопасности приложений Android. Как правило, инструменты декомпиляции используются для вставки рекламного кода и связанных с ним конфигураций в приложения, а затем выпускаются на сторонних рынках приложений и форумах для ожидания «фишинга». Вред, наносимый упаковщиком мобильным приложениям, заключается в следующем:
- Вставьте свое собственное объявление или удалите оригинальное объявление;
- Вредоносный код, вредоносные отчисления, троянские кони и т.д .;
- Изменить оригинальную логику оплаты;
Вышеуказанное злонамеренное поведение наносит серьезный ущерб интересам мобильных продуктов и пользователей, а также влияет на корпоративную репутацию.
Механизм подписи APK
Механизм подписи APK, разработанный Google, призван предотвратить две проблемы:
- Не позволяйте другим изменять пакет APK, чтобы предотвратить вторичную упаковку после декомпиляции;
Как запретить другим упаковывать его снова? При установке APK в систему Android, он сначала проверит, есть ли подпись и может ли подпись совпадать; - Система Android не может устанавливать APK с тем же именем пакета, но разными сигнатурами при установке пакетов APK;
Следующее начинает анализировать процесс подписи APK:
Нужно знать фон
Пойди в Baidu самостоятельно, чтобы понять концепцию;
- Сводка данных (отпечаток данных), алгоритм симметричного шифрования MD5 \ SHA-1
- Алгоритм асимметричного шифрования
- Цифровая подпись, цифровой сертификат
- Подпишите пакеты APK вручную
1. Просмотр файла META-INF
Измените суффикс пакета .apk на .zip, откройте папку после распаковки и найдите каталог META-INF.
Подпись начинается вокруг этих трех документов.
2. Сначала посмотрите на первый файл MANIFEST.MF
Этот файл содержит сводные значения данных всех файлов в файле APK. Это эквивалентно дактилоскопии каждого отдельного (кроме этих трех) файлов.
3. Глядя на второй файл CERT.SF
Подобно файлу MANIFEST.MF, единственное отличие состоит в том, что есть еще одна строка SHA1-Digest-Manifest: KDerPmANkkB5mxceo/t5oXRGApg= , Эта строка является сводкой данных MANIFEST.MF.
4. Наконец, посмотрите на третий файл CERT.SF
Рассчитайте зашифрованное значение предыдущего файла CERT.SF с закрытым ключом, которое называется подписью, поэтому этот файл содержит подпись и открытый ключ;
Если это в системе Windows, рекомендуется использовать программное обеспечение cmder.exe, чтобы использовать следующую команду.
Обзор содержания сертификата:
Команда, используемая для управления хранилищем закрытого ключа:
резюме
После создания APK подпись не может быть изменена, так как нет закрытого ключа. Но он может заменить подпись, потому что система Android проверяет правильность подписи только при установке APK. (Это всего лишь мое личное предположение, и позже я углублюсь в проверку исходного кода системы, и настоящий молоток — это правда или ложь)
Процесс подписания можно представить как поток обработки отправителя и получателя, и это также двустороннее действие, которое можно грубо понимать как следующий поток:
Вы можете заменить клиента 1 на изображении выше процессом упаковки APK и заменить сервер процессом установки APK на телефонах Android.Если система хранит открытый ключ в CERT.RSA, а значение хеш-функции расшифровывается в исходном apk и файле CERT.SF. Если значение Hash не соответствует, оно не будет установлено.
Проверьте, можно ли заменить подпись
Необходимым условием для успешной вторичной упаковки является то, что подпись может быть заменена, и APK не выполняет проверку подписи. Есть три способа проверить подпись:
Пакет APK не делает проверку подписи
Просто замените подпись. Шаги по замене подписи будут описаны ниже;
- проверка кода Java
Сложность состоит в том, чтобы найти проверенный код JAVA, просто закомментируйте его; - Проверка .so файла
Сложность состоит в том, чтобы найти проверенный код C, просто закомментируйте его; - пак
Трудность заключается в том, чтобы сначала распаковать;
Заменить шаги подписи
шаги:
Используя инструмент AndroidKiller_v1.3.1, который имеет функцию компиляции, вы можете выполнить вторичную упаковку, принцип состоит в том, чтобы заменить значение подписи.
Источник
updater-script как правильно составить
Необходимо создать updater-script для вашей кастомной прошивки или мода? Не знаете какие команды писать и что они означают? На все эти ответы можно узнать из данной статьи.
Как должен выглядеть ZIP -обновление (структура)
В корне архива-обновления «должны» находится такие файлы и папки:
- Папка META-INF — обязательно;
- system или data или cache или другие, в зависимости от того, для чего готовилось обновление (не обязательно, так как возможно прошиваете модем или ядро);
- boot.img или recovery.img или zImage (не обязательно, так как возможно обновляете файл в system или data).
Режим сжатия архива должен быть «нормальный» или «обычный» более сильное сжатие Android не поддерживает.
Папка META-INF состоит:
- Папка com
- Файлы подписи обновления
Папка com должна содержать в себе такие файлы и папки:
- Папку android
Папка google должна содержать папку android в которой должны быть файлы
1. updater-script — текстовый файл с набором инструкций для обновления;
2. update-binary — бинарный файл, необходимый для установки обновления.
Инструменты редактирования update-script
Для редактирования updater-script вам понадобится программа NotePad ++
важное условие при работе это кодировка, она должна быть UNIX
Команды updater-script
- assert -задается для каких моделей создано обновление;
- mount — монтирование (присоединение) разделов;
- umount — отсоединить раздел;
- package_extract_dir — копирует выбраню папку и заменяет собой аналогичную вместе с файлами;
- package_extract_file — копирует выбранный файл и заменяет собой аналогичный;
- format — форматирует прописанный раздел;
- delete — удаляет файл;
- delete_recursive — рекурсивное удаление, необходимо для удаления папок и их содержимого;
- run_program — запускает программу;
- set_perm — задает права для файла;
- set_perm_recursive — задает права для папки;
- symlink — создает жесткую ссылку — «симлинк» (ярлык для запуска);
- ui_print — вывод сообщения на экран.
Внимание! Программа Android +1 Updater Script
Вашему внимание проект сайта Android +1 — Android +1 Updater Script позволит правильно и очень быстро составить правильный скрипт, даже для пользователей с маленьким опытом!
Как узнать как задать правильные symlink в updater-script
Довольно популярный вопрос о том как узнать какие необходимо создать symlink в updater-script? Все очень просто для этого вам нужно либо компьютер с ADB или установленный терминал на Android. Перейдите в папки:
В каждой из этих папок наберите команду ls -l и вы получите список файлов и symlink.
Узнать список всех папок в System
Для того того чтобы узнать все папки которые есть в разделе /system , понадобиться набрать linux команду:
su
du -a system
После чего вам выдаст весь список папок в разделе.
Узнать все права, uid, gid и список файлов и папок
Для того чтобы узнать все права, uid, gid и список файлов и папок нужно задать следующую команду linux:
ls -alnR /system
Теперь перейдем как это выглядит в живую на примере…
Пример updater-script
(данный пример update-script для модели i9100 прошивка CyanogenMod 10.2)
для каких моделей:
assert(getprop(«ro.product.device») == «galaxys2» || getprop(«ro.build.product») == «galaxys2» ||
getprop(«ro.product.device») == «i9100» || getprop(«ro.build.product») == «i9100» ||
getprop(«ro.product.device») == «GT-I9100» || getprop(«ro.build.product») == «GT-I9100» ||
getprop(«ro.product.device») == «GT-I9100M» || getprop(«ro.build.product») == «GT-I9100M» ||
getprop(«ro.product.device») == «GT-I9100P» || getprop(«ro.build.product») == «GT-I9100P» ||
getprop(«ro.product.device») == «GT-I9100T» || getprop(«ro.build.product») == «GT-I9100T»);
монтирование раздела
mount(«ext4», «EMMC», «/dev/block/mmcblk0p9», «/system»);
копирование файла
package_extract_file(«system/bin/backuptool.sh», «/tmp/backuptool.sh»);
package_extract_file(«system/bin/backuptool.functions», «/tmp/backuptool.functions»);
задание прав для файла
set_perm(0, 0, 0777, «/tmp/backuptool.sh»);
set_perm(0, 0, 0644, «/tmp/backuptool.functions»);
запуск программы
run_program(«/tmp/backuptool.sh», «backup»);
отсоединить раздел
unmount(«/system»);
прогрессбар
show_progress(0.500000, 0);
форматирование заданного раздела
format(«ext4», «EMMC», «/dev/block/mmcblk0p9», «0», «/system»);
подсоединение раздела
mount(«ext4», «EMMC», «/dev/block/mmcblk0p9», «/system»);
копирование папки в выбранный раздел
package_extract_dir(«recovery», «/system»);
package_extract_dir(«system», «/system»);
создание симилнка
symlink(«/system/xbin/su», «/system/bin/su»);
symlink(«Roboto-Bold.ttf», «/system/fonts/DroidSans-Bold.ttf»);
symlink(«Roboto-Regular.ttf», «/system/fonts/DroidSans.ttf»);
symlink(«busybox», «/system/xbin/[«, «/system/xbin/[[«,
«/system/xbin/adjtimex», «/system/xbin/arp», «/system/xbin/ash»,
«/system/xbin/awk», «/system/xbin/base64», «/system/xbin/basename»,
«/system/xbin/bbconfig», «/system/xbin/blkid», «/system/xbin/blockdev»,
«/system/xbin/brctl», «/system/xbin/bunzip2», «/system/xbin/bzcat»,
«/system/xbin/bzip2», «/system/xbin/cal», «/system/xbin/cat»,
«/system/xbin/catv», «/system/xbin/chattr», «/system/xbin/chgrp»,
«/system/xbin/chmod», «/system/xbin/chown», «/system/xbin/chroot»,
«/system/xbin/clear», «/system/xbin/cmp», «/system/xbin/comm»,
«/system/xbin/cp», «/system/xbin/cpio», «/system/xbin/crond»,
«/system/xbin/crontab», «/system/xbin/cut», «/system/xbin/date»,
«/system/xbin/dc», «/system/xbin/dd», «/system/xbin/depmod»,
«/system/xbin/devmem», «/system/xbin/df», «/system/xbin/diff»,
«/system/xbin/dirname», «/system/xbin/dmesg», «/system/xbin/dnsd»,
«/system/xbin/dos2unix», «/system/xbin/du», «/system/xbin/echo»,
«/system/xbin/ed», «/system/xbin/egrep», «/system/xbin/env»,
«/system/xbin/expand», «/system/xbin/expr», «/system/xbin/false»,
«/system/xbin/fbsplash», «/system/xbin/fdisk», «/system/xbin/fgrep»,
«/system/xbin/find», «/system/xbin/flash_lock»,
«/system/xbin/flash_unlock», «/system/xbin/flashcp»,
«/system/xbin/flock», «/system/xbin/fold», «/system/xbin/free»,
«/system/xbin/freeramdisk», «/system/xbin/fstrim», «/system/xbin/fsync»,
«/system/xbin/ftpget», «/system/xbin/ftpput», «/system/xbin/fuser»,
«/system/xbin/getopt», «/system/xbin/grep», «/system/xbin/groups»,
«/system/xbin/gunzip», «/system/xbin/gzip», «/system/xbin/halt»,
«/system/xbin/head», «/system/xbin/hexdump», «/system/xbin/id»,
«/system/xbin/ifconfig», «/system/xbin/inetd», «/system/xbin/insmod»,
«/system/xbin/install», «/system/xbin/ionice», «/system/xbin/iostat»,
«/system/xbin/ip», «/system/xbin/kill», «/system/xbin/killall»,
«/system/xbin/killall5», «/system/xbin/less», «/system/xbin/ln»,
«/system/xbin/losetup», «/system/xbin/ls», «/system/xbin/lsattr»,
«/system/xbin/lsmod», «/system/xbin/lsusb», «/system/xbin/lzcat»,
«/system/xbin/lzma», «/system/xbin/lzop», «/system/xbin/lzopcat»,
«/system/xbin/man», «/system/xbin/md5sum», «/system/xbin/mesg»,
«/system/xbin/mkdir», «/system/xbin/mke2fs», «/system/xbin/mkfifo»,
«/system/xbin/mkfs.ext2», «/system/xbin/mkfs.vfat»,
«/system/xbin/mknod», «/system/xbin/mkswap», «/system/xbin/mktemp»,
«/system/xbin/modinfo», «/system/xbin/modprobe», «/system/xbin/more»,
«/system/xbin/mount», «/system/xbin/mountpoint», «/system/xbin/mpstat»,
«/system/xbin/mv», «/system/xbin/nanddump», «/system/xbin/nandwrite»,
«/system/xbin/nbd-client», «/system/xbin/netstat», «/system/xbin/nice»,
«/system/xbin/nohup», «/system/xbin/nslookup», «/system/xbin/ntpd»,
«/system/xbin/od», «/system/xbin/patch», «/system/xbin/pgrep»,
«/system/xbin/pidof», «/system/xbin/ping», «/system/xbin/pipe_progress»,
«/system/xbin/pkill», «/system/xbin/pmap», «/system/xbin/poweroff»,
«/system/xbin/printenv», «/system/xbin/printf», «/system/xbin/ps»,
«/system/xbin/pstree», «/system/xbin/pwd», «/system/xbin/pwdx»,
«/system/xbin/rdev», «/system/xbin/readlink», «/system/xbin/realpath»,
«/system/xbin/renice», «/system/xbin/reset», «/system/xbin/resize»,
«/system/xbin/rev», «/system/xbin/rm», «/system/xbin/rmdir»,
«/system/xbin/rmmod», «/system/xbin/route», «/system/xbin/run-parts»,
«/system/xbin/rx», «/system/xbin/sed», «/system/xbin/seq»,
«/system/xbin/setconsole», «/system/xbin/setserial»,
«/system/xbin/setsid», «/system/xbin/sh», «/system/xbin/sha1sum»,
«/system/xbin/sha256sum», «/system/xbin/sha3sum»,
«/system/xbin/sha512sum», «/system/xbin/sleep», «/system/xbin/sort»,
«/system/xbin/split», «/system/xbin/stat», «/system/xbin/strings»,
«/system/xbin/stty», «/system/xbin/sum», «/system/xbin/swapoff»,
«/system/xbin/swapon», «/system/xbin/sync», «/system/xbin/sysctl»,
«/system/xbin/tac», «/system/xbin/tail», «/system/xbin/tar»,
«/system/xbin/taskset», «/system/xbin/tee», «/system/xbin/telnet»,
«/system/xbin/telnetd», «/system/xbin/test», «/system/xbin/tftp»,
«/system/xbin/tftpd», «/system/xbin/time», «/system/xbin/timeout»,
«/system/xbin/top», «/system/xbin/touch», «/system/xbin/tr»,
«/system/xbin/traceroute», «/system/xbin/true», «/system/xbin/ttysize»,
«/system/xbin/tune2fs», «/system/xbin/umount», «/system/xbin/uname»,
«/system/xbin/uncompress», «/system/xbin/unexpand», «/system/xbin/uniq»,
«/system/xbin/unix2dos», «/system/xbin/unlzma», «/system/xbin/unlzop»,
«/system/xbin/unxz», «/system/xbin/unzip», «/system/xbin/uptime»,
«/system/xbin/usleep», «/system/xbin/uudecode», «/system/xbin/uuencode»,
«/system/xbin/vi», «/system/xbin/watch», «/system/xbin/wc»,
«/system/xbin/wget», «/system/xbin/which», «/system/xbin/whoami»,
«/system/xbin/xargs», «/system/xbin/xz», «/system/xbin/xzcat»,
«/system/xbin/yes»,
«/system/xbin/zcat»);
symlink(«libGLESv2.so», «/system/lib/libGLESv3.so»);
symlink(«logcat», «/system/bin/lolcat»);
symlink(«mksh», «/system/bin/sh»);
symlink(«mount.exfat», «/system/bin/fsck.exfat»,
«/system/bin/mkfs.exfat»);
symlink(«pigz», «/system/xbin/unpigz»);
symlink(«toolbox», «/system/bin/cat», «/system/bin/chcon»,
«/system/bin/chmod», «/system/bin/chown», «/system/bin/clear»,
«/system/bin/cmp», «/system/bin/cp», «/system/bin/date»,
«/system/bin/dd», «/system/bin/df», «/system/bin/dmesg»,
«/system/bin/du», «/system/bin/getenforce», «/system/bin/getevent»,
«/system/bin/getprop», «/system/bin/getsebool», «/system/bin/grep»,
«/system/bin/hd», «/system/bin/id», «/system/bin/ifconfig»,
«/system/bin/iftop», «/system/bin/insmod», «/system/bin/ioctl»,
«/system/bin/ionice», «/system/bin/kill», «/system/bin/ln»,
«/system/bin/load_policy», «/system/bin/log», «/system/bin/ls»,
«/system/bin/lsmod», «/system/bin/lsof», «/system/bin/md5»,
«/system/bin/mkdir», «/system/bin/mount», «/system/bin/mv»,
«/system/bin/nandread», «/system/bin/netstat»,
«/system/bin/newfs_msdos», «/system/bin/notify», «/system/bin/printenv»,
«/system/bin/ps», «/system/bin/r», «/system/bin/reboot»,
«/system/bin/renice», «/system/bin/restart», «/system/bin/restorecon»,
«/system/bin/rm», «/system/bin/rmdir», «/system/bin/rmmod»,
«/system/bin/route», «/system/bin/runcon», «/system/bin/schedtop»,
«/system/bin/sendevent», «/system/bin/setconsole»,
«/system/bin/setenforce», «/system/bin/setprop»,
«/system/bin/setsebool», «/system/bin/sleep», «/system/bin/smd»,
«/system/bin/start», «/system/bin/stop», «/system/bin/sync»,
«/system/bin/top», «/system/bin/touch», «/system/bin/umount»,
«/system/bin/uptime», «/system/bin/vmstat», «/system/bin/watchprops»,
«/system/bin/wipe»);
рекурсивное выставление прав папкам
set_perm_recursive(0, 0, 0755, 0644, «/system»);
set_perm_recursive(0, 0, 0755, 0755, «/system/addon.d»);
set_perm_recursive(0, 2000, 0755, 0755, «/system/bin»);
рекурсивное выставление прав файлам
set_perm(0, 3003, 02750, «/system/bin/netcfg»);
set_perm(0, 0, 0755, «/system/bin/ping»);
set_perm(0, 2000, 0750, «/system/bin/run-as»);
set_perm(1014, 2000, 0550, «/system/etc/dhcpcd/dhcpcd-run-hooks»);
set_perm_recursive(0, 2000, 0755, 0755, «/system/etc/init.d»);
set_perm(0, 0, 0755, «/system/etc/init.d»);
set_perm(0, 2000, 0550, «/system/etc/init.goldfish.sh»);
set_perm_recursive(0, 0, 0755, 0555, «/system/etc/ppp»);
set_perm(0, 2000, 0755, «/system/vendor»);
set_perm_recursive(0, 2000, 0755, 0644, «/system/vendor/etc»);
set_perm(0, 0, 0644, «/system/vendor/etc/audio_effects.conf»);
set_perm(0, 2000, 0755, «/system/vendor/firmware»);
set_perm(0, 2000, 0755, «/system/vendor/lib»);
set_perm_recursive(0, 2000, 0755, 0644, «/system/vendor/lib/drm»);
set_perm(0, 0, 0644, «/system/vendor/lib/drm/libdrmwvmplugin.so»);
set_perm_recursive(0, 2000, 0755, 0755, «/system/xbin»);
set_perm(0, 0, 06755, «/system/xbin/librank»);
set_perm(0, 0, 06755, «/system/xbin/procmem»);
set_perm(0, 0, 06755, «/system/xbin/procrank»);
set_perm(0, 0, 06755, «/system/xbin/su»);
прогреccбар
show_progress(0.200000, 0);
show_progress(0.200000, 10);
копирование файла
package_extract_file(«system/bin/backuptool.sh», «/tmp/backuptool.sh»);
package_extract_file(«system/bin/backuptool.functions», «/tmp/backuptool.functions»);
задание прав для файла
set_perm(0, 0, 0777, «/tmp/backuptool.sh»);
set_perm(0, 0, 0644, «/tmp/backuptool.functions»);
запуск программы
run_program(«/tmp/backuptool.sh», «restore»);
удаление файла
delete(«/system/bin/backuptool.sh»);
delete(«/system/bin/backuptool.functions»);
прогрессбар
show_progress(0.200000, 10);
установка ядра
assert(package_extract_file(«boot.img», «/tmp/boot.img»),
write_raw_image(«/tmp/boot.img», «/dev/block/mmcblk0p5»),
delete(«/tmp/boot.img»));
прогрессбар
show_progress(0.100000, 0);
отсоединение раздела
unmount(«/system»);
Бонус: Полезные команды в конце скрипта
Выполнить wipe Dalvik cache, для во избежания сбоев в системе (ставить до umount в конце):
delete_recursive(«/data/dalvik-cache»)
автоматическая перезагрузка (ставить после umount в конце)
run_program(«/sbin/reboot»);
На этом все! Статья updater-script как правильно составить окончена!
Источник