Клуб экспертов THG.ru

Клуб экспертов THG.ru (http://www.thg.ru/forum/index.php)
-   Программное обеспечение (http://www.thg.ru/forum/forumdisplay.php?f=45)
-   -   HEX-редактор с возможностью поиска данных "от обратного" (http://www.thg.ru/forum/showthread.php?t=100562)

9285 01.10.2018 18:15

HEX-редактор с возможностью поиска данных "от обратного"
 
Имеется файл в котором огромный массив тех или иных байтов и нужно найти первый, отличающийся от 00 (или FF).
В чём можно реализовать такую задачу?

dark-forse 01.10.2018 18:22

9285, Файл в каком формате и файл чего ?

Yolenzo 01.10.2018 18:27

Если на пальцах, то что-то подобное (если сам массив можно как-то экспортировать) делал я очень давно в том же Dreamviewer с написаниеим правила цикла if и while wend и с добавлением исключений игнорирование определённых паттернов, писал не я, просто программисту объяснил, что мне нужно по такому-то принципу выбора от первого правила до последних чисел, пападающих под условие функции. После чего на выходе я получал маркеры найденных элементов (exit do), чтобы уже их заменить или выборочно поменять.

Нужно искать скриптовика, который бы смог скомпелировать софт с такой функцией, к примеру, можно уточнить это у regist т.к я для его проги, что он сам написал рисовал иконку.

9285 01.10.2018 18:40

dark-forse
Если критичен тип файла, то тогда конкретизирую задачу.
В NTFS есть битовая карта тома в которой отмечено какие кластера заняты. И там три типа байтов:
00 - восемь кластеров не заняты ничем
FF - восемь кластеров заняты
хх - любой вариант, отличающийся от вышеуказанных, означающий что какое то количество кластеров из восьми занято.

Вот конкретно сейчас мне надо найти самый последний используемый кластер. То есть искать первый байт от конца, отличающийся от 00.

Другой вариант. Есть сплошной блок занятых кластеров (FF) - нужно найти первый, отличающийся от FF.

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

Staind 01.10.2018 20:54

9285, И что должно произойти дальше? Программа должна вывести номер байта !=00 OR !=FF ?

Добавлено через 1 минуту
Скинь мне пример такого файлика в сжатом виде на почту.

9285 01.10.2018 21:26

Вложений: 1
Staind
Ничего. ;)
Эта возможность нужна в разных случаях, но конкретно сейчас для того чтобы определить где находится последний записанный кластер. Оффтоп
Пример можешь получить и сам - извлечь $Bitmap с любого тома.
Тем не менее - архив в атаче.

9285 01.10.2018 21:54

PS. В приложенном файле визуально я нахожу "конец занятого пространства" в строке с адресом 0x17B8B0 но я не уверен что где то до конца файла не имеется какой либо ещё один (или более) байт, отличающийся от 00.

Staind 02.10.2018 00:13

9285, может я чего не так понял или сделал. Только что написал вот такое.



Т.е. скрипт ищет в заданном файле в нашем случае Bitmap.bin значение и выдает последний номер байта, где найдено значение 00 либо FF

PS
Я не уверен, что правильно понял задачу.

9285 02.10.2018 00:46

Staind
Я не программист, и если напишу что что то понял, то обману. ;)
Как запустить этот скрипт?

Добавлено через 3 минуты
Что касается задачи, то она обратная.
Применительно к этому файлу, мне надо найти самый первый байт от конца файла, в котором будет что то, отличающееся от 00.

Вообще, подобный поиск нужен и при работе с диском.
То есть я знаю что есть куча 00, но где то должен быть отличающийся байт - но неизвестно какой. Именно поэтому то и нужен поиск "от обратного" - то есть найти что то, отличающееся от заданного.

9285 02.10.2018 01:03

Вложений: 1
Применительно к примеру - по смещению 0x17B8B6 видим байт 3F а далее идут сплошняком 00.
В битовой карте тома каждый бит отвечает за то занят кластер или нет (0 - свободен, 1 - занят). Можно 3F разложить побитно и определить с точностью до кластера, но в данном случае такая точность некритична. Поэтому считаем что не перезаписанные кластера начинаются с 1554615*8=12436912

Staind 02.10.2018 01:36

Вложений: 1
Цитата:

Сообщение от 9285 (Сообщение 2243152)
Как запустить этот скрипт?

1. Надо установить Python (под свою ОС - внизу страницы. Важно - в процессе инсталляции обязательно отметьте птичкой пункт PATH)
2. Сохранить файл со скриптом например в блокноте, потом заменить стандартное расширение *.txt на *.py (я уже создал файл и приложил его к этому сообщению)
3. Разместить этот файл в папке с Bitmap.bin и запустить его.

Цитата:

Сообщение от 9285 (Сообщение 2243152)
Вообще, подобный поиск нужен и при работе с диском.

Посмотри что мой скриптик нашел:



После запуска мой скрипт находит порядковый номер байта, который содержит либо FF либо 00. Причем поиск происходит начиная с конца файла. В сброшенном тобой примером скрипт нашел то, что я показал вручную на скрине в HEX редакторе.

Правильно ли все нашлось?

regist 02.10.2018 01:40

Цитата:

Сообщение от 9285 (Сообщение 2243036)
Если критичен тип файла, то тогда конкретизирую задачу.

т.к. работа с HEX то абсолютно без разницы какой там тип.
Цитата:

Сообщение от 9285 (Сообщение 2243152)
Как запустить этот скрипт?

Насколько понимаю у него на скрине скрипт для питона. Но так как только скрин, то вам наверно надо брать его переписывать со скрина, а потом разбираться с питоном.
Вроде эту задачу можно решить и на VBS (плюс этого решения, что не требуется никаких внешних утилит для запуска скрипта и при необходимости его можно поправить самому как надо).
Либо написать и скомпилировать на любом языке - Аутоит, С++ или что кому ближе.
Цитата:

Сообщение от 9285 (Сообщение 2243152)
Что касается задачи, то она обратная.

просто поправить условие на !=

9285 02.10.2018 01:44

С Python понятно - но иногда подобные задачки надо решать на клиентском компе и не всегда в работающей системе (чаще всего используется WinPE), поэтому, если не будет варианта hex-редактора, то буду пробовать использовать скрипт.
Нашлось не то. Я же говорю, мне нужно найти байт отличающийся от 00 (последний в файле байт 80 не в счёт).

regist 02.10.2018 01:51

9285, а как на вход ему файл собираетесь подавать? Это всегда будет дамп с диска с фиксированным именем?

Staind 02.10.2018 01:52

Цитата:

Сообщение от 9285 (Сообщение 2243160)
С Python понятно - но иногда подобные задачки надо решать на клиентском компе

Для этого скрипт можно скомпилировать в *.ехе тогда можно будет запускать на любой виндовс совместимой машине. При этом не будет необходимости устанавливать сам интерпретатор Пайтона. Все будет работать из коробки.

Цитата:

Сообщение от 9285 (Сообщение 2243160)
мне нужно найти байт отличающийся от 00 (последний в файле байт 80 не в счёт).

Т.е. 1. надо искать с конца, но самый последний байт игнорировать.
2. Отдельный пример
Код:

AA AA AA BB CC 00 00 00 00 00 00 80
В этом примере надо чтобы скрипт нашел СС, верно?


Часовой пояс GMT +4, время: 08:15.

Работает на vBulletin® версия 3.6.10.
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Перевод: zCarot