在VB.Net中从二进制文件中提取string

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

供参考: http : //technet.microsoft.com/en-us/sysinternals/bb897439.aspx

GNU字符串实用程序已经存在了很长一段时间,通过使用启发式来从二进制文件中抽取任何“看起来像一个字符串”的数据,就可以做到或多或少。

从MinGW获取Win32的GNU binutils(包括字符串): 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甚至允许NULL字符(而一些编程语言则不允许)。 这里有一个线程给出了一个VB如何继续进行的例子,它可能会给你一些提示。

PS:分析这种类型的数据可能很困难,如果你能把文件上传到某个地方,我们可以看一看。

谢谢大家。 伟大的想法。 真的帮我想想。 上下左右。 结束了,我不需要非常肯定他们是弦,所以我走了一个快速,草率,丑陋,黑客。

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