Анализ шестнадцатеричной прошивки * .hex с программным обеспечением HEX EDITOR Каковы параметры, указывающие на то, что прошивка хороша или повреждена?
Анализ шестнадцатеричной прошивки * .hex с программным обеспечением HEX EDITOR
Каковы параметры, указывающие на то, что прошивка хороша или повреждена?
Привет всем
Я обращаюсь к наиболее опытным пользователям AVR
Если я прочитаю прошивку из флеш-памяти микроконтроллера ATMEGA644
и я хочу изучить его с помощью программы HEX Editor, которые являются параметрами, которые заставляют меня понимать, если они целы или повреждены?
Работа в Hex-редакторе Free Hex Editor Neo, на примере патча файла BkEnd.dll для работы 1С:Предприятие 7.7 с Microsoft SQL Server 2008 R2
В данной статье будет рассказано о работе в бесплатном hex-редакторе Free Hex Editor Neo, на примере правки файла BkEnd.dll из поставки 1С:Предприятие 7.7 для корректной работы этой системы с Microsoft SQL Server 2008 R2.
0. Оглавление
1. Немного о hex-редакторах и файлах
Как известно, любой файл, хранясь на жестком диске компьютера, представляет собой последовательность машинных слов — байтов. Байт, в свою очередь, состоит из 8 битов, каждый из которых может принимать значение «0» или «1» , а это означает, что один байт может принимать 2 8 =256 значений в диапазоне от 0 до 255. Число 25610, записанное в шестнадцатеричной системе, является круглым трёхзначным числом — 10016, т. е. для представления любого числа из диапазона 0—255 потребуется не более 2 разрядов. А это значит, что значение каждого байта очень удобно записать двузначным числом в шестнадцатеричной системе счисления.
Hex-редактор (англ. hex-editor) показывает нам файл, так, как его «видит» машина, а именно, последовательностью байтов. Например, открыв файл в редакторе, мы увидим матрицу, состоящую из 16 колонок и числа строк зависящего от размера файла. Каждое значение матрицы соответствует одному байту, записанному двузначным шестнадцатеричным числом. Изменяя значение нужного байта, мы можем, соответственно, изменить сам файл.
Кроме того, рядом с таблицей можем увидеть:
- Слева от матрицы отображается линейка из чисел: каждой строчке соответствует число, означающее адрес/смещение первого байта этой строчки. Шаг адресов при этом равен количеству колонок.
- Сверху от матрицы отображается другая линейка: над каждой колонкой отображается смещение байта, стоящего в этой колонке, относительно первого байта соответствующей строчки. Сумма числа, соответствующего i -той строке, и числа, соответствующего j -той колонке является адресом/смещением байта (i;j) , стоящего на пересечении взятой строки и взятого столбца.
- Справа от матрицы отображаются те же данные, но в другой интерпретации. Чаще всего используется альтернативное отображение данных как текста в кодировке ASCII , при этом байты, значения которых соответствуют непечатным символам, отображаются как точки ( · ). Редактировать значения можно и в этой области.

Подробнее о Hex-редакторах можно прочитать здесь.
2. Установка Free Hex Editor Neo
Скачиваем Free Hex Editor Neo с официального сайта. Программа бесплатна, на момент написания статьи последней была версия 5.14. Устанавливаем, следуя инструкциям инсталлятора, не меняя настроек по умолчанию. При первом запуске программа предложит выбрать режим интерфейса. Выбираем «Novice user» , этого более чем достаточно.

3. Работа с файлом hex-редакторе
Теперь откроем файл, который нам необходимо «подправить» выбрав «File» — «Open» — «Open File» в меню Free Hex Editor Neo. В моем случае это файл BkEnd.dll, находящийся в папке с установленной 1С:Предприятие 7.7 (По умолчанию «C:\Program Files\1Cv77\BIN» ) для статьи Установка 1С:Предприятие 7.7 на Microsoft SQL Server 2008 R2.
Например, мне нужно в байт со смещением 000d9cca записать значение eb. Для этого я нахожу строку «000d9cco» и столбец «0a», кликаю два раза по нужной ячейке и забиваю новое значение.

