← 开源
mandiant

stringsifter

A machine learning tool that ranks strings based on their relevance for malware analysis.

ApplicationsCodingPython
在 GitHub 打开
增长势头
+024 小时新增 Star0.0%
766
Star
125
Fork
+1
本周
5
贡献者
创建于 2019-09-05 · 更新于 2026-10-13 · 今日第 14056 名
主要开发者
ewalshmndtdrstrngnoraj

mandiant/stringsifter 排名第 14,056,有 766 个星标。

同类别比较

mandiant/stringsifter 排名第 14,056,此处有 8 个同类条目;metabase/dataset-generator 排名第 14,057。

同类别比较
名称排名指标
opslane/opslane_old14,008
语言:
TypeScript
星标数:
770
分叉数:
41
简介:
Run multiple Claude Code sessions in parallel
yeephycho/tensorflow-face-detection14,023
语言:
Python
星标数:
769
分叉数:
258
简介:
A mobilenet SSD based face detector, powered by tensorflow object detection api, trained by WIDERFACE dataset.
divar-ir/ai-doc-gen14,038
语言:
Python
星标数:
767
分叉数:
80
简介:
AI-powered multi-agent system that automatically analyzes codebases and generates comprehensive documentation. Features GitLab integration, concurrent processing, and multiple LLM support for better code understanding and developer onboarding.
ZeroTang05/VideoAdGuard14,052
语言:
TypeScript
星标数:
766
分叉数:
37
简介:
哔哩哔哩浏览器插件:基于大语言模型,对B站视频中的植入广告进行检测。一键跳过视频中的植入/口播广告。
metabase/dataset-generator14,057
语言:
TypeScript
星标数:
766
分叉数:
48
简介:
AI Dataset Generator – Create realistic datasets for demos, learning, and dashboards
L1AD/claude-task-viewer14,062
语言:
HTML
星标数:
765
分叉数:
90
简介:
A web-based Kanban board for viewing Claude Code tasks
LoveDaisy/tetris_game14,069
语言:
Python
星标数:
764
分叉数:
286
简介:
A Tetris Game with AI
alexandremendoncaalvaro/CorridorKey-Runtime14,072
语言:
C++
星标数:
764
分叉数:
20
简介:
Native AI keying runtime and OFX plugin for DaVinci Resolve, built in collaboration with Corridor Digital.
关键参数与规格
关键参数与规格
参数值
语言Python
类别Applications
子类别Coding
关键词Security
星标数766
分叉数125
贡献者5
创建日期2019-09-05
更新日期2026-10-13
1 天星标数0
7 天星标数1
排名14,056
上次排名13,927
排名变化-129
7 天星标排名10,730
上次 7 天星标排名10,783
7 天星标排名变化53
总星标排名13,837
上次总星标排名13,811
总星标排名变化-26
国家USA
README 摘录

Quick Links Technical Blogpost - *Learning to Rank Strings Output for Speedier Malware Analysis* Announcement Blogpost - *Open Sourcing StringSifter* DerbyCon Talk - *StringSifter: Learning to Rank Strings Output for Speedier Malware Analysis* StringSifter releases on PyPi Usage StringSifter requires Python version 3. Run the following commands to get the code, run unit tests, and use the tool: Installation For development, use poetry: Running Unit Tests To run unit tests from the StringSifter installation directory: Running from the Command Line The command installs

two runnable scripts and into your python environment. mimics features of GNU binutils' , and accepts piped input, for example: supports a number of command line arguments. The positional argument specifies a file of strings to rank. supports an option (or ) to print sequences of characters that are at least characters long, instead of the default 4. For example: will print and rank only strings of length 8 or greater. Running from a Docker container After cloning the repo, build the

container. From the the package's top level directory: Run the container with or argument to use the respective command. The containerized commands can be used in pipelines: Or, run the container without arguments to get a shell prompt, using the flag to expose a host directory to the container: where contains samples for analysis, for example: At the container prompt: All command line arguments are supported in the containerized scripts. Running on FLOSS Output StringSifter can be applied to arbitrary

lists of strings, making it useful for practitioners looking to glean insights from alternative intelligence-gathering sources such as live memory dumps, sandbox runs, or binaries that contain obfuscated strings. For example, FireEye Labs Obfuscated Strings Solver (FLOSS) extracts printable strings just as *Strings* does, but additionally reveals obfuscated strings that have been encoded, packed, or manually constructed on the stack. It can be used as an in-line replacement for Strings, meaning that StringSifter can be similarly invoked on

FLOSS output using the following command: Notes: 1. The argument suppresses headers and formatting to show only extracted strings. To learn more about additional FLOSS options, please see its Usage Docs. FLOSS requires Python 2, while StringSifter requires Python 3. In the example command at least one of or must include a relative path referencing a python virtual enviroment. FLOSS can be downloaded as a standalone executable. In this case it is not required to specify a Python environment because

the executable does not rely on a Python interpreter. Notes on running This distribution includes the program to ensure predictable output across platforms. If you choose to run your system's installed note that its options are not consistent across versions and platforms: Linux Most Linux distributions include the program from GNU Binutils. To extract both "wide" and "narrow" strings the program must be run twice, piping to an output file: MacOS Some versions of BSD packaged with MacOS do not

support wide strings. Also note that the option to strings to scan the whole file may be disabled in the

