Проблема поиска текстовых значений в hex
Выгрузил прошивку приборной панели. Контроллер motorolla mc68hc912dg128.
В файле прошивки не нашел ни текстовых, ни графических сигнатур.
Подскажите на каком языке был написан исходник и как найти блок отвечающий за текст или графику?
В прошивке вшито несколько языков, менял английский и немецкий и сливал обратно. Hex редактором сравнивал коды. Отличий много закономерностей не увидел. Помогите разобраться, возможно ли декомпилировать такой код, или просто привести в нормальный вид чтоб было понятно. Подозреваю что текст выводится на lcd(100х64 пикс, монохром) экран попиксельно и при смене языка меняется графическая интерпретация.
То что ищу в коде вчастности надпись "fuel level low" Помогите советом буду благодарен за любую информацию.
Ответы (1 шт):
Посмотрев в бинарный файл, легко найти, что картинка начинается где то в районе 0x3488. Одна строка - 12 байт. Дальше дело техники
#include <stdio.h>
int main()
{
FILE* f = fopen("Source.bin", "r");
int p = 0x347E; // где начинается картинка. Возможно, она начинается на пару строк выше
int counter = 1; // смещение в битах
for (int i = 0; i < counter; i++) printf(" "); // напечатаем несколько пробелов, что бы компенсировать смещение в бите
int line_size = 12*8; // размер строки
fseek(f, p, SEEK_SET); // переедем сразу куда нужно
for (int i = 0; i < 640; i++) { // опытным путем установлено, что там 640 байт на картинку
int c = fgetc(f); // читаем по байту
if (c == -1) break; // ой, конец неожиданный файла, выходим
for (int j = 0; j<8;j++) {
int z = c & (1<<(7-j)); // извлекаем бит
if (z == 0) printf(" "); else printf("#"); // и печатаем его
counter++; // счетчик точек в строке
if (counter == line_size) {printf("\n"); counter = 0;} // новая строка
}
}
fclose(f);
}
Как увидеть картинку? очень просто. Распечатываем в консоль файл в виде битов - 1 и 0. А дальше смотрим на оригинальную картинку, выписываем последовательность нулей и единиц и ищем.
##### # # ##### # # ##### # # ##### #
# # # # # # # # # # #
# # # # # # # # # # #
#### # # #### # # #### # # #### #
# # # # # # # # # # #
# # # # # # # # # # #
# ### ##### ##### ##### ##### # ##### #####
# ### # #
# # # # #
# # # # # #
# # # # # #
# # # # # #
# # # # # #
##### ### # #
############## #
################ ##
## ## ##
## ## ###
## ## ###
## ## ##
## ## ###
## ## ###
## ## ###
## ## ##
## ## ##
################# ##
################## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ ## ##
################ #####
################ ###
################
################
##################
