From bf523e35d083316a765c073821152fd4e01e34b0 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:54:04 +0200 Subject: [PATCH] Initial commit --- .gitignore | 39 +------------- README.md | 9 +++- flake.lock | 27 ++++++++++ flake.nix | 17 ++++++ packages/ida-pro.nix | 124 +++++++++++++++++++++++++++++++++++++++++++ share/appico.png | Bin 0 -> 27494 bytes 6 files changed, 177 insertions(+), 39 deletions(-) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 packages/ida-pro.nix create mode 100644 share/appico.png diff --git a/.gitignore b/.gitignore index 2faf43d..0806e16 100644 --- a/.gitignore +++ b/.gitignore @@ -1,37 +1,2 @@ -# Local .terraform directories -**/.terraform/* - -# .tfstate files -*.tfstate -*.tfstate.* - -# Crash log files -crash.log -crash.*.log - -# Exclude all .tfvars files, which are likely to contain sensitive data, such as -# password, private keys, and other secrets. These should not be part of version -# control as they are data points which are potentially sensitive and subject -# to change depending on the environment. -*.tfvars -*.tfvars.json - -# Ignore override files as they are usually used to override resources locally and so -# are not checked in -override.tf -override.tf.json -*_override.tf -*_override.tf.json - -# Ignore transient lock info files created by terraform apply -.terraform.tfstate.lock.info - -# Include override files you do wish to add to version control using negated pattern -# !example_override.tf - -# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan -# example: *tfplan* - -# Ignore CLI configuration files -.terraformrc -terraform.rc +inputs +result diff --git a/README.md b/README.md index 6210c1c..4ad8683 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ -# ida-pro-overlay -Nix flake for IDA Pro +# Nix Flake for IDA Pro + +You can use the overlay provided by this flake along with your own IDA installer runfile to build your IDA Pro with Nix and use it on NixOS. + +## How to Use + +WIP. diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..6703be5 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1728538411, + "narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..dc76daf --- /dev/null +++ b/flake.nix @@ -0,0 +1,17 @@ +{ + description = "Nix flake for IDA Pro"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + }; + + outputs = + { + ... + }: + { + overlays.default = self: super: { + ida-pro = self.packages.x86_64-linux.ida-pro; + }; + }; +} diff --git a/packages/ida-pro.nix b/packages/ida-pro.nix new file mode 100644 index 0000000..c5ff29a --- /dev/null +++ b/packages/ida-pro.nix @@ -0,0 +1,124 @@ +{ + pkgs, + lib, + runfile, + ... +}: +let + pythonForIDA = pkgs.python3.withPackages (ps: with ps; [ rpyc ]); +in +pkgs.stdenv.mkDerivation rec { + pname = "ida-pro"; + version = "9.0.0.240925"; + + src = runfile; + + desktopItem = pkgs.makeDesktopItem { + name = "ida-pro"; + exec = "ida"; + icon = ../share/appico.png; + comment = meta.description; + desktopName = "IDA Pro"; + genericName = "Interactive Disassembler"; + categories = [ "Development" ]; + startupWMClass = "IDA"; + }; + desktopItems = [ desktopItem ]; + + nativeBuildInputs = with pkgs; [ + makeWrapper + copyDesktopItems + autoPatchelfHook + libsForQt5.wrapQtAppsHook + ]; + + # We just get a runfile in $src, so no need to unpack it. + dontUnpack = true; + + # Add everything to the RPATH, in case IDA decides to dlopen things. + runtimeDependencies = with pkgs; [ + cairo + dbus + fontconfig + freetype + glib + gtk3 + libdrm + libGL + libkrb5 + libsecret + libsForQt5.qtbase + libunwind + libxkbcommon + libsecret + openssl.out + stdenv.cc.cc + xorg.libICE + xorg.libSM + xorg.libX11 + xorg.libXau + xorg.libxcb + xorg.libXext + xorg.libXi + xorg.libXrender + xorg.xcbutilimage + xorg.xcbutilkeysyms + xorg.xcbutilrenderutil + xorg.xcbutilwm + zlib + curl + pythonForIDA + ]; + buildInputs = runtimeDependencies; + + dontWrapQtApps = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin $out/lib $out/opt + + # IDA depends on quite some things extracted by the runfile, so first extract everything + # into $out/opt, then remove the unnecessary files and directories. + IDADIR=$out/opt + + # Invoke the installer with the dynamic loader directly, avoiding the need + # to copy it to fix permissions and patch the executable. + $(cat $NIX_CC/nix-support/dynamic-linker) $src \ + --mode unattended --prefix $IDADIR + + # Link the exported libraries to the output. + for lib in $IDADIR/libida*; do + ln -s $lib $out/lib/$(basename $lib) + done + + # Manually patch libraries that dlopen stuff. + patchelf --add-needed libpython3.12.so $out/lib/libida.so + patchelf --add-needed libcrypto.so $out/lib/libida.so + + # Some libraries come with the installer. + addAutoPatchelfSearchPath $IDADIR + + # Link the binaries to the output. + # Also, hack the PATH so that pythonForIDA is used over the system python. + for bb in ida assistant; do + wrapProgram $IDADIR/$bb \ + --prefix QT_PLUGIN_PATH : $IDADIR/plugins/platforms \ + --prefix PYTHONPATH : $out/opt/idalib/python \ + --prefix PATH : ${pythonForIDA}/bin + ln -s $IDADIR/$bb $out/bin/$bb + done + + runHook postInstall + ''; + + meta = with lib; { + description = "The world's smartest and most feature-full disassembler"; + homepage = "https://hex-rays.com/ida-pro/"; + license = licenses.unfree; + mainProgram = "ida"; + maintainers = with maintainers; [ msanft ]; + platforms = [ "x86_64-linux" ]; # Right now, the installation script only supports Linux. + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + }; +} diff --git a/share/appico.png b/share/appico.png new file mode 100644 index 0000000000000000000000000000000000000000..d03c97fd451de2ad183254fe3cda98c34f39da5a GIT binary patch literal 27494 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 z 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 literal 0 HcmV?d00001