6 py = python3.override {
7 packageOverrides = final: prev: {
8 # required for networkx 2.5.1
9 decorator = prev.decorator.overridePythonAttrs (o: o // rec {
11 src = o.src.override {
13 sha256 = "sha256-46YvBSAXJEDKDcyCN0kxk4Ljd/N/FAoLme9F/suEv+c=";
17 # flare-floss requires this exact version (newer versions are incompatible)
18 networkx = prev.networkx.overridePythonAttrs (o: o // rec {
20 src = o.src.override {
22 sha256 = "sha256-EJzVhcrEEpf3EQPDxCrG73N58peI61TLdRvlpmO7I1o=";
28 py.pkgs.buildPythonPackage rec {
29 pname = "flare-floss";
32 src = fetchFromGitHub {
36 fetchSubmodules = true; # for tests
37 sha256 = "sha256-V4OWYcISyRdjf8x93B6h2hJwRgmRmk32hr8TrgRDu8Q=";
41 substituteInPlace setup.py \
44 substituteInPlace floss/main.py \
45 --replace 'sigs_path = os.path.join(get_default_root(), "sigs")' 'sigs_path = "'"$out"'/share/flare-floss/sigs"'
48 propagatedBuildInputs = with py.pkgs; [
56 ] ++ viv-utils.optional-dependencies.flirt;
58 checkInputs = with py.pkgs; [
65 mkdir -p $out/share/flare-floss/
66 cp -r sigs $out/share/flare-floss/
70 description = "Automatically extract obfuscated strings from malware";
71 homepage = "https://github.com/mandiant/flare-floss";
72 license = licenses.asl20;
73 maintainers = teams.determinatesystems.members;