常见问题

记录了多少星标和分叉?

mandiant/stringsifter 有 766 个星标和 125 个分叉。

仓库排名是多少?

mandiant/stringsifter 排名第 14,056。

记录的语言和类别是什么?

mandiant/stringsifter 有 766 个星标,语言为 Python,类别为 Applications。

哪个仓库排名最接近?

mandiant/stringsifter 与 metabase/dataset-generator 比较,后者排名第 14,057,有 766 个星标。

README


StringSifter is a machine learning tool that automatically ranks strings based on their relevance for malware analysis.

Quick Links

Usage

StringSifter requires Python version 3.9 or newer. Run the following commands to get the code, run unit tests, and use the tool:

Installation

pip install stringsifter

For development, use poetry:

git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with dev

Running Unit Tests

To run unit tests from the StringSifter installation directory:

poetry run tests -v

Running from the Command Line

The pip install command installs two runnable scripts flarestrings and rank_strings into your python environment. When developing from source, use pipenv run flarestrings and pipenv run rank_strings.

flarestrings mimics features of GNU binutils' strings, and rank_strings accepts piped input, for example:

flarestrings  | rank_strings

rank_strings supports a number of command line arguments. The positional argument input_strings specifies a file of strings to rank. The optional arguments are:

Option Meaning
--scores (-s) Include the rank scores in the output
--limit (-l) Limit output to the top limit ranked strings
--min-score (-m) Limit output to strings with score >= min-score
--batch (-b) Specify a folder of strings outputs for batch processing

Ranked strings are written to standard output unless the --batch option is specified, causing ranked outputs to be written to files named .ranked_strings.

flarestrings supports an option -n (or --min-len) to print sequences of characters that are at least min-len characters long, instead of the default 4. For example:

flarestrings -n 8  | rank_strings

will print and rank only strings of length 8 or greater.

Running from a Docker container

  • After cloning the repo, build the container. From the the package's top level directory:
docker build -t stringsifter -f docker/Dockerfile .
  • Run the container with flarestrings or rank_strings argument to use the respective command. The containerized commands can be used in pipelines:
cat  | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings
  • Or, run the container without arguments to get a shell prompt, using the -v flag to expose a host directory to the container:
docker run -v :/samples -it stringsifter

where `` contains samples for analysis, for example:

docker run -v $HOME/malware/binaries:/samples -it stringsifter
  • At the container prompt:
flarestrings /samples/ | rank_strings 

All command line arguments are supported in the containerized scripts.

Running on FLOSS Output

StringSifter can be applied to arbitrary lists of strings, making it useful for practitioners looking to glean insights from alternative intelligence-gathering sources such as live memory dumps, sandbox runs, or binaries that contain obfuscated strings. For example, FireEye Labs Obfuscated Strings Solver (FLOSS) extracts printable strings just as Strings does, but additionally reveals obfuscated strings that have been encoded, packed, or manually constructed on the stack. It can be used as an in-line replacement for Strings, meaning that StringSifter can be similarly invoked on FLOSS output using the following command:

$PY2_VENV/bin/floss –q   | rank_strings 

Notes:

  1. The –q argument suppresses headers and formatting to show only extracted strings. To learn more about additional FLOSS options, please see its Usage Docs.
  2. FLOSS requires Python 2, while StringSifter requires Python 3. In the example command at least one of floss or rank_strings must include a relative path referencing a python virtual enviroment.
  3. FLOSS can be downloaded as a standalone executable. In this case it is not required to specify a Python environment because the executable does not rely on a Python interpreter.

Notes on running strings

This distribution includes the flarestrings program to ensure predictable output across platforms. If you choose to run your system's installed strings note that its options are not consistent across versions and platforms:

Linux

Most Linux distributions include the strings program from GNU Binutils. To extract both "wide" and "narrow" strings the program must be run twice, piping to an output file:

strings        > strs.txt   # narrow strings
strings -el   >> strs.txt   # wide strings.  note the ">>"

MacOS

Some versions of BSD strings packaged with MacOS do not support wide strings. Also note that the -a option to strings to scan the whole file may be disabled in the default configuration. Without -a informative strings may be lost. We recommend installing GNU Binutils via Homebrew or MacPorts to get a version of strings that supports wide characters. Use care to invoke the correct version of strings.

Windows

strings is not installed by default on Windows. We recommend installing Windows Sysinternals, Cygwin, or Malcode Analyst Pack to get a working strings.

Discussion

This version of StringSifter was trained using Strings outputs from sampled malware binaries associated with the first EMBER dataset. Ordinal labels were generated using weak supervision procedures, and supervised learning is performed by Gradient Boosted Decision Trees with a learning-to-rank objective function. See Quick Links for further technical details. Please note that neither labeled data nor training code is currently available, though we may reconsider this approach in future releases.

Issues

We use GitHub Issues for posting bugs and feature requests.

Acknowledgements

  • Thanks to the FireEye Data Science (FDS) and FireEye Labs Reverse Engineering (FLARE) teams for review and feedback.
  • StringSifter was designed and developed by Philip Tully (FDS), Matthew Haigh (FLARE), Jay Gibble (FLARE), and Michael Sikorski (FLARE).
  • The StringSifter logo was designed by Josh Langner (FLARE).
  • flarestrings is derived from the excellent tool FLOSS.
排名相邻
同类项目