[TOOL] imgRePackerRK -



Реп: (335)
imgRePackerRK
Утилита для распаковки/запаковки образов прошивок RockChip (*.img)


Версия 1.06 windows&linux Прикрепленный файлimgRePackerRK_106.zip ( 176.25 КБ )

Назначение:
Распаковка для внесения изменений и последующей запаковки образов прошивок формата RockChip. Также можно использовать для исправления контрольных сумм md5 и RockChip CRC.

Возможности:
- распаковка и запаковка RKFW-образов (описание формата) прошивок (с/без обработки файлов 2-го слоя);
- распаковка и запаковка RKAF-образов (описание формата) прошивок (с/без обработки файлов 2-го слоя);
- распаковка и запаковка файлов 2-го слоя; поддерживаются: Android boot image (04), RockChip bootloader image (15), gzip/cpio archive file (14), cpio_ascii_new archive file (19), Rockchip resources image (30).
- проверка и исправление контрольных сумм md5 и RockChip CRC.

Проверено на прошивках:
- RK28xx (ChipID=0xXXXXXX21);
- RK29xx (ChipID=0xXXXXXX5X);
- RK30xx (ChipID=0xXXXXXX6X);
- RK31xx (ChipID=0xXXXXXX7X);
- RK32xx (ChipID=0xXXXXXX8X);
- RK33xx (ChipID=0xXXXXXX4X).

Использование утилиты

