Luke Granger-Brown
57725ef3ec
git-subtree-dir: third_party/nixpkgs git-subtree-split: 76612b17c0ce71689921ca12d9ffdc9c23ce40b2
83 lines
2 KiB
Nix
83 lines
2 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
fetchFromGitHub,
|
|
boost,
|
|
libseccomp,
|
|
flex,
|
|
swig,
|
|
bison,
|
|
cmake,
|
|
python3Packages,
|
|
makeShellWrapper,
|
|
}:
|
|
|
|
python3Packages.buildPythonApplication rec {
|
|
pname = "grap";
|
|
version = "1.3.1";
|
|
pyproject = false;
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "QuoSecGmbH";
|
|
repo = "grap";
|
|
rev = "refs/tags/v${version}";
|
|
hash = "sha256-zLIKoNOdrmTyZkQGRogeKfIRk4kpG0hmeN0519SJbbo=";
|
|
};
|
|
|
|
dependencies = with python3Packages; [
|
|
setuptools
|
|
capstone
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
bison
|
|
cmake
|
|
flex
|
|
swig
|
|
makeShellWrapper
|
|
];
|
|
|
|
buildInputs = [
|
|
boost.all
|
|
libseccomp
|
|
];
|
|
|
|
strictDeps = true;
|
|
|
|
cmakeFlags = [
|
|
"-DPYTHON_SITE_DIR=${placeholder "out"}/${python3Packages.python.sitePackages}"
|
|
"../src"
|
|
];
|
|
|
|
postPatch = ''
|
|
substituteInPlace src/tools/grap-match/CMakeLists.txt --replace-fail "/usr/local/bin" "$out/bin"
|
|
|
|
substituteInPlace src/tools/grap/CMakeLists.txt --replace-fail "/usr/local/bin" "$out/bin"
|
|
|
|
substituteInPlace src/bindings/python/CMakeLists.txt --replace-fail "distutils" "setuptools._distutils"
|
|
|
|
substituteInPlace src/tools/setup.py --replace-fail "distutils.core" "setuptools"
|
|
'';
|
|
|
|
postInstall = ''
|
|
cd $out/${python3Packages.python.sitePackages}
|
|
mv pygrap.so _pygrap.so
|
|
substituteInPlace pygrap.py \
|
|
--replace-fail "import imp" "import importlib" \
|
|
--replace-fail "imp." "importlib."
|
|
'';
|
|
|
|
meta = {
|
|
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 = lib.licenses.mit;
|
|
maintainers = with lib.maintainers; [ s1341 ];
|
|
platforms = lib.platforms.linux;
|
|
mainProgram = "grap";
|
|
};
|
|
}
|