From 72fd7cc73739a3f7dcda7554c56ec5604791e245 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Mon, 8 Apr 2024 09:57:23 +0200 Subject: [PATCH 1/3] python3Packages.gdb-pt-dump: init at 0-unstable-2024-04-01 --- .../python-modules/gdb-pt-dump/default.nix | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 pkgs/development/python-modules/gdb-pt-dump/default.nix diff --git a/pkgs/development/python-modules/gdb-pt-dump/default.nix b/pkgs/development/python-modules/gdb-pt-dump/default.nix new file mode 100644 index 000000000000..5687828e9e50 --- /dev/null +++ b/pkgs/development/python-modules/gdb-pt-dump/default.nix @@ -0,0 +1,29 @@ +{ lib +, buildPythonPackage +, fetchFromGitHub +, poetry-core +}: + +buildPythonPackage rec { + pname = "gdb-pt-dump"; + version = "0-unstable-2024-04-01"; + pyproject = true; + + src = fetchFromGitHub { + owner = "martinradev"; + repo = "gdb-pt-dump"; + rev = "50227bda0b6332e94027f811a15879588de6d5cb"; + hash = "sha256-yiP3KY1oDwhy9DmNQEht/ryys9vpgkFS+EJcSA6R+cI="; + }; + + build-system = [ poetry-core ]; + + pythonImportsCheck = [ "pt" ]; + + meta = with lib; { + description = "GDB script to enhance debugging of a QEMU-based virtual machine"; + homepage = "https://github.com/martinradev/gdb-pt-dump"; + license = licenses.mit; + maintainers = with maintainers; [ msanft ]; + }; +} From d06a34e95d071d268cdcbde69401e5d65a869fb9 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Mon, 8 Apr 2024 09:57:40 +0200 Subject: [PATCH 2/3] python3Packages.pwndbg: init at 2024.02.14 --- .../python-modules/pwndbg/default.nix | 80 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 4 + 2 files changed, 84 insertions(+) create mode 100644 pkgs/development/python-modules/pwndbg/default.nix diff --git a/pkgs/development/python-modules/pwndbg/default.nix b/pkgs/development/python-modules/pwndbg/default.nix new file mode 100644 index 000000000000..7bee0345afdb --- /dev/null +++ b/pkgs/development/python-modules/pwndbg/default.nix @@ -0,0 +1,80 @@ +{ lib +, stdenv +, buildPythonPackage +, fetchFromGitHub +, capstone +, future +, ipython +, psutil +, pwntools +, pycparser +, pyelftools +, pygments +, requests +, rpyc +, sortedcontainers +, tabulate +, typing-extensions +, unicorn +, gdb-pt-dump +, poetry-core +, pythonRelaxDepsHook +}: +let + # The newest gdb-pt-dump is incompatible with pwndbg 2024.02.14. + # See https://github.com/martinradev/gdb-pt-dump/issues/29 + gdb-pt-dump' = gdb-pt-dump.overrideAttrs (oldAttrs: { + version = "0-unstable-2023-11-11"; + + src = fetchFromGitHub { + inherit (oldAttrs.src) owner repo; + rev = "89ea252f6efc5d75eacca16fc17ff8966a389690"; + hash = "sha256-i+SAcZ/kgfKstJnkyCVMh/lWtrJJOHTYoJH4tVfYHrE="; + }; + + # This revision relies on the package being imported from within GDB, which + # won't work with pythonImportsCheck. + pythonImportsCheck = [ ]; + }); +in +buildPythonPackage rec { + pname = "pwndbg"; + version = "2024.02.14"; + pyproject = true; + + src = fetchFromGitHub { + owner = "pwndbg"; + repo = "pwndbg"; + rev = version; + hash = "sha256-/pDo2J5EtpWWCurD7H34AlTlQi7WziIRRxHxGm3K2yk="; + }; + + nativeBuildInputs = [ poetry-core pythonRelaxDepsHook ]; + pythonRelaxDeps = true; + + propagatedBuildInputs = [ + capstone + future + ipython + psutil + pwntools + pycparser + pyelftools + pygments + requests + rpyc + sortedcontainers + tabulate + typing-extensions + unicorn + gdb-pt-dump' + ]; + + meta = { + description = "Exploit Development and Reverse Engineering with GDB Made Easy"; + homepage = "https://pwndbg.re"; + changelog = "https://github.com/pwndbg/pwndbg/releases/tag/${version}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ msanft ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index f9a53e944bdf..f33225e8e8eb 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4614,6 +4614,8 @@ self: super: with self; { gdata = callPackage ../development/python-modules/gdata { }; + gdb-pt-dump = callPackage ../development/python-modules/gdb-pt-dump { }; + gdcm = toPythonModule (pkgs.gdcm.override { inherit (self) python; enablePython = true; @@ -10393,6 +10395,8 @@ self: super: with self; { pwlf = callPackage ../development/python-modules/pwlf { }; + pwndbg = callPackage ../development/python-modules/pwndbg { }; + pwntools = callPackage ../development/python-modules/pwntools { debugger = pkgs.gdb; }; From 7711331add4a6f50da039828b3df5fd73ec73f52 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Mon, 8 Apr 2024 09:57:49 +0200 Subject: [PATCH 3/3] pwndbg: 2022.12.19 -> 2024.02.14 --- pkgs/by-name/pw/pwndbg/package.nix | 58 +++++++++++++++++ .../development/tools/misc/pwndbg/default.nix | 63 ------------------- pkgs/top-level/all-packages.nix | 2 - 3 files changed, 58 insertions(+), 65 deletions(-) create mode 100644 pkgs/by-name/pw/pwndbg/package.nix delete mode 100644 pkgs/development/tools/misc/pwndbg/default.nix diff --git a/pkgs/by-name/pw/pwndbg/package.nix b/pkgs/by-name/pw/pwndbg/package.nix new file mode 100644 index 000000000000..2967130b7fd1 --- /dev/null +++ b/pkgs/by-name/pw/pwndbg/package.nix @@ -0,0 +1,58 @@ +{ lib +, stdenv +, python3 +, fetchFromGitHub +, makeWrapper +, gdb +}: + +let + pwndbg-py = python3.pkgs.pwndbg; + + pythonPath = python3.pkgs.makePythonPath [ pwndbg-py ]; + + binPath = lib.makeBinPath ([ + python3.pkgs.pwntools # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/wrappers/checksec.py#L8 + ] ++ lib.optionals stdenv.isLinux [ + python3.pkgs.ropper # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/commands/ropper.py#L30 + python3.pkgs.ropgadget # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/commands/rop.py#L32 + ]); +in +stdenv.mkDerivation rec { + pname = "pwndbg"; + version = lib.getVersion pwndbg-py; + format = "other"; + + inherit (pwndbg-py) src; + + nativeBuildInputs = [ makeWrapper ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/share/pwndbg + cp gdbinit.py $out/share/pwndbg + chmod +x $out/share/pwndbg/gdbinit.py + + # Don't require an in-package venv + touch $out/share/pwndbg/.skip-venv + + makeWrapper ${gdb}/bin/gdb $out/bin/pwndbg \ + --add-flags "-q -x $out/share/pwndbg/gdbinit.py" \ + --prefix PATH : ${binPath} \ + --set PYTHONPATH ${pythonPath} \ + + runHook postInstall + ''; + + meta = with lib; { + description = "Exploit Development and Reverse Engineering with GDB Made Easy"; + mainProgram = "pwndbg"; + homepage = "https://github.com/pwndbg/pwndbg"; + license = licenses.mit; + platforms = platforms.all; + maintainers = with maintainers; [ mic92 patryk4815 msanft ]; + # not supported on aarch64-darwin see: https://inbox.sourceware.org/gdb/3185c3b8-8a91-4beb-a5d5-9db6afb93713@Spark/ + broken = stdenv.isDarwin && stdenv.isAarch64; + }; +} diff --git a/pkgs/development/tools/misc/pwndbg/default.nix b/pkgs/development/tools/misc/pwndbg/default.nix deleted file mode 100644 index b9156abf84b8..000000000000 --- a/pkgs/development/tools/misc/pwndbg/default.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ lib -, stdenv -, python3 -, fetchFromGitHub -, makeWrapper -, gdb -}: - -let - pythonPath = with python3.pkgs; makePythonPath [ - capstone - future - psutil - pwntools - pycparser - pyelftools - pygments - unicorn - rpyc - ]; - binPath = lib.makeBinPath ([ - python3.pkgs.pwntools # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/wrappers/checksec.py#L8 - ] ++ lib.optionals stdenv.isLinux [ - python3.pkgs.ropper # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/commands/ropper.py#L30 - python3.pkgs.ropgadget # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/commands/rop.py#L32 - ]); - -in stdenv.mkDerivation rec { - pname = "pwndbg"; - version = "2022.12.19"; - format = "other"; - - src = fetchFromGitHub { - owner = "pwndbg"; - repo = "pwndbg"; - rev = version; - sha256 = "sha256-pyY2bMasd6GaJZZjLF48SvkKUBw3XfVa0g3Q0LiEi4k="; - fetchSubmodules = true; - }; - - nativeBuildInputs = [ makeWrapper ]; - - installPhase = '' - mkdir -p $out/share/pwndbg - cp -r *.py pwndbg gdb-pt-dump $out/share/pwndbg - chmod +x $out/share/pwndbg/gdbinit.py - makeWrapper ${gdb}/bin/gdb $out/bin/pwndbg \ - --add-flags "-q -x $out/share/pwndbg/gdbinit.py" \ - --prefix PATH : ${binPath} \ - --set NIX_PYTHONPATH ${pythonPath} - ''; - - meta = with lib; { - description = "Exploit Development and Reverse Engineering with GDB Made Easy"; - mainProgram = "pwndbg"; - homepage = "https://github.com/pwndbg/pwndbg"; - license = licenses.mit; - platforms = platforms.all; - maintainers = with maintainers; [ mic92 patryk4815 ]; - # not supported on aarch64-darwin see: https://inbox.sourceware.org/gdb/3185c3b8-8a91-4beb-a5d5-9db6afb93713@Spark/ - broken = stdenv.isDarwin && stdenv.isAarch64; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8fbc2701b462..d27dce0cd59a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12249,8 +12249,6 @@ with pkgs; pwnat = callPackage ../tools/networking/pwnat { }; - pwndbg = callPackage ../development/tools/misc/pwndbg { }; - pwninit = callPackage ../development/tools/misc/pwninit { inherit (darwin.apple_sdk.frameworks) Security; };