Delphi прочитать бинарный файл
У меня есть бинарный файл. Я не знаю, как он отформатирован, я знаю только, что он исходит из кода delphi.
Есть ли способ проанализировать двоичный файл?
Существует ли какой-либо «шаблон» для анализа и десериализации двоичного содержимого файла неизвестного формата?
Это программа на delphi, которая позволяет создавать экзаменационные тесты. Созданный файл является двоичным.
У вас есть доступ к программе, которая может читать этот тип файлов и отображать результаты обследования? Если да, то это сделает ваш опыт движения задним ходом НАМНОГО проще, так как вы можете подключиться к этому приложению и посмотреть, что оно делает.
- Десериализовать данные : проанализировать, как они скомпилированы в вашем exe (попробуйте File Analyzer ). Попробуйте десериализовать двоичные данные на обнаруженном языке. Затем сериализуйте его в формате xml (независимо от языка), который может понять каждый язык программирования.
- Проанализируйте двоичные данные : попробуйте сохранить различные версии файла с небольшими вариациями и используйте программу сравнения для анализа значения каждого бита с помощью шестнадцатеричного редактора. Используйте его в сочетании с методами взлома двоичных файлов (например, Как взломать формат двоичного файла от Франса Фааза )
- Выполните обратный инжиниринг приложения : попробуйте получить код с помощью инструментов обратного проектирования для языка программирования, используемого для создания приложения (можно найти с помощью File Analyzer ). В противном случае используйте инструмент анализа дизассемблера, такой как IDA Pro Disassembler.
Хорошо, на этот вопрос никогда не будет ответа! Если хотите, скопируйте и вставьте этот ответ. Буду очень рад отметить ваш ответ! И вы тоже будете очень счастливы! Меня не интересует репутация, я только хочу отметить ответ на этот вопрос. А ты? В чем ваш настоящий интерес?
если вы посмотрите на другие вопросы, когда автор хотел предоставить резюме, он отредактировал вопрос и добавил это там. Меня не волнует репутация, но эти ответы дали пользователи.
@Geo Иногда тот, кто задал вопрос, вложил больше усилий в эту тему. Сказав это, он мог бы быть хорошим кандидатом для ответа, поскольку он, вероятно, проверил рекомендованное пользователями решение. Я не могу найти в этом ничего плохого для сообщества, еще раз, потому что есть правила.
Для моего хобби-проекта мне пришлось перепроектировать некоторые старые игровые файлы. Мои подходы были:
- Получите хороший шестнадцатеричный редактор.
- Ищите читаемые слова в двоичном файле. Обратите внимание на их распределение. Если расстояние между ними постоянно, вы знаете, что это листинг.
- Ищите 2–3 последовательных нуля. Может указывать на значение int32.
- Некоторые слова могут быть указателями на файл.
- Попытайтесь определить повторяющиеся закономерности в файле.
- Наличие большого количества C0-CF может указывать на сжатые данные RLE.
Я разработал Hexinator (Window и Linux) и Synalyze It! (macOS) именно для этого. Эти приложения позволяют вам видеть двоичные файлы, как в других шестнадцатеричных редакторах, но дополнительно вы можете создать «грамматику» с особенностями формата двоичного файла. Грамматика содержит все строительные блоки и используется для автоматического анализа файла.
Таким образом, вы можете сохранить знания, полученные в результате анализа, и применить их одновременно к нескольким файлам. Вы также можете присвоить цветам отдельные фрагменты форматов файлов для быстрого обзора в шестнадцатеричном редакторе. Результаты синтаксического анализа отображаются в виде дерева, где вы также можете легко изменять файлы (применяя порядок следования байтов и так далее).
Еще нет. Грамматики могут содержать скрипты Python (и Lua). Скорее всего, будет модуль расширения Python, который позволит вам использовать грамматический движок в собственных скриптах. Свяжитесь со мной, если хотите протестировать :)
Я попробовал это и потратил больше времени на борьбу с этим, чем на продуктивную работу. В частности, если бы я хотел изменить строчку в грамматике, я бы не смог. Это не позволило мне удалить или отредактировать строку. Другие могут посчитать его полезным, но я удалил его после 10 минут ничего, кроме разочарования, я лучше справляюсь с простым старым текстовым редактором.
Обратное проектирование двоичного файла, когда вы имеете некоторое представление о том, что он представляет, - это очень трудоемкий процесс. Если вы понятия не имеете, что это такое, будет еще труднее.
Хотя это возможно, но для этого у вас должна быть достаточно веская причина.
Первым шагом было бы открыть его в любом шестнадцатеричном редакторе по вашему выбору и посмотреть, сможете ли вы найти какой-либо текст на английском языке, который укажет вам направление того, что файл должен представлять. Оттуда, Google "двоичные файлы обратного проектирования", есть гораздо более знающие люди, чем я, которые написали руководства по этому поводу.
Здраствуйте, форумчане. Сегодня столкнулся с такой проблемой: Есть бинарник и в нем есть текст возьмем к примеру слово "Door"
Картинка 1
Ну, и написал простеньую программу чтения.
То есть, я точно знаю сколько выделяется байт на текст и читаю, но программа выдает очень странный результат: "oor" - пропадает первая буква
Картинка 2
Первая буква куда-то пропадает, не подскажите, как этого можно избежать? О_о уже 3тий день бьюсь.
Чтение бинарного файла
Добрый вечер дорогие программисты! Хотел бы понять как прочитать бинарный файл по его структуре.
Чтение из бинарного файла
имеется такой код: procedure TForm6.Button3Click(Sender: TObject); var tf:TFileStream; .
Чтение строки из бинарного файла
Доброго времени суток ув. форумчане. Помогите советом. Имеется бинарный файл из которого.
Запись/чтение из бинарного файла. BlockRead
Впервые использую BlockRead и BlockWrite, видимо что то не правильно понял. Запись: i : Word; .
Stellz, string - это не байтовый буфер.
Читать в массив и переводить из Byte (или из Char) в строку всё равно придётся.
Потому что первым элементом в переменной sr:string[4], является элемент sr[0] - он содержит сведения о размере строки. Вот в этот элемент и записывается первый прочитанный символ. И после этого его код означает размер строки. Т. е. читать данные так надо:
В этом случае данные из файла запишутся в строку sr, начиная с индекса 1 - т. е. запись будет правильной и метаданные строки не будут повреждены.
---
Я предлагаю в качестве буфера использовать не короткие строки, а длинные. Это очень удобно. Вот какой будет при этом код:
Спасибо Вам большое, сейчас буду пробовать
Добавлено через 12 часов 26 минут
Сегодня проверил, данный способ работает, если знать зарание сколько отводится байт на текст, а вот если строке под текст отведено 128 байт, программа вылядит аналогично:
Выводится пустая строка.
Добавлено через 18 минут
Но если выводит по символу
Edit2.text:=sr[1]; - выводится 'D'
Edit2.text:=sr[2]; - выводится 'o'
Но при Edit2.text:=sr; - ничего не выводится.
Выводится пустая строка.
Добавлено через 18 минут
Но если выводит по символу
Edit2.text:=sr[1]; - выводится 'D'
Edit2.text:=sr[2]; - выводится 'o'
Но при Edit2.text:=sr; - ничего не выводится.
Всё правильно. У нас объявлена строка s : String[128]. В этой строке элемент с номером 0 (ноль) хранит длину строки. В начале, у нас строка пустая, т. е. её длина равна нулю:
Length(sr) = sr[0] = 0.
Потом мы загружаем в s данные из файла. Но длина строки остаётся прежней. Поэтому, не смотря на то, что область данных строки содержит загруженные символы, тем не менее, строка считается пустой, потому что имеем: s[0] = 0.
Надо делать так (в случае коротких строк):
Добрый вечер ! В программирование новичок,( Дельфи7, язык Pascal) есть небольшие свои проекты, но вот по основному направлению, нигде
не могу найти реализацию нужной мне программки, так как везде объясняется работа с файлами текстового формата, а
вот работа с файлами в форматах bin, Hex. нет нигде. Суть моего вопроса, такова: как реализовать в файлах формата
bin,Hex считывание из нужной строки информации , конвертации её в десятеричное число( если возникнет такая
необходимость) и вывести на экран с помощью Label, или Memo?. Программа нужна для работы с техникой, обработка
информации об ошибках, которые хранятся в файлах Bin, Hex (прошивка) и имеют на разных прошивках, разные
адреса и расположение. Как переходить на нужную строку, считать нужные данные, вывести в прогу и при
необходимости обнулить сектора, в которых располагаются ошибки. Материала не нашёл чёткого нигде в инете, везде
только с текстовыми файлами и нет чёткого, пошагового объяснения как работать с файлами и строками других
файлов( не текстовых). Запутался окончательно, начитавшись о файлах и теперь даже не знаю с чего начать, хотя
чётко представляю что должна делать программа. Всё приходится делать в Hex редакторе, загнав туда прошивку
просмотрев на нужных адресах ошибки переписать их, далее обнуляю зону ошибок на FF и пере сохраняю прошивку,
уже очищенную. Но нужна программа, для быстроты работы, а главное понять процесс работы с такими файлами, чтоб
самому писать программу, так как данные в прошивках меняются постоянно, как и объём прошив и универсальной
программы не написать, придётся время от времени вносить изменения в программу. Поэтому хочется понять процесс
работы с файлами bin, Hex как считывать , переводить и выводить в программу нужные байты. Если кто может
объяснить пошагово как это реализовать, буду очень признателен. Да работаю с Дельфи 7.
отправил на Вашу почту письмо.
Буду очень признателен за помощь.
Мне бы любой способ подошёл, а то не знаю с чего начать, инфы много по разным файлам, а по моей специфики нет. Голова кругом, а с места ни как не могу сдвинутся. Всякие другие программки научился по которым подробная инфа была, а по нужной мне специфики материала нет. А мне очень хочется освоить нужное мне направление. Буду очень признателен за помощь. Файлы с которыми работать придётся имеют разный объём, от 256 , 512 байт, 2048, зона еепром 2кб и на разных моделях разные адреса расположения ошибок и разный объём прошив. Хотя идут главные в бин формате, это основной и главный. А суть загрузить прошивку в прогу, считать ошибки и перевести их в число. Пример ошибка может быть в зоне так : 03, надо вывести на прогу как просто ошибка Е-3, а бывает чаще что идёт так :А1, FD, DC и это надо перевести в цифры, 120 раз, 140, 123, раза возникала ошибка. делаю всё в редакторе в ручную, проги есть такие некоторые мастера написали их для себя, по новым у них нет данных, у меня данные есть, а реализовать не могу в проге, только в Hex редакторе.
Семён-2014 меня тоже интересует востонавление прошивок ( с радиоаппаратуры) вот только в отличии от тебя я не знаю вообще как и счего начать- какие то минимальные победы есть но успехов мизер- буду блогодарен за направления что и где почитать с чего начать-особенно интересует-как в Нех менять и находить убитые блоки!
Семён-2014 меня тоже интересует востонавление прошивок ( с радиоаппаратуры) вот только в отличии от тебя я не знаю вообще как и счего начать- какие то минимальные победы есть но успехов мизер- буду блогодарен за направления что и где почитать с чего начать-особенно интересует-как в Нех менять и находить убитые блоки!
Здравствуйте! , я так понимаю что Вас интересует не столько написание программ, сколько анализ, правка, считывание и зашивка прошивы в электронный блок ? Если я прав то тогда по порядку:
1)Чтоб анализировать файл прошивки, надо знать его точный объём, расположение ошибок, на определённых адресах, расположение контрольной и прописной суммы от объёма прошивы, если они расходятся( прописались неправильные данные в область постоянных значений, в процессе работы технике), то тогда прошива не исправна.
2)Знания по микроконтроллерам и микросхем ПЗУ, электронные компоненты на электронном модуле.
3) изучать даташиты
4)Уметь отличать что привело к поломке технике, слёт, повреждение прошивки, или следствие не исправности в электронном блоке(кз), или периферии.
5)умение подключится к электронному модулю, либо через сервисный разъём(если есть таковой), либо методом подпайки к микросхеме.
6) умение пользоваться программатором, или спец сервисным оборудованием, для считывания и зашивания прошивы.
Вот наверное с того чего надо начинать.
Потом многое зависит с какой техникой Вы работаете, малый быт, крупный быт? В каждом направление свои нюансы, разные микросхемы и соответственно разные прошивки и работа с ними. Универсальных методов нет, поэтому всегда приходится учится и что то новое дорабатывать.
Здесь как в программировании, чем больше занимаешься, тем больше продвигаешься и знаешь, чуть перерыв, опять забыл, вспоминаешь.
Чтобы прочитать файл EBML на байтовом уровне, нужно прочитать заголовок, убедившись, что это файл EBML, и получить информацию о файле. Файлы MKV могут быть огромными, размером от 1 до 30 ГБ.
Двоичный файл может быть любым, jpeg, bmp, avi и т. Д. Я просто хочу научиться их читать.
Очень расплывчатый вопрос. Но мой ответ может помочь. - Andreas Rejbrand
Что ж, я хотел заложить основу, прежде чем углублюсь в формат EBML. Смысл EBML отличается от большинства других типов файлов, по сути, это xml. Я посмотрел на другие компоненты для справки, такие как поддержка Gif и Png в Delphi. - Logman
приведенные здесь примеры показывают, как читать блок, но не отдельные байты . Я довольно новичок в этом, но с форматом EBML они используют целые числа переменного размера, и в настоящее время это может быть выше моей головы =) - Logman
Для работы с одиночными байтами @Logman просто прочтите блоки размером 1. - Rob Kennedy
Чтение 1 байта каждый раз без использования буферизации может быть довольно медленным. Верно, что ОС будет что-то буферизовать, но в зависимости от объема данных для чтения этого может быть недостаточно. Обычно лучше загрузить n байт в память, а потом работать по памяти. - user160694
3 ответы
В основном вы делаете
Например, файл растрового изображения начинается с символа BITMAPFILEHEADER структура, за которой (в версии 3) следует BITMAPINFOHEADER . За ним следует необязательный массив элементов палитры, за которым следуют несжатые пиксельные данные RGB (в простейшем случае, здесь в 24-битном формате): BBGGRRBBGGRRBBGGRR .
С другой стороны, чтение JPG - это очень сложно, потому что данные JPG сжимаются таким образом, что требуется много продвинутой математики, чтобы даже понять (я думаю - я на самом деле никогда особо не углублялся в спецификации JPG). По крайней мере, это верно для многих современных форматов файлов изображений. BMP, с другой стороны, тривиален - «худшее», что может случиться, - это сжатие изображения RLE.
BlockRead - это старый способ TP читать файл таким образом. ИМХО это устаревшая, устаревшая техника. Используйте поток, это более общий интерфейс, который может использовать преимущества различных методов доступа (буферизованный поток, отображение памяти и т. Д., Если у вас есть или написан класс, реализующий их) с согласованным интерфейсом. - user160694
@Idsandon: Хорошо, но он работает отлично (и я написал много кодировщиков / декодеров для большого количества типов двоичных файлов). Зачем отказываться от работающей системы? - Андреас Рейбранд
Цикл статей по работе с файлами: hex-кодом файла, шифровке и дешифровке файлов. Статья 1. Получение HEX-кода .exe файла:
Будет очень много букв, но весь лишний трёп будет ограждён в специальные кавычки. Если ты тут по делу - то просто смотри коды с пояснениями к ним :)
____________________Работа_с_файлами__________________
Собственно в двух словах о том, что реализовывать собираюсь : программка с лёгким для пользователя интерфейсом, которая читает любой загружаемый в неё файл бинарно (байты, мать их), а затем с гордостью шифрует всё что прочитала по какому-либо алгоритму. Алгоритмов попробую сделать несколько (какие - это уже в процессе работы). Ну и соответственно во втором окне будет обратный алгоритм, для расшифровки. + вспомню работу с файлами в delphi, что уже забывается. Ладно, в путь.
Итак, примерный план работ:
1) Вспоминаем работу с файлами в делфи (бинарное открытие и чтение файла)
2) Учимся открывать файл и читать его HEX-код
3) Рассматриваем алгоритмы (тут же выбираем 2-3 нужных)
4) Реализовываем шифровку - расшифровку.
1) Что знаем про файлы в Delphi? Как раз, у файлов есть свои файловые типы. Для бинарной работы соответственно должны быть свои. Это тип FILE, тип CHAR , byte. Пожалуй на этих пока остановлюсь. CHAR - это символьный тип, и не обязательно размер его 1 байт. Может и больше. Тип FILE - тип бинарных файлов, если совсем просто (видит файл как набор байтов). Ну и тип byte - размерность от 0 до 255. Теперь основные операции с файлами :
Assign (переменная, файл) - привязывание переменной к файлу.
Reset - открытие файла для чтения, записи, чтения и записи. В зависимости от параметров.
ReWrite - открытие файла для записи (only).
____________________/Работа_с_файлами__________________
Форма для работы:
2) Для начала нужно научиться получать HEX-код файла (подразумевается .exe файл).
HEX-код это 16-тиричный код файла (1-9, 10-А, 11-B и т.д до 16-F). Код выводить будем в RichEdit. Почему не во всеми любимый memo? Потому что MEMO прогружается при компиляции как несколько десятков (сотен) тысяч строк. Так что при загрузке hex-кода придётся очень долго ждать из-за грузоёмкости самого компонента. Недолго по-экспериментируя нашли самый оптимальный вариант - RichEdit. Дело в том что прогружается данный компонент динамически, и строки в него заносятся уже в процессе работы.
Сейчас рассмотрим рабочий код, спасибо Mawrat'у c CyberForum, очень помог :)
На этом первую статью заканчиваю. Во второй попробуем зашифровать hex файла и расшифровать, так же разберём алгоритмы (в частности XOR, RC4).
Читайте также: