Извлекать строки из двоичных файлов в VB.Net
-
12-09-2019 - |
Вопрос
Я хочу очистить строковые данные из некоторых двоичных текстовых файлов, содержащих встроенные инструкции SQL.Мне не нужна какая-то причудливая очистка - просто какой-то способ извлечь читаемый текст.Я использую vb.net, но вызов внешней утилиты тоже сработал бы.
Решение 4
Спасибо всем.Отличные идеи.Действительно помогло мне подумать.Голоса за всех вокруг.В итоге мне не нужно было быть очень уверенным, что это струны, поэтому я прибегнул к быстрому, неаккуратному и уродливому взлому.
'strip out non-string characters
For Each b As Byte In byteArray
If b = 9 Or b = 10 Or b = 13 Or (b > 31 And b < 127) Then
newByteArray(i) = b.ToString
i += 1
End If
Next
'move it into a string
resultString = System.Text.Encoding.ASCII.GetString(newByteArray)
Другие советы
Утилита GNU strings существует всегда и делает более или менее точно это, используя эвристику для извлечения любых данных, которые "выглядят как строка", из двоичного файла.
Возьмите GNU binutils (включая строки) для Win32 из MinGW: http://sourceforge.net/projects/mingw/files/.
Это не так тривиально, как может показаться на первый взгляд.Строка может быть закодирована многими способами.Что вы считаете "читаемым текстом", как выглядят нечитаемые части?Скажи, что это выглядит вот так:
&8)JÓxZZ`\■£ÌS?E?L?E?C?T?*?F?R?O?M?m?y?T?b?l?§ıÍ4¢
вам повезло, потому что он, скорее всего, закодирован с использованием UTF-16 или другой многобайтовой кодировки.Распознать их довольно тривиально.Но практически во всех других случаях (UTF-8, ISO-8859-1, Windows-1252) практически невозможно отличить отдельный символ от текста или нетекста, если вы не знаете, как начинается определенный "читаемый текст" и чем он заканчивается.
Дело в том, что:разрешено все, что угодно, и считается читаемым текстом.UTF-8, ASCII и Windows-1252 допускают даже нулевые символы (в то время как некоторые языки программирования этого не делают). Вот такая нить это дает пример VB того, как вы можете действовать, это может дать вам некоторые подсказки.
PS:анализировать данные такого типа может быть непросто, но вам бы очень помогло, если бы вы могли куда-нибудь загрузить свой файл, чтобы мы могли взглянуть.