Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VB.Net中从二进制文件中提取字符串_.net_Windows_Vb.net_String_Binaryfiles - Fatal编程技术网

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

在VB.Net中从二进制文件中提取字符串,.net,windows,vb.net,string,binaryfiles,.net,Windows,Vb.net,String,Binaryfiles,我想从一些包含嵌入式SQL语句的二进制文本文件中提取字符串数据。我不需要任何花哨的清理,只需要一些方法来提取可读文本。我使用的是vb.net,但是调用外部实用程序也会起作用。这并不像一开始看起来那么简单。字符串可以用多种方式编码。你认为可读的文本,不可读的部分是什么样子的?假设它看起来像这样: &8)JÓxZZ`\■£ÌS?E?L?E?C?T?*?F?R?O?M?m?y?T?b?l?§ıÍ4¢ 您很幸运,因为它很可能使用UTF-16或其他多字节编码。这些都是相当琐碎的认识。但是,在几

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

这并不像一开始看起来那么简单。字符串可以用多种方式编码。你认为可读的文本,不可读的部分是什么样子的?假设它看起来像这样:

 &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:分析这类数据可能很困难,如果你能将文件上传到某个地方,我们可以查看一下,这将非常有帮助。

这并不像一开始看起来那么琐碎。字符串可以用多种方式编码。你认为可读的文本,不可读的部分是什么样子的?假设它看起来像这样:

 &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:分析这类数据可能很困难,如果您能将文件上传到某个地方,我们可以查看一下,这将非常有帮助。

参考: 参考:

GNU字符串实用程序已经存在很久了,它通过使用启发式从二进制文件中提取任何看起来像字符串的数据,或多或少地做到了这一点

从MinGW获取GNU binutils,包括Win32字符串:
.

GNU字符串实用程序已经存在了很久,它通过使用启发式从二进制文件中提取任何看起来像字符串的数据,或多或少地做到了这一点

从MinGW获取GNU binutils,包括Win32字符串:
.

谢谢大家。好主意。真的帮助我思考。到处都是选票。最后,我不需要非常确定它们是弦,所以我用了一种快速、草率、丑陋的方法

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

谢谢大家。好主意。真的帮助我思考。到处都是选票。最后,我不需要非常确定它们是弦,所以我用了一种快速、草率、丑陋的方法

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

当我打开要在记事本中查看的文本文件时,我关心的字符串部分清晰可见。我想我所需要做的就是去掉任何非字符串的东西,我就会被设置好了?我希望你是正确的,但这并不是那么容易。记事本不知道这些字符串,它只是显示它们。查看任何二进制文件,例如图像,你会发现可读部分。假设你一个字符一个字符地看,你能在整个文件中选择一系列始终是字符串的字符吗?当我打开要在记事本中查看的文本文件时,我关心的字符串部分清晰可见。我想我所需要做的就是去掉任何非字符串的东西,我就会被设置好了?我希望你是正确的,但这并不是那么容易。记事本不知道这些字符串,它只是显示它们。查看任何二进制文件,例如图像,你会发现可读部分。假设您逐个字符地查看它,您能肯定地选择整个文件中始终为字符串的字符范围吗?仅供参考,字符串的输出将包含大量误报,但如果您知道要查找SQL语句的字符串的语法,只过滤你想要的东西并不难。+1,特别是因为我也看过,认为它不合适。我错了吗。请注意,使用启发式并不是罗塞塔石碑…仅供参考,字符串的输出将包含大量误报,但如果您知道要查找SQL语句的字符串的语法,则只筛选您要查找的内容并不困难。+1,特别是因为我也查看了它,并认为它不合适。我错了吗。请注意,使用启发式不是罗塞塔石。。。