Skip to content

glmcdona/strings2

master
Switch branches/tags
Code

strings2 - Extract strings from binary files and process memory

Strings2 is a Windows command-line tool for extracting strings from binary data. On top of the classic Sysinternals strings approach, this tool includes:

  • Multi-lingual string extraction, such as Russian, Chinese, etc.
  • Machine learning model filters out junk erroneous string extractions to reduce noise.
  • String extractions from process memory.
  • Recursive and wildcard filename matching.
  • Json output option for automation integration. (Also see python module version binary2strings)

I also recommend looking at FLOSS from Mandiant a cross-platform string extraction solver with a different set of features.

Installation

Download the latest release binary.

Example Usage

Dump all strings from malware.exe to stdout:

  • strings2 malware.exe

Dump all strings from all .exe files in the files folder to the file strings.txt:

  • strings2 ./files/*.exe > strings.txt

Dump strings from a specific process id, including logging the module name and memory addresses of each match:

  • strings2 -f -s -pid 0x1a3 > process_strings.txt

Extract strings from malware.exe to a json file:

  • strings2 malware.exe -json > strings.json

Documentation

strings.exe (options) file_pattern

  • file_pattern can be a folder or file. Wildcards (*) are supported in the filename parts - eg .\files\*.exe.
Option Description
-r Recursively process subdirectories.
-f Prints the filename/processname for each string.
-F Prints the full path and filename for each string.
-s Prints the file offset or memory address span of each string.
-t Prints the string type for each string. UTF8, or WIDE_STRING.
-wide Prints only WIDE_STRING strings that are encoded as two bytes per character.
-utf Prints only UTF8 encoded strings.
-a Prints both interesting and not interesting strings. Default only prints interesting non-junk strings.
-ni Prints only not interesting strings. Default only prints interesting non-junk strings.
-e Escape new line characters.
-l [num_chars] Minimum number of characters that is a valid string. Default is 4.
-b [start](:[end]) Scan only the specified byte range for strings. Optionally specify an end offset as well.
-pid [pid] The strings from the process address space for the specified PID will be dumped. Use a '0x' prefix to specify a hex PID.
-system Dumps strings from all accessible processes on the system. This takes awhile.
-json Writes output as json. Many flags are ignored in this mode.

Version History

Version 2.0 (May 29, 2022)

  • Complete overhaul of the tool.
  • Upgrade string extraction engine from binary2strings.
  • Add support for multilingual strings.
  • Added ML model to filter junk erroneous string extractions.
  • Add option to dump only a specified offset range.
  • Add json output option.
  • Add memory address and module name logging.
  • Fixes to 64bit process string dumping.

Version 1.2 (Apr 21, 2013)

  • Added "-a" and "-u" flags to extract only ascii or unicode strings.
  • Fixed a bug when processing certain filenames.

Version 1.1 (Nov 22, 2012)

  • Added "-r" recursive flag option.
  • Added "-pid" and "-system" flag options to specify process input sources.
  • Piped input data is now supported.
  • Various fixes.

Version 1.0 (Sept 20, 2012)

  • Initial release.