Действуя аналогично, я вношу следующие изменения:
- Для исправления ошибки «Требуется MS SQL Server 6.5 + Service Pack 5a или более старшая версия!» изменяем поля:
по смещению 000d9cca значение 83 меняем на eb
по смещению 000d9ccb значение e8 меняем на 15
по смещению 000db130 значение 83 меняем на eb
по смещению 000db131 значение e8 меняем на 10 - Для исправления ошибки «Порядок сортировки, установленный для базы, отличается от системного!»:
по смещению 0018a79d значение 75 меняем на eb - Для исправления ошибки «Неправильный синтаксис около ключевого слова «TRANSACTION»
Фразу DUMP TRANSACTION %s WITH TRUNCATE_ONLY , которая находится по смещению 002856B0 заменяем на фразу ALTER DATABASE %s SET RECOVERY SIMPLE - Для исправления ошибки «База данных не может быть открыта в однопользовательском режиме», изменяем поля:
по смещению 0028549c значение 64 меняем на 6b
по смещению 0028549d значение 62 меняем на 70
После того, как все изменения сделаны, сохраним файл, нажав «File» — «Save» .
Смотрите также:
В данном вебинаре я расскажу о применяемых в нашей компании правилах и приемах доработки типовых конфигураций 1С для облегчения их дальнейшей поддержки и обновления. В видео использованы материалы…
Официально, платформа 1С:Предприятие 7.7 работает только с MS SQL Server 2000. Но с помощью небольших манипуляций можно организовать стабильную работу и с последней, на момент написания статьи, версий Microsoft SQL…
Небольшая зарисовка на тему, какие были бы сливные трубы, если бы их делали 1С-ники.
H Навыки написания шаблонов и работы в hex-редакторе 010 Editor — Часть I в черновиках Из песочницы Tutorial
010 Editor — пожалуй, один из самых многофункциональных hex-редакторов. Основной его полезной возможностью является написание шаблонов (templates), с помощью которых можно легко описывать структуры любых файлов. Это значительно облегчает процесс обратной инженерии и технического анализа, многочасового копания в hex.
Примечание: статья аналитическая, предназначена для тех, кто не имеет большого опыта hex-исследований (надеюсь, картинки покажут процесс максимально наглядно).
Для того, чтобы разобраться с тем, что есть шаблоны 010 Editor-а и «с чем их едят», рассмотрим небольшой, но наглядный пример. Допустим, у нас есть файл, который может быть дампом памяти или сборником ресурсов (например, какой-нибудь видеоигры), необходимо понять, зачем он нужен, и описать структуру. В качестве учебного примера рассмотрим небольшой файл, представляющий собой бинарную версию каталога некой директории.
Часть 1 — предварительный анализ
Для начала откроем файл в hex-редакторе 010 Editor, видим непонятные названия (ASCII) и много-много цифр/символов: 
Попробуем немного проанализировать ситуацию.
- По смещению 0x0 мы видим 4 байта с целочисленным значением 2 — возможно, это некая величина типа данных int (DWORD), можем предположить, что это версия файла, оставим для себя такую заметку (обычно в заголовках файлов она указывается).
- По смещению 0x4 находится довольно большое целочисленное число 6043. Учитывая, что дальше видим огромный перечень симметрично повторяющихся записей с названиями, есть вариант, что это их количество. Также сделаем для себя такую заметку.

- Смещение 0x0 от начала блока данных (первая группа в 4 байта) — возрастающие значения: 0x0 (0), 0x5 (5), 0xA (10), 0xF (15) . Integer/DWORD 4 байта?
- Смещение 0x4 от начала блока данных (вторая группа в 4 байта) — всегда 0x5 (5). Integer/DWORD 4 байта?
- Смещение 0x8 — 0x25 (остальные байты до конца структура) — ASCII-строка, в конце которой нулевые байты.
Пока результаты нашего исследования неизвестны, насколько мы близки от истины. Поэтому переходим ко второй части.
Часть 2 — написание шаблона
Выбираем: Templates -> New template. Откроется окно, похожее на небольшой «блокнот» — текстовое поле для написания шаблона 010 Editor-а. Синтаксис шаблонов — Си-подобный (однако с рядом неплохих расширений, но это пока что опустим, равно как и ограничения).
Вспомним, какие у нас были предположения по поводу заголовка файла: первая группа 4 байта (смещение 0x0) — версия, вторая группа (смещение 0x4) — число записей. Оформим это в виде кода, описав структуру:
Наименования полей говорят сами за себя (кстати, давайте сразу учиться называть переменные правильно! в данной статье, да и вообще в программистской практике, я стараюсь придерживаться венгерской нотации, в которой первые символы наименования определяют тип поля или переменной).
Далее опишем структуру самой единичной записи:
И перейдем к описанию всего файла (заголовок + массив записей):
Общий вид окна шаблона — что в итоге должно получиться:

После этого можно запустить полученный код: Template -> Run Template.

Теперь можно посмотреть результаты в TemplateResults — вся структура файла отображается в удобном виде с легкой навигацией. Проверим, были ли мы правы на счет того, что поле 0x4 — количество записей. Действительно, шаблон «покрыл» исследуемый файл до самого конца — байт-в-байт!
Неизвестными остались поля unk1 и unk2. Просмотрев таблицу, сгенерированную при выполнении шаблона, мы можем увидеть некую зависимость, исходя из которой значения unk1 всегда возрастают, а unk2 — никогда не равно нулю. Очень похоже на то, что unk1 есть ни что иное, как смещение файла в некоем другом сборнике, при чем указано оно в блоках данных (забегая вперед, уточню: в данном случае 2048 байт), такой метод хранения используется довольно часто. А unk2 — размер самого файла, указанный также в блоках. Так что эти поля можно назвать dwOffset и dwFileSize.
Вывод
На рассмотренном «игровом» примере, быть может, не слишком характерно показана необходимость в 010 шаблонах — по сути это лишь учебный пример для наглядной демонстрации базовых возможностей. Но представьте, если приходится описывать крупные файлы со сложными (вложенными, многоуровневыми) структурами, сколько усилий и времени на это тратится.
Шаблоны позволяют существенно сократить временные траты, и лучше «уложить все в голове». Используя потенциал Си-подобного синтаксиса, можно без труда использовать циклы, условия, функции, фактически писать Си-код для обработки файла (который будет в разы проще, чем если делать отдельную программу с тем же самым назначениям).
Буду рад услышать дополнения и комментарии! Это лишь только своеобразная «вводная» статья, дальше планирую продолжать уроки, как по базовым навыкам hex, так и по методологии написания шаблонов в 010 Editor. С уважением, Dageron.