nixpkgs/pkgs/tools/networking/airgeddon/default.nix
2023-03-09 08:53:27 +01:00

170 lines
3.6 KiB
Nix

{ lib
, stdenv
, fetchFromGitHub
, makeWrapper
# Required
, aircrack-ng
, bash
, coreutils-full
, gawk
, gnugrep
, gnused
, iproute2
, iw
, pciutils
, procps
, tmux
# X11 Front
, xterm
, xorg
# what the author calls "Internals"
, usbutils
, wget
, ethtool
, util-linux
, ccze
# Optionals
# Missing in nixpkgs: beef, hostapd-wpe
, asleap
, bettercap
, bully
, crunch
, dhcp
, dnsmasq
, ettercap
, hashcat
, hcxdumptool
, hcxtools
, hostapd
, john
, lighttpd
, mdk4
, nftables
, openssl
, pixiewps
, reaverwps-t6x # Could be the upstream version too
, wireshark-cli
# Undocumented requirements (there is also ping)
, apparmor-bin-utils
, curl
, glibc
, ncurses
, networkmanager
, systemd
# Support groups
, supportWpaWps ? true # Most common use-case
, supportHashCracking ? false
, supportEvilTwin ? false
, supportX11 ? false # Allow using xterm instead of tmux, hard to test
}:
let
deps = [
aircrack-ng
bash
coreutils-full
curl
gawk
glibc
gnugrep
gnused
iproute2
iw
networkmanager
ncurses
pciutils
procps
tmux
usbutils
wget
ethtool
util-linux
ccze
systemd
] ++ lib.optionals supportWpaWps [
bully
pixiewps
reaverwps-t6x
] ++ lib.optionals supportHashCracking [
asleap
crunch
hashcat
hcxdumptool
hcxtools
john
wireshark-cli
] ++ lib.optionals supportEvilTwin [
bettercap
dhcp
dnsmasq
ettercap
hostapd
lighttpd
openssl
mdk4
nftables
apparmor-bin-utils
] ++ lib.optionals supportX11 [
xterm
xorg.xset
xorg.xdpyinfo
];
in
stdenv.mkDerivation rec {
pname = "airgeddon";
version = "11.11";
src = fetchFromGitHub {
owner = "v1s1t0r1sh3r3";
repo = "airgeddon";
rev = "refs/tags/v${version}";
hash = "sha256-3Rx1tMRIpSk+IEJGOs+t+kDlvGHYOx1IOSi+663uzrw=";
};
strictDeps = true;
nativeBuildInputs = [ makeWrapper ];
# What these replacings do?
# - Disable the auto-updates (we'll run from a read-only directory);
# - Silence the checks (NixOS will enforce the PATH, it will only see the tools as we listed);
# - Use "tmux", we're not patching XTerm commands;
# - Remove PWD and $0 references, forcing it to use the paths from store;
# - Force our PATH to all tmux sessions.
postPatch = ''
patchShebangs airgeddon.sh
sed -i '
s|AIRGEDDON_AUTO_UPDATE=true|AIRGEDDON_AUTO_UPDATE=false|
s|AIRGEDDON_SILENT_CHECKS=false|AIRGEDDON_SILENT_CHECKS=true|
s|AIRGEDDON_WINDOWS_HANDLING=xterm|AIRGEDDON_WINDOWS_HANDLING=tmux|
' .airgeddonrc
sed -Ei '
s|\$\(pwd\)|${placeholder "out"}/share/airgeddon;scriptfolder=${placeholder "out"}/share/airgeddon/|
s|\$\{0\}|${placeholder "out"}/bin/airgeddon|
s|tmux send-keys -t "([^"]+)" "|tmux send-keys -t "\1" "export PATH=\\"$PATH\\"; |
' airgeddon.sh
'';
# ATTENTION: No need to chdir around, we're removing the occurrences of "$(pwd)"
postInstall = ''
wrapProgram $out/bin/airgeddon --prefix PATH : ${lib.makeBinPath deps}
'';
# Install only the interesting files
installPhase = ''
runHook preInstall
install -Dm 755 airgeddon.sh "$out/bin/airgeddon"
install -dm 755 "$out/share/airgeddon"
cp -dr .airgeddonrc known_pins.db language_strings.sh plugins/ "$out/share/airgeddon/"
runHook postInstall
'';
meta = with lib; {
description = "Multi-use TUI to audit wireless networks";
homepage = "https://github.com/v1s1t0r1sh3r3/airgeddon";
changelog = "https://github.com/v1s1t0r1sh3r3/airgeddon/blob/v${version}/CHANGELOG.md";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ pedrohlc ];
platforms = platforms.linux;
};
}