Примечание:
Для распаковки/запаковки gzip/cpio файлов Windows-версия утилиты использует внешнюю библиотеку zlib1.dll (http://www.zlib.net/) и собственный упрощенный алгоритм распаковки/запаковки cpio (впрочем, аналогичный, судя по результату, оригинальному). Linux-версия использует вызов внешних нативных утилит gzip/gunzip и cpio (поэтому простая перепаковка без изменений не дает прямого совпадения полученной прошивки).
Используемые коды обозначения типов файлов:
-1 - не определено;
00 - Unknown;
04 - Android boot image;
06 - ext3 image;
11 - RockChip KRNL signed file;
12 - RockChip PARM signed file;
14 - gzip/cpio archive file;
15 - RockChip bootloader image;
16 - ext4 image;
17 - cpio_bin_odc archive file;
18 - cpio_ascii_odc archive file;
19 - cpio_ascii_new archive file;
20 - cpio_ascii_crc archive file.

Состав архива:
1. imgRePackerRK.exe - Windows-версия.
2. zlib1.dll - библиотека поддержки gzip-файлов для Windows-версии.
3. imgrepackerrk - Linux-версия.
4. ReadMe.txt - этот файл.
5. ReadMe_utf8.txt - то же самое в кодировке UTF-8.

Special thanks:
Jean-loup Gailly & Mark Adler for zlib library (http://www.zlib.net/)

Change log и старые версии
1.06 [W&L] (03.05.2017)
+ добавлена поддержка формата RockChip uboot;
+ добавлен метод DirtyBlk;
+ поддержка старого формата RKFW;
+ поддержка RK???? (ChipID=0x00000021);
+ поддержка RK33xx (ChipID=0x00000041);
+ при неопределенном в parameters размере файла устанавливаем в прошивке 0;
+ создание файлов с размером = 0;
+ проверка/пропуск BOM;
+ добавлено определение OS;
+ добавлен ключ /rmd4;
~ улучшен алгоритм чтения bcpath и lname;
~ мелкие улучшения.
1.05 [W&L] (10.08.2015) Прикрепленный файлimgRePackerRK_105.zip ( 153.68 КБ )
~ использование WinAPI для создания каталогов;
+ поддержка формата Rockchip resources image;
+ поддержка RK32xx (ChipID=0x00000080);
+ добавлен ключ /symb;
+ добавлен ключ /bcpath;
+ добавлен ключ /lname;
+ создание конфигурационных файлов для RKAndroidTool v.1.xx/2.xx;
+ проверка "пересечений" разделов и "дырок" между ними;
+ сравнение длины файлов с размером раздела.
1.04 [W&L] (17.02.2014) Прикрепленный файлimgRePackerRK_104.zip ( 132.86 КБ )
+ распаковка/запаковка "одиночно стоящих" PARM-signed файлов;
~ изменен алгоритм распаковки KRNL-signed файлов (отрезаем "лишнее");
~ усовершенствован алгоритм автоматической коррекции ошибки описания размера области, отведенной под отдельные файлы;
- удален ключ /blk;
+ мелкие улучшения.
1.03 [W&L] (21.01.2014) Прикрепленный файлimgRePackerRK_103.zip ( 131.45 КБ )
~ исправлен баг проверки symlink-ов с абсолютными путями (CPIO);
+ добавлена автоматическая коррекция ошибки описания размера области, отведенной под отдельные файлы;
+ добавлен ключ /blk;
+ добавлен ключ /cid.
1.02 [W&L] (03.10.2013) Прикрепленный файлimgRePackerRK_102.zip ( 130.35 КБ )
~ исправлен баг с распаковкой/запаковкой "одиночно стоящих" KRNL-signed образов.
1.01 [W&L] (01.10.2013) Прикрепленный файлimgRePackerRK_101.zip ( 130.15 КБ )
+ добавлена поддержка формата nongzipped cpio_ascii_new archive file;
+ добавлен ключ /skip.
1.00 [W&L] (06.09.2013) Прикрепленный файлimgRePackerRK_100.zip ( 125.34 КБ )
! Release;
+ добавлена поддержка формата gzip/cpio archive file;
+ добавлена поддержка формата cpio_ascii_new archive file;
~ оптимизированы некоторые участки кода;
- удален ключ /inter;
- устранены мелкие ошибки в коде;
+ мелкие улучшения.
0.95 [W&L] (26.05.2013) Прикрепленный файлimgRePackerRK_095.zip ( 57.5 КБ )
! pre-Release #5;
+ добавлена поддержка формата RockChip bootloader image.
0.94 [W&L] (17.05.2013) Прикрепленный файлimgRePackerRK_094.zip ( 51.52 КБ )
! pre-Release #4;
+ добавлен ключ /2nd;
+ добавлена поддержка формата Android boot image.
0.93 [W&L] (29.04.2013) Прикрепленный файлimgRePackerRK_093.zip ( 38.54 КБ )
! pre-Release #3.
0.92 [W&L] (21.04.2013)
! pre-Release (for internal use)
Известные проблемы, ожидающие решения
Описание форматов прошивок и составляющих файлов

Альтернативная ссылка для скачивания

Сообщение отредактировал RedScorpio - 03.08.17, 15:12



Реп: (335)
Использование:
"imgRePackerRK.exe [options] <name[.ext]>" - распаковка (Windows)
"imgRePackerRK.exe [options] <name[.ext]>.dump" - запаковка (Windows)
"imgRePackerRK.exe [options] <name[.ext]>.cfg" - запаковка файла 2-го слоя (Windows)
"./imgrepackerrk [options] <name[.ext]>" - распаковка (Linux)
"./imgrepackerrk [options] <name[.ext]>.dump" - запаковка (Linux)
"./imgrepackerrk [options] <name[.ext]>.cfg" - запаковка файла 2-го слоя (Linux)

Опции (в скобках указано имя в ini-файле и значение по умолчанию):
/log - создавать log-файл (log = 0);
/debug - писать отладочную информацию, работает только с опцией /log (debug = 0);
/quiet - отключить вывод в консоль (quiet = 0);
/mono - включить монохромный режим (mono = 0);
/md5 - игнорировать ошибки md5 (при распаковке) или
не добавлять контрольную сумму md5 (при запаковке) (md5 = 0);
/rkcrc - игнорировать ошибки RockChip CRC (rkcrc = 0);
/rkaf - создавать RKAF image (запаковка) (rkaf = 0);
/skip - пропустить проверку размера файла образа прошивки; используется при распаковке
(skip = 0);
/2nd - распаковка/запаковка файлов второго слоя (2nd = 0);
/cid - не проверять ChipID (cid = 0);
/rmd4 - выравнивание ramdisk в Android Boot image по границе 4 байта (rmd4 = 0);
/symb - игнорировать ошибки проверки символьных линков (symb = 0);
/bcpath:<path>
- базовый путь для конфигурационных файлов RKAndroidTool;
/lname:<[path]name>
- название загрузчика для конфигурационных файлов RKAndroidTool;
/ini - перезаписать ini-file с опциями из командной строки (-);
Примечание:
Опции командной строки всегда имеют приоритет выше параметров ini-файла.

Сообщение отредактировал RedScorpio - 03.05.17, 23:14



Реп: (335)
Формат RKFW-файла (RockChip batch firmware image)

Структура файла (рис.1)
1. Header
2. boot.img
3. Простой update.img или RKAF-файл
4. Контрольная сумма MD5 (опционально)
Рис. 1
Прикрепленное изображение
Формат заголовка
struct RKFW_Hdr {
char Magic[4]; // "RKFW"
unsigned short int HdrLen; // 0x00000066
unsigned long int Version; //
unsigned long int Code; // ???
unsigned short int Year; //
unsigned char Month; //
unsigned char Day; //
unsigned char Hour; //
unsigned char Minute; //
unsigned char Second; //
unsigned long int ChipID; // 0x00000060/RK3066; 0x00000070/RK3188
unsigned long int LoadOff; // Loader offset (0x00000066)
unsigned long int LoadLen; // Loader length
unsigned long int DataOff; // Data offset
unsigned long int DataLen; // Data length
unsigned long int Unknown_1; // 0x00000000
unsigned long int RKFWtype; // 0x00000000 - просто update.img, 0x00000001 - если RKAF
unsigned long int SysFStype; // 0x00000000
unsigned long int BackupEnd; //
unsigned char Reserved[45]; // 0x00000000
} ImgHdr;

Примечания:
1. Названия структуры и ее полей могут не совпадать с задуманными разработчиком(ами).
2. В качестве boot.img во всех встреченных прошивках использовался bootloader (например, "RK30xxLoader(L)_V1.24.bin" для прошивок RK3066).
3. Выравнивания файлов нет.
4. Контрольная сумма MD5 встречается не во всех прошивках (установить точно, когда она нужна, а когда нет - пока не удалось).

Сообщение отредактировал RedScorpio - 03.08.17, 14:17



Реп: (335)
Формат RKAF-файла (RockChip update firmware image)

Структура файла (рис.2)
1. Header
2. Файлы
3. Контрольная сумма RockChip CRC (см. алгоритм)
Рис. 2
Прикрепленное изображение
Формат заголовка
struct RKAF_Hdr {
char Magic[4]; // "RKAF"
unsigned long int ImgLen;
char Model[34];
char Id[30];
char Manufacturer[56];
unsigned long int Unknown_1;
unsigned long int Version;
unsigned long int FileCount;

struct sUpdFile uFiles[16];
unsigned char Reserved[116];
} UpdHdr;
где
struct sUpdFile {
char Name[32];
char FileName[60];
unsigned long int NandSize;
unsigned long int Pos;
unsigned long int NandAddr;
unsigned long int ImgFSize;
unsigned long int OrigFSize;
}

Примечания:
1. Названия структуры и ее полей могут не совпадать с задуманными разработчиком(ами).
2. Файлы выравниваются по границе 2КБ (0x0800).
3. Количество файлов - до 16.
4. Обязательно наличие файлов package-file (состав прошивки; см. описание), bootloader (загрузчик), parameter (описание свойств и параметров прошивки, в том числе разделов NAND; см. описание), update-script и recover-script (ясно из названия).
5. Файл parameter сохраняется в прошивке в виде PARM-файла (RockChip PARM-signed file).
Формат PARM-файла
char Magic[4]; // "PARM"
unsigned long int FileLen; // длина файла
char File[FileLen]; // непосредственно файл
unsigned long int rkCRC; // Контрольная сумма RockChip CRC
6. Некоторые файлы (разделы) могут сохраняться в прошивке в виде KRNL-файла (RockChip KRNL-signed file).
Формат KRNL-файла
char Magic[4]; // "KRNL"
unsigned long int FileLen; // длина файла
char File[FileLen]; // непосредственно файл
unsigned long int rkCRC; // Контрольная сумма RockChip CRC


Сообщение отредактировал RedScorpio - 20.10.16, 18:23



Реп: (571)
RedScorpio @ 29.04.2013, 22:16 *
RK???? (ChipID=0x00000050)

Это код чипа RK29xx (см., например, у wendal).

По поводу "2. boot.img", то это ВСЕГДА простой загрузчик, т.е. Boot.bin.
По поводу выравнивания "1. Файлы выравниваются по границе 2КБ (0x0800).", то Вы его задаете в том же файле parameter.

Сообщение отредактировал vin2809 - 04.05.13, 08:24



Реп: (571)
Да, и контрольная сумма должна быть ВСЕГДА. Я думаю, что не у всех ромоделов получалось с ней грузиться, поэтому во многих прошивках ее нет.



Реп: (335)
vin2809 @ 04.05.2013, 09:26 *
Да, и контрольная сумма должна быть ВСЕГДА.

Возможно, просто я встречал очень много прошивок без нее. В любом случае, сейчас это настраивается (отключается проверка/создание)
vin2809 @ 04.05.2013, 09:17 *
По поводу выравнивания "1. Файлы выравниваются по границе 2КБ (0x0800).", то Вы его задаете в том же файле parameter.

Какой параметр? При упаковке у меня сейчас сделано фиксировано. Нужно будет поправить.

Update (18.05.2013) Вопрос "повис в воздухе"; как править, пока не знаю

Сообщение отредактировал RedScorpio - 18.05.13, 18:59



Реп: (335)
package-file

Назначение - описание состава прошивки (названия файлов).
Представляет из себя простой текстовый файл, в котором каждая строка описывает файл двумя полями: имя (ID) и название файла на физическом носителе с относительным путем. Поля разделены пробелами и/или знаками табуляции, комментарии в файле начинаются с символа #. Первое поле соответствует Name, второе - FileName структуры sUpdFile (описание файлов в прошивке) заголовка RKAF-файла.
Пример файла package-file
# NAME Relative path
#
#HWDEF HWDEF
package-file package-file
bootloader RK30xxLoader(L)_V1.24.bin
parameter parameter
misc Image/misc.img
#kernel Image/kernel.img
boot Image/boot.img
recovery Image/recovery.img
system Image/system.img
# ТЄРґИлbackup·ЦЗшµДОДјюѕНКЗЧФЙнЈЁupdate.imgЈ©
# SELF КЗ№ШјьЧЦЈ¬±нКѕЙэј¶ОДјюЈЁupdate.imgЈ©ЧФЙн
# ФЪЙъіЙЙэј¶ОДјюК±Ј¬І»јУИлSELFОДјюµДДЪИЭЈ¬µ«ФЪН·ІїРЕПўЦРУРјЗВј
# ФЪЅв°ьЙэј¶ОДјюК±Ј¬І»Ѕв°ьSELFОДјюµДДЪИЭЎЈ
backup parameter
fwbackup SELF
update-script update-script
recover-script recover-script

Зарезервированные имена для второго поля SELF и RESERVED

Сообщение отредактировал RedScorpio - 08.05.13, 20:15



Реп: (335)
parameter

Назначение - описание прошивки.
Представляет из себя простой текстовый файл, в котором каждая строка представляет из себя название параметра и его значение, разделенные символом "двоеточие" (":"), комментарии в файле начинаются с символа "#".
Пример файла parameter
FIRMWARE_VER:4.1.1
MACHINE_MODEL:97R
MACHINE_ID:007
MANUFACTURER:97R
MAGIC: 0x5041524B
ATAG: 0x60000800
MACHINE: 3066
CHECK_MASK: 0x80
KERNEL_IMG: 0x60408000
#RECOVER_KEY: 1,1,0,20,0
CMDLINE: console=ttyFIQ0 androidboot.console=ttyFIQ0 init=/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(misc),0x00004000@0x00004000(kernel),0x00008000@0x00008000(boot),0x00008000@0x00010000(recovery),0x00100000@0x00018000(backup),0x0003a000@0x00118000(cache),0x00400000@0x00152000(userdata),0x00002000@0x00552000(kpanic),0x00100000@0x00554000(system),-@0x00654000(user)

Описание параметров (что удалось выяснить):
FIRMWARE_VER = RKAF_Hdr.Version
MACHINE_MODEL = RKAF_Hdr.Model
MACHINE_ID = RKAF_Hdr.Id
MANUFACTURER = RKAF_Hdr.Manufacturer
MAGIC = ? (в примере "PARK")
ATAG = ?
MACHINE = ?
CHECK_MASK = ?
KERNEL_IMG = ?
CMDLINE = Командная строка (?); наибольший интерес представляет mtdparts, описывающая разделы NAND. Например, 0x00100000@0x00554000(system) означает, что раздел system (файл Image/system.img) размещается по адресу 0x00554000 (sUpdFile.NandAddr) и имеет размер 0x00100000 (sUpdFile.NandSize). Значения задаются в блоках (512Б).

Сообщение отредактировал RedScorpio - 14.09.13, 11:01



Реп: (335)
Контрольная сумма RockChip CRC

Алгоритм найден на просторах интернета, проблем при "вживлении" в утилиту не возникло
Исходные коды алгоритма RockChip CRC (rkcrc.h)
/*-
* Copyright (c) 2010 FUKAUMI Naoki.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef _RKCRC_H
#define _RKCRC_H

#include <stdint.h>

static uint32_t _t[256] = {
0x00000000, 0x04c10db7, 0x09821b6e, 0x0d4316d9,
0x130436dc, 0x17c53b6b, 0x1a862db2, 0x1e472005,
0x26086db8, 0x22c9600f, 0x2f8a76d6, 0x2b4b7b61,
0x350c5b64, 0x31cd56d3, 0x3c8e400a, 0x384f4dbd,
0x4c10db70, 0x48d1d6c7, 0x4592c01e, 0x4153cda9,
0x5f14edac, 0x5bd5e01b, 0x5696f6c2, 0x5257fb75,
0x6a18b6c8, 0x6ed9bb7f, 0x639aada6, 0x675ba011,
0x791c8014, 0x7ddd8da3, 0x709e9b7a, 0x745f96cd,
0x9821b6e0, 0x9ce0bb57, 0x91a3ad8e, 0x9562a039,
0x8b25803c, 0x8fe48d8b, 0x82a79b52, 0x866696e5,
0xbe29db58, 0xbae8d6ef, 0xb7abc036, 0xb36acd81,
0xad2ded84, 0xa9ece033, 0xa4aff6ea, 0xa06efb5d,
0xd4316d90, 0xd0f06027, 0xddb376fe, 0xd9727b49,
0xc7355b4c, 0xc3f456fb, 0xceb74022, 0xca764d95,
0xf2390028, 0xf6f80d9f, 0xfbbb1b46, 0xff7a16f1,
0xe13d36f4, 0xe5fc3b43, 0xe8bf2d9a, 0xec7e202d,
0x34826077, 0x30436dc0, 0x3d007b19, 0x39c176ae,
0x278656ab, 0x23475b1c, 0x2e044dc5, 0x2ac54072,
0x128a0dcf, 0x164b0078, 0x1b0816a1, 0x1fc91b16,
0x018e3b13, 0x054f36a4, 0x080c207d, 0x0ccd2dca,
0x7892bb07, 0x7c53b6b0, 0x7110a069, 0x75d1adde,
0x6b968ddb, 0x6f57806c, 0x621496b5, 0x66d59b02,
0x5e9ad6bf, 0x5a5bdb08, 0x5718cdd1, 0x53d9c066,
0x4d9ee063, 0x495fedd4, 0x441cfb0d, 0x40ddf6ba,
0xaca3d697, 0xa862db20, 0xa521cdf9, 0xa1e0c04e,
0xbfa7e04b, 0xbb66edfc, 0xb625fb25, 0xb2e4f692,
0x8aabbb2f, 0x8e6ab698, 0x8329a041, 0x87e8adf6,
0x99af8df3, 0x9d6e8044, 0x902d969d, 0x94ec9b2a,
0xe0b30de7, 0xe4720050, 0xe9311689, 0xedf01b3e,
0xf3b73b3b, 0xf776368c, 0xfa352055, 0xfef42de2,
0xc6bb605f, 0xc27a6de8, 0xcf397b31, 0xcbf87686,
0xd5bf5683, 0xd17e5b34, 0xdc3d4ded, 0xd8fc405a,
0x6904c0ee, 0x6dc5cd59, 0x6086db80, 0x6447d637,
0x7a00f632, 0x7ec1fb85, 0x7382ed5c, 0x7743e0eb,
0x4f0cad56, 0x4bcda0e1, 0x468eb638, 0x424fbb8f,
0x5c089b8a, 0x58c9963d, 0x558a80e4, 0x514b8d53,
0x25141b9e, 0x21d51629, 0x2c9600f0, 0x28570d47,
0x36102d42, 0x32d120f5, 0x3f92362c, 0x3b533b9b,
0x031c7626, 0x07dd7b91, 0x0a9e6d48, 0x0e5f60ff,
0x101840fa, 0x14d94d4d, 0x199a5b94, 0x1d5b5623,
0xf125760e, 0xf5e47bb9, 0xf8a76d60, 0xfc6660d7,
0xe22140d2, 0xe6e04d65, 0xeba35bbc, 0xef62560b,
0xd72d1bb6, 0xd3ec1601, 0xdeaf00d8, 0xda6e0d6f,
0xc4292d6a, 0xc0e820dd, 0xcdab3604, 0xc96a3bb3,
0xbd35ad7e, 0xb9f4a0c9, 0xb4b7b610, 0xb076bba7,
0xae319ba2, 0xaaf09615, 0xa7b380cc, 0xa3728d7b,
0x9b3dc0c6, 0x9ffccd71, 0x92bfdba8, 0x967ed61f,
0x8839f61a, 0x8cf8fbad, 0x81bbed74, 0x857ae0c3,
0x5d86a099, 0x5947ad2e, 0x5404bbf7, 0x50c5b640,
0x4e829645, 0x4a439bf2, 0x47008d2b, 0x43c1809c,
0x7b8ecd21, 0x7f4fc096, 0x720cd64f, 0x76cddbf8,
0x688afbfd, 0x6c4bf64a, 0x6108e093, 0x65c9ed24,
0x11967be9, 0x1557765e, 0x18146087, 0x1cd56d30,
0x02924d35, 0x06534082, 0x0b10565b, 0x0fd15bec,
0x379e1651, 0x335f1be6, 0x3e1c0d3f, 0x3add0088,
0x249a208d, 0x205b2d3a, 0x2d183be3, 0x29d93654,
0xc5a71679, 0xc1661bce, 0xcc250d17, 0xc8e400a0,
0xd6a320a5, 0xd2622d12, 0xdf213bcb, 0xdbe0367c,
0xe3af7bc1, 0xe76e7676, 0xea2d60af, 0xeeec6d18,
0xf0ab4d1d, 0xf46a40aa, 0xf9295673, 0xfde85bc4,
0x89b7cd09, 0x8d76c0be, 0x8035d667, 0x84f4dbd0,
0x9ab3fbd5, 0x9e72f662, 0x9331e0bb, 0x97f0ed0c,
0xafbfa0b1, 0xab7ead06, 0xa63dbbdf, 0xa2fcb668,
0xbcbb966d, 0xb87a9bda, 0xb5398d03, 0xb1f880b4,
};

#define RKCRC(crc, buf, size) \
do { \
size_t _s = (size); \
uint8_t *_b = (uint8_t *)(buf); \
while (_s-- > 0) \
(crc) = ((crc) << 8) ^ _t[((crc) >> 24) ^ *_b++]; \
} while (/* CONSTCOND */0)

#endif //_RKCRC_H


Сообщение отредактировал RedScorpio - 08.05.13, 21:28



Реп: (335)
Формат Android boot image

Структура файла (рис.3)
1. Header
2. kernel
3. ramdisk
4. second file (опционально)
Рис. 3
Прикрепленное изображение
Формат заголовка
struct sABootimg_Hdr {
char Magic[8];
unsigned int KernelSize;
unsigned int KernelAddr;
unsigned int RamdiskSize;
unsigned int RamdiskAddr;
unsigned int SecondFSize;
unsigned int SecondFAddr;
unsigned int TagsAddr;
unsigned int PageSize;
unsigned int Unknown_1;
unsigned int Unknown_2;
char Name[16];
char CmdLine[512];
unsigned char SHAdigest[20]; // SHA1 (20 bytes)
unsigned int Unknown_3;
unsigned int Unknown_4;
unsigned int Unknown_5;
};

Примечания:
1. Названия структуры и ее полей могут не совпадать с задуманными разработчиком(ами).
2. Файлы выравниваются по границе, определяемой параметром PageSize заголовка.
3. Second file может отсутствовать, в этом случае SecondFSize устанавливается в 0.
4. Большинство источников описывают параметр, следующий за CmdLine, как
unsigned id[8]; /* timestamp / checksum / sha1 / etc */
однако во всех прошивках, на которых я тестировал утилиту - это именно контрольная сумма SHA (точнее, SHA1).
5. Контрольная сумма SHA считается по всем файлам (по реальному размеру) и по заголовку вплоть до самого поля SHAdigest (более подробно)
Примечание. В прошивках Allwinner метод подсчета иной.
6. Во всех встреченных прошивках ramdisk представляет из себя gzip/cpio-файл.

Сообщение отредактировал RedScorpio - 14.09.13, 17:37



Реп: (335)
Формат RockChip bootloader image

Структура файла (рис.4)
1. Header
2. Files table (таблица размещения файлов)
3. Файлы (4)
Рис. 4
Прикрепленное изображение
Формат заголовка
struct sRKBootload_Hdr {
char Magic[4]; // "BOOT"
unsigned short int HdrLen; // 0x00000066
unsigned int Version; //
unsigned int Code; //
unsigned short int Year;
unsigned char Month;
unsigned char Day;
unsigned char Hour;
unsigned char Minute;
unsigned char Second;
unsigned int ChipID;
struct sStageRec StageRec[4];
unsigned char Reserved[53];
} RKBootload_Hdr;
где
struct sStageRec {
unsigned char RecType;
unsigned int RecOff;
unsigned char RecLen;
};
Формат таблицы размещения файлов
struct sRKBootFileRec {
unsigned char FileRecLen;
unsigned int FileNum;
#ifdef __linux
char LFileName[40];
#else
wchar_t FileName[20];
#endif
unsigned int FileOff;
unsigned int FileSize;
unsigned int Unknown;
} RKBootFileRecTable[4];

Примечания:
1. Названия структур и полей могут не совпадать с задуманными разработчиком(ами).
2. Название некоторых полей структур даны из предположений, впоследствии оказавшихся ложными; переименовывать не стал, поскольку истинного назначения выяснить не удалось.
3. Файлы кодируются по алгоритму RC4.
Ключ RC4
static unsigned char RK_Key[16] = {
0x7C, 0x4E, 0x03, 0x04, 0x55, 0x05, 0x09, 0x07,
0x2D, 0x2C, 0x7B, 0x38, 0x17, 0x0D, 0x17, 0x11
};



Реп: (37)
не понял как производится работа с версией для окон, при попытке произвести распаковку, выдается какая то ошибка. при возможности хотелось бы увидеть, хоть какой то интрфейс. даже из 3 кнопок: обзор, распаковать, запаковать.



Реп: (335)
skalls @ 12.07.2013, 18:24 *
не понял как производится работа с версией для окон, при попытке произвести распаковку, выдается какая то ошибка. при возможности хотелось бы увидеть, хоть какой то интрфейс. даже из 3 кнопок: обзор, распаковать, запаковать.

Интерфейса не было, нет и не будет. Вместо кнопки обзора - можете просто перетаскивать нужный файл прошивки или каталог с распакованной прошивкой на программу в Проводнике (функция drag'n'drop).
Что касается ошибки:
RedScorpio @ 29.04.2013, 23:41 *
В случае возникновения проблем прошу присылать лог (чтобы знать параметры работы и опции утилиты) и ссылку на проблемную прошивку.



Реп: (0)
Уважаемый, исходники не предоставите? Хочу на OSX портануть.



Реп: (370)
RedScorpio @ 18.05.2013, 22:26 *
5. Контрольная сумма SHA считается по всем файлам (по реальному размеру) и по заголовку вплоть до самого поля SHAdigest


Как удачно наткнулся на твой пост, может теперь и не придется искать исходники abootimg или mkbootimg, подскажи как правильно задать область байт из которых точно получится хеш SHA1 типичный для образов бут и рекавери. Какая последовательность файлов и заголовка ? Я пробовал копировать байты таким образом - сначала kernel (zImage), потом вставлял байты initrd.cpio.gz (а может нужно распакованный initrd.cpio) потом 576 байт заголовка образа recovery.img и от этого всего брал SHA1 - не получилось, что я не так делаю? Второй вопрос - тебе случайно не встречался хеш размером в 256 байт ? Может еще чем сможешь помочь в обсуждении - мы пытаемся собрать рабочее рекавери для Lenovo K900 на архитектуре x86, там вообще непонятная структура этих образов - сигнатура заголовка $OS$ (в инете воообще практически ничего нету на эту тему)



Реп: (335)
Как много вопросов сразу :-)
And_pda @ 14.09.2013, 12:48 *
как правильно задать область байт из которых точно получится хеш SHA1 типичный для образов бут и рекавери. Какая последовательность файлов и заголовка ? Я пробовал копировать байты таким образом - сначала kernel (zImage), потом вставлял байты initrd.cpio.gz (а может нужно распакованный initrd.cpio) потом 576 байт заголовка образа recovery.img и от этого всего брал SHA1 - не получилось, что я не так делаю?

