سؤال

أريد أن ألقي كشط بيانات السلسلة من بعض الملفات النصية الثنائية التي تحتوي على عبارات SQL مضمنة. لست بحاجة إلى أي تنظيف يتوهم - مجرد طريقة لاستخراج النص القابل للقراءة. أنا أستخدم VB.NET، ولكن دعوة إلى فائدة خارجية ستعمل أيضا.

هل كانت مفيدة؟

المحلول 4

شكرا لكم جميعا. أفكار كبيرة. حقا ساعدني في التفكير. upvotes في كل مكان. انتهى الأمر، لم أكن بحاجة إلى أن أكون متأكدا جدا من أنهم كانوا سلاسل حتى ذهبت مع اختراق سريع وقبيح قبيح.

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

نصائح أخرى

كانت الأداة المساعدة GNU Strings موجودة إلى الأبد وتحمل هذا الأمر أكثر بكثير من خلال استخدام مثيرة لإغراق أي بيانات "تبدو وكأنها سلسلة" من ثنائي.

الاستيلاء على جنو Binutils (بما في ذلك السلاسل) ل Win32 من MingW: 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 حتى أحرف فارغة (في حين أن بعض لغات البرمجة لا). إليك موضوع يمنح ذلك مثالا VB كيف يمكنك المتابعة، قد يوفر لك بعض التلميحات.

ملاحظة: يمكن أن يكون تحليل هذا النوع من البيانات صعبا، وسوف يساعد كثيرا في قدر كبير إذا تمكنت من تحميل ملفك في مكان ما حتى نتمكن من إلقاء نظرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top