2009-12-03 51 views
1

我想從包含嵌入式SQL語句的一些二進制文本文件中提取字符串數據。我不需要任何花哨的清理 - 只是提取可讀文本的一些方法。我使用的是vb.net,但是調用外部工具也可以。從VB.Net中的二進制文件中提取字符串

回答

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) 
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:分析這種類型的數據可能很困難,如果您可以將文件上傳到某個地方,那麼我們可以看一看。

+0

當我打開我想看看在記事本中我關心的絃線部分的TEXTFILES都清晰可見。我認爲我需要做的就是去掉任何非字符串,我會被設置? – Jeff 2009-12-03 20:52:23

+1

我希望你是對的,但並不那麼容易。記事本不知道*這些字符串,它只是顯示它們。查看任何二進制文件(即圖像),你會發現「可讀」的部分。假設你逐個角色地觀察它,你能否在整個文件中主動選擇一個始終爲「字符串」的字符範圍? – Abel 2009-12-03 20:55:53

3

的GNU strings實用程序已經撒手人寰,並做更多或多或少的正是這種利用啓發式猛拉說,「看起來像一個字符串」從二進制的任何數據。

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

+0

僅供參考,字符串的輸出將包含大量誤報,但鑑於您知道要查找的字符串的語法(SQL語句),因此不會過濾僅您要查找的內容。 – 2009-12-03 21:53:43

+0

+1,尤其是因爲我也看着它,並認爲它不合適。我錯了! ;-)。請注意,使用啓發式不是羅塞塔的石頭...... – Abel 2009-12-03 22:12:06