2017-02-16 22 views
-1

Я работаю над проектом, который требует, чтобы я загрузил файл прошивки (.aff) во встроенное устройство с использованием проприетарного протокола. Google показывает, что aff означает расширенный формат файла, но я не уверен, что это означает в этом контексте.Что такое .aff файл

+0

Я не вижу шестисимвольную строку в «примере» (т. Е. Часть '{0: X6}'). Кроме того, как вы получаете «xx» из вашего входного файла, если это «часть протокола»? Кроме того, 'BitConverter.ToString' вставляет тире между шестнадцатеричными числами. Вы уверены, что вы должны отправлять байты как 2-символьный hex ascii, а не просто байты? – Groo

+0

То, что я пытаюсь сделать, это создать тот же шестнадцатеричный вывод (с моим кодом), который я захватил, используя мой сниффер последовательного порта при загрузке прошивки с использованием какого-то старого программного обеспечения, которое действительно работает. Выход, который я захватил, представляет собой блок прошивки с «xx» в нем, а «xx» не является частью протокола, который я только что редактировал, поэтому он не содержал фактических данных (по соображениям безопасности). В файле .aff содержится прошивка. Я попытался использовать приведенные выше примеры кода, чтобы преобразовать этот файл в массив байтов и сравнить его с выходом (блок прошивки с xx в нем). –

+0

Как вы можете видеть в предыдущем блоке прошивки, данные начинаются с шестнадцатеричных значений: 0x41, 0x49, 0x43, 0x30, 0x31, 0x00, 0x00 и т. Д. Однако, когда я получаю байты из файла .aff, используя мой код и преобразовать его в hex ... Я не получаю эти значения. –

ответ

0

Предполагая, что формат является «дополненным файлом прошивки», если вы используете Google, вы получите this page. Этот файл, похоже, загружает файл aff и загружает его в контроллер.

Вы можете видеть, что файл начинается с css_header структуры (128 байт, если я не ошибаюсь), то содержит материал как modulus, signature и другие, то есть фактические данные прошивки начинается где на довольно далеко смещение (908 байт от начала файла):

struct css_header { 
    u32 module_type; 
    u32 header_len; 
    u32 header_version; 
    u32 module_id; 
    u32 module_vendor; 
    u32 date;    /* BCD yyyymmdd */ 
    u32 size;    /* in DWORDs */ 
    u32 key_size;   /* in DWORDs */ 
    u32 modulus_size;  /* in DWORDs */ 
    u32 exponent_size;  /* in DWORDs */ 
    u32 reserved[22]; 
}; 

#define KEY_SIZE  256 
#define MU_SIZE   8 
#define EXPONENT_SIZE 4 

/* the file itself */ 
struct augmented_firmware_file { 
    struct css_header css_header; 
    u8 modulus[KEY_SIZE]; 
    u8 exponent[EXPONENT_SIZE]; 
    u8 signature[KEY_SIZE]; 
    u8 r2[KEY_SIZE]; 
    u8 mu[MU_SIZE]; 
    u8 firmware[];  // <--- 908 B from struct start 
}; 

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

+0

Спасибо Groo, однако, шестнадцатеричный редактор произвел те же результаты, что и мой код ... поэтому я не вижу ни одного гексагона, похожего на гекса, который я захватил с помощью последовательного сниффера. Теперь я думаю, что перед загрузкой прошивки маска применяется ко всем шестнадцатеричным значениям (через устаревшее программное приложение), и я видел измененные шестнадцатеричные значения. Теперь у меня есть исходный код для устаревшего приложения ... поэтому я считаю, что лучший способ - просто проработать это ... К сожалению, все это написано на C/C++, что не является языком, с которым я очень хорошо знаком. Спасибо за помощь! –

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^