我想從包含嵌入式SQL語句的一些二進制文本文件中提取字符串數據。我不需要任何花哨的清理 - 只是提取可讀文本的一些方法。我使用的是vb.net,但是調用外部工具也可以。從VB.Net中的二進制文件中提取字符串
回答
謝謝大家。偉大的想法。真的幫助我思考。四處升騰。最後,我不需要確定它們是否是字符串,所以我用一種快速,草率,醜陋的黑客行事。
'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)
這並不像起初看起來那麼微不足道。一個字符串可以用許多方式編碼。你認爲什麼是「可讀文本」,不可讀部分是怎麼看的?說它看上去像這樣:
&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:分析這種類型的數據可能很困難,如果您可以將文件上傳到某個地方,那麼我們可以看一看。
的GNU strings實用程序已經撒手人寰,並做更多或多或少的正是這種利用啓發式猛拉說,「看起來像一個字符串」從二進制的任何數據。
從MinGW獲取Win32的GNU binutils(包括字符串): http://sourceforge.net/projects/mingw/files/。
僅供參考,字符串的輸出將包含大量誤報,但鑑於您知道要查找的字符串的語法(SQL語句),因此不會過濾僅您要查找的內容。 – 2009-12-03 21:53:43
+1,尤其是因爲我也看着它,並認爲它不合適。我錯了! ;-)。請注意,使用啓發式不是羅塞塔的石頭...... – Abel 2009-12-03 22:12:06
- 1. 從Python中的二進制文件中提取字符串
- 2. 從Java中的二進制文件中讀取字符串
- 3. 從java中的二進制文件讀取位字符串
- 4. Python - 從二進制文件中讀取字符串
- 5. 從二進制文件中讀取字符串
- 6. 從字符串到二進制文件
- 7. 如何使用ruby從二進制文件中提取字符串?
- 8. Python讀取二進制文件中的二進制數據到字符串?
- 9. 從字符串中輸入DynamoDB中的二進制文件
- 10. 從二進制文件讀取字符串,不同的編碼
- 11. 寫的字符串二進制數據的二進制文件
- 12. 在二進制文件中讀取字符串C++
- 13. 從JS中的文件讀取「二進制」字符?
- 14. 從ELF二進制文件中提取函數字節
- 15. C++使用fstream從二進制文件讀取字符串
- 16. 從文件中提取子字符串
- 17. 從PE文件中提取字符串
- 18. 從html文件中提取字符串
- 19. 從文件中提取字符串
- 20. 從HTML文件中提取字符串
- 21. 「grep」從二進制文件中偏移ascii字符串
- 22. 二進制文件字符串
- 23. 字符串到二進制文件
- 24. 如何從二進制文件讀取字符串/數組和C中的int?
- 25. 如何從文件中讀取二進制格式的字符串?
- 26. Binwalk沒有從二進制文件中提取文件
- 27. 從大型二進制文件中提取zip文件
- 28. 從varbinary提取十六進制字符串到文件
- 29. vb.net讀取二進制文件
- 30. 讀取二進制文件並將其轉換爲二進制字符串
當我打開我想看看在記事本中我關心的絃線部分的TEXTFILES都清晰可見。我認爲我需要做的就是去掉任何非字符串,我會被設置? – Jeff 2009-12-03 20:52:23
我希望你是對的,但並不那麼容易。記事本不知道*這些字符串,它只是顯示它們。查看任何二進制文件(即圖像),你會發現「可讀」的部分。假設你逐個角色地觀察它,你能否在整個文件中主動選擇一個始終爲「字符串」的字符範圍? – Abel 2009-12-03 20:55:53