На эту часть все ответы непосредственно в сообщении?, последовательность файлов и заголовка даже изображена схематически на рисунке. Но, возможно, имелось в виду: "какая последовательность подсчета SHA1".

Известная мне последовательность расчета такова:
1. Считаем по всему файлу kernel
2. По ABootimg_Hdr.KernelSize
3. По всему файлу ramdisk
4. По ABootimg_Hdr.RamdiskSize
5. По всему файлу secondfile, если есть
6. По ABootimg_Hdr.SecondFSize, даже если он равен 0
7. По ABootimg_Hdr.TagsAddr
8. По ABootimg_Hdr.PageSize
9. По ABootimg_Hdr.Unknown_1
10. По ABootimg_Hdr.Unknown_2
11. По ABootimg_Hdr.Name
12. По ABootimg_Hdr.CmdLine
Но, судя по-всему, это точно не специфицировано, и поэтому в Allwinner-овских, например, прошивках SHA считается как-то по-другому. Данный алгоритм справедлив только для прошивок RockChip (да и то не всегда).

And_pda @ 14.09.2013, 12:48 *
тебе случайно не встречался хеш размером в 256 байт ?

Вы имели в виду исходники алгоритма SHA256? Встречал. Но интереса для меня он (возможно, пока) не представляет, поэтому где, сейчас уже не вспомню.

