繁体   English   中英

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

[英]Extract Strings from Binary Files in VB.Net

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM