从VB.Net中的二进制文件中提取字符串

时间:2009-12-03 20:41:47

标签: .net windows vb.net string binaryfiles

我想从一些包含嵌入式SQL语句的二进制文本文件中抓取字符串数据。我不需要任何花哨的清理 - 只是某种方式来提取可读文本。我正在使用vb.net,但是调用外部工具也可以。

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

GNU字符串实用程序已经永远存在,并且通过使用启发式方法从二进制文件中抽取任何“看起来像字符串”的数据,或多或少地做到这一点。

从MinGW获取Win32的GNU binutils(包括字符串):  http://sourceforge.net/projects/mingw/files/

答案 2 :(得分:1)

这并不像最初看起来那么微不足道。字符串可以以多种方式编码。您认为“可读文本”,不可读部分的外观如何?说它看起来像这样:

 &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允许偶数NULL字符(而某些编程语言则不允许)。 Here's a thread给出了一个VB示例,说明如何继续,它可能会给你一些提示。

PS:分析这类数据可能很难,如果你可以把你的文件上传到某个地方,这将有很大的帮助,所以我们可以看看。

答案 3 :(得分:0)

谢谢大家。好主意。真的帮助我思考。全方位投票。结束了我不需要非常确定它们是字符串所以我选择了一个快速,草率,丑陋的黑客。

 '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)