about summary refs log tree commit diff
path: root/pkgs/tools/security/grap/default.nix
blob: 1d77e9bf99cb27879d87eeed41f17226a673e241 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{ lib, stdenv, fetchFromGitHub, boost, libseccomp, flex, swig4, bison, cmake, python3 }:

stdenv.mkDerivation rec {
  pname = "grap";
  version = "1.3.1";

  src = fetchFromGitHub {
    owner = "QuoSecGmbH";
    repo = "grap";
    rev = "v${version}";
    sha256 = "1fkdi7adfffxg1k4h6r9i69i3wi93s44c1j4cvr69blxsfh0mcnc";
  };

  nativeBuildInputs = [
    bison
    cmake
    flex
    python3
  ];

  buildInputs = [
    boost.all
    libseccomp
    swig4
  ];

  strictDeps = true;

  cmakeFlags = [
    "-DPYTHON_SITE_DIR=$out/${python3.sitePackages}"
    "../src"
  ];

  postPatch = ''
    substituteInPlace src/tools/grap-match/CMakeLists.txt --replace "/usr/local/bin" "$out/bin"
    substituteInPlace src/tools/grap/CMakeLists.txt --replace "/usr/local/bin" "$out/bin"
  '';

  meta = with lib; {
    description = "Define and match graph patterns within binaries";
    longDescription = ''
      grap takes patterns and binary files, uses a Casptone-based disassembler to obtain the control flow graphs from the binaries, then matches the patterns against them.

      Patterns are user-defined graphs with instruction conditions ("opcode is xor and arg1 is eax") and repetition conditions (3 identical instructions, basic blocks...).
    '';
    homepage = "https://github.com/QuoSecGmbH/grap/";
    license = licenses.mit;
    maintainers = [ maintainers.s1341 ];
    platforms = platforms.linux;
  };
}