And_pda @ 14.09.2013, 12:48 *
Может еще чем сможешь помочь в обсуждении - мы пытаемся собрать рабочее рекавери для Lenovo K900 на архитектуре x86, там вообще непонятная структура этих образов - сигнатура заголовка $OS$ (в инете воообще практически ничего нету на эту тему)

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

PS. Впервые кто-то заинтересовался моими исследованиями

Сообщение отредактировал RedScorpio - 14.09.13, 17:46



Реп: (370)
RedScorpio @ 14.09.2013, 18:34 *
Известная мне последовательность расчета такова

Спасибо, теперь все получилось.
RedScorpio @ 14.09.2013, 18:34 *
Вы имели в виду исходники алгоритма SHA256?

Нет, в алгоритмах обычно битность указывают, тот что вы указали - 256 бит на выходе дает 32 байта всего, есть еще SHA512 но там 64 байта, а нужно 256 байт.
RedScorpio @ 14.09.2013, 18:34 *
Вряд ли смогу помочь. Прежде всего из-за того, что не имею "в хозяйстве" подобных аппаратов и, соответственно, интереса

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



Реп: (335)
And_pda @ 15.09.2013, 13:00 *
нужно 256 байт

Точно не встречал



Реп: (236)
Ничего не понятно,прописываю на запаковку imgRePackerRK.exe [/log] <system[.ext]>.dump Ошибка: Не удается найти указанный файл,system это папка которую я хочу запаковать в img

Далее попробовал команду imgRePackerRK.exe [/log] <system/system.img> Ошибка в синтаксисе команды



Реп: (335)
Funn1,
Для начала:
1. Синтаксис для запаковки такой:
RedScorpio @ 29.04.2013, 23:16 *
"imgRePackerRK.exe [options] <name[.ext]>.dump" - запаковка (Windows)
а если файл 2-го слоя (уровня), то такой
RedScorpio @ 29.04.2013, 23:16 *
"imgRePackerRK.exe [options] <name[.ext]>.cfg" - запаковка файла 2-го слоя (Windows)
Т.е. команда должна выглядеть:
imgRePackerRK.exe /log system.dump
или
imgRePackerRK.exe /log system.cfg
2. Для запаковки используются конфигурационные файлы, которые создаются автоматически при распаковке прошивки в соответствии с ее структурой или могут быть созданы вручную, но для этого нужен достаточный уровень квалификации.
3. Что из себя представляет папка system?

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


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

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

Сейчас: 28.03.24, 18:46