diff --git a/.fpm b/.fpm new file mode 100644 index 0000000..9e0733f --- /dev/null +++ b/.fpm @@ -0,0 +1,24 @@ +-s dir ./target/release/airgorah ./icons/app_icon.png package README.md LICENSE +--name airgorah +--license MIT +--version 0.4.1 +--description "A WiFi auditing software that can perform deauth attacks and passwords cracking" +--url "https://github.com/martin-olivier/airgorah" +--maintainer "Martin Olivier " + +--depends bash +--depends systemd +--depends xfce4-terminal +--depends iw +--depends macchanger +--depends aircrack-ng + +target/release/airgorah=/usr/bin/airgorah +icons/app_icon.png=/usr/share/pixmaps/airgorah.png + +package/config.toml=/etc/airgorah/config.toml +package/.desktop=/usr/share/applications/airgorah.desktop +package/.policy=/usr/share/polkit-1/actions/org.freedesktop.policykit.airgorah.policy + +README.md=/usr/share/doc/airgorah/README.md +LICENSE=/usr/share/doc/airgorah/LICENSE \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 251787c..7be018e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,6 +3,6 @@ updates: - package-ecosystem: "cargo" directory: "/" schedule: - interval: "monthly" + interval: "daily" reviewers: - "martin-olivier" \ No newline at end of file diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 511c436..def656e 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -47,7 +47,7 @@ jobs: run: cargo fmt --all -- --check build: - name: ubuntu-latest + name: build runs-on: ubuntu-latest needs: linter permissions: write-all @@ -55,26 +55,88 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Install build dependencies - run: sudo apt update && sudo apt install -y libgtk-4-dev libglib2.0-dev + - name: Install dependencies + run: > + sudo apt update && sudo apt install -y + libgtk-4-dev + libglib2.0-dev + build-essential + ruby + ruby-dev + rubygems + libarchive-tools - - name: Install cargo-deb - run: cargo install cargo-deb + - name: Install fpm + run: sudo gem install fpm - name: Build project - run: cargo deb + run: cargo build --release - - name: Save artifact + - name: Build debian package + run: > + fpm -t deb -p airgorah_amd64.deb --architecture amd64 + --depends policykit-1 + --depends "libgtk-4-1 (>= 4.6.0)" + --depends dbus-x11 + --depends wireshark-common + --depends iproute2 + --depends mdk4 + --depends crunch + + - name: Save debian artifact uses: actions/upload-artifact@v3 with: name: airgorah_amd64.deb - path: ./target/debian/*.deb + path: ./airgorah_amd64.deb + if-no-files-found: error + + - name: Build redhat package + run: > + fpm -t rpm -p airgorah_amd64.rpm --architecture amd64 + --depends polkit + --depends "gtk4-devel >= 4.6.0" + --depends dbus-x11 + --depends wireshark-cli + --depends iproute + + - name: Save redhat artifact + uses: actions/upload-artifact@v3 + with: + name: airgorah_amd64.rpm + path: ./airgorah_amd64.rpm if-no-files-found: error - - name: Upload binary + - name: Build archlinux package + run: > + fpm -t pacman -p airgorah_amd64.pkg.tar.zst --architecture amd64 + --depends polkit + --depends "gtk4 (>= 4.6.0)" + --depends dbus + --depends wireshark-cli + --depends iproute2 + --depends mdk4 + + - name: Save archlinux artifact + uses: actions/upload-artifact@v3 + with: + name: airgorah_amd64.pkg.tar.zst + path: ./airgorah_amd64.pkg.tar.zst + if-no-files-found: error + + - name: Name packages for release + if: github.event_name == 'release' + run: | + cp ./airgorah_amd64.deb ./airgorah_${{ github.ref_name }}_amd64.deb + cp ./airgorah_amd64.rpm ./airgorah_${{ github.ref_name }}_amd64.rpm + cp ./airgorah_amd64.pkg.tar.zst ./airgorah_${{ github.ref_name }}_amd64.pkg.tar.zst + + - name: Upload packages if: github.event_name == 'release' uses: softprops/action-gh-release@v1 with: - files: ./target/debian/*.deb + files: | + ./airgorah_${{ github.ref_name }}_amd64.deb + ./airgorah_${{ github.ref_name }}_amd64.rpm + ./airgorah_${{ github.ref_name }}_amd64.pkg.tar.zst env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Cargo.lock b/Cargo.lock index 1acde0a..579e542 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,7 +19,7 @@ dependencies = [ [[package]] name = "airgorah" -version = "0.4.0" +version = "0.4.1" dependencies = [ "csv", "ctrlc", @@ -30,7 +30,7 @@ dependencies = [ "serde", "serde_json", "sudo", - "toml 0.7.6", + "toml 0.7.8", "ureq", "which", ] @@ -53,12 +53,6 @@ version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.4.0" @@ -77,7 +71,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d859b656775a6b1dd078d3e5924884e6ea88aa649a7fdde03d5b2ec56ffcc10b" dependencies = [ - "bitflags 2.4.0", + "bitflags", "cairo-sys-rs", "glib", "libc", @@ -149,9 +143,9 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e" +checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf" dependencies = [ "nix", "windows-sys", @@ -169,6 +163,27 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "field-offset" version = "0.3.4" @@ -357,7 +372,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "331156127e8166dd815cf8d2db3a5beb492610c716c03ee6db4f2d07092af0a7" dependencies = [ - "bitflags 2.4.0", + "bitflags", "futures-channel", "futures-core", "futures-executor", @@ -535,6 +550,15 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys", +] + [[package]] name = "idna" version = "0.3.0" @@ -588,9 +612,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "linux-raw-sys" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] name = "log" @@ -603,9 +633,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memoffset" @@ -627,14 +657,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.2" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cfg-if", "libc", - "static_assertions", ] [[package]] @@ -765,9 +794,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", @@ -777,9 +806,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", @@ -816,6 +845,19 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.38.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf14a7a466ce88b5eac3da815b53aefc208ce7e74d1c263aabb04d88c4abeb1" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "rustls" version = "0.21.7" @@ -904,9 +946,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.105" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" +checksum = "2cc66a619ed80bf7a0f6b17dd063a84b88f6dea1813737cf469aef1d081142c2" dependencies = [ "itoa", "ryu", @@ -943,12 +985,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "sudo" version = "0.6.0" @@ -1040,14 +1076,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", "serde_spanned", "toml_datetime 0.6.3", - "toml_edit 0.19.14", + "toml_edit 0.19.15", ] [[package]] @@ -1078,9 +1114,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap 2.0.0", "serde", @@ -1238,13 +1274,14 @@ dependencies = [ [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index ebf9239..5737f69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,13 +1,13 @@ [package] name = "airgorah" -version = "0.4.0" +version = "0.4.1" edition = "2021" license = "MIT" description = "A WiFi auditing software that can perform deauth attacks and passwords cracking" authors = ["Martin Olivier "] homepage = "https://github.com/martin-olivier/airgorah" repository = "https://github.com/martin-olivier/airgorah" -documentation = "https://github.com/martin-olivier/airgorah" +documentation = "https://github.com/martin-olivier/airgorah/wiki" keywords = ["networking", "pentest", "aircrack-ng", "gui", "linux"] readme = "README.md" exclude = ["/.github", "/package"] @@ -16,29 +16,12 @@ exclude = ["/.github", "/package"] gtk4 = { version = "0.7.2", features = ["v4_6"] } glib = "0.18.1" serde = { version = "1.0.188", features = ["derive"] } -serde_json = "1.0.105" -toml = "0.7.6" +serde_json = "1.0.106" +toml = "0.7.8" csv = "1.2.2" sudo = "0.6.0" -ctrlc = "3.4.0" -regex = "1.9.4" +ctrlc = "3.4.1" +regex = "1.9.5" lazy_static = "1.4.0" ureq = { version = "2.7.1", features = ["json"] } -which = "4.4.0" - -[package.metadata.deb] -copyright = "2023, Martin Olivier" -maintainer = "Martin Olivier " -license-file = ["LICENSE"] -extended-description = "A WiFi auditing software that can perform deauth attacks and passwords cracking" -depends = "gnome-terminal, pkexec, libgtk-4-1 (>= 4.6.0), dbus-x11, iproute2, iw, aircrack-ng (>= 1.6), mdk4, wireshark-common, macchanger, crunch" -priority = "optional" -section = "utility" -assets = [ - ["target/release/airgorah", "/usr/bin/airgorah", "755"], - ["README.md", "/usr/share/doc/airgorah/README", "644"], - ["icons/app_icon.png", "/usr/share/app-install/icons/airgorah.png", "644"], - ["package/config.toml", "/etc/airgorah/config.toml", "644"], - ["package/.desktop", "/usr/share/applications/com.martin-olivier.airgorah.desktop", "644"], - ["package/.policy", "/usr/share/polkit-1/actions/org.freedesktop.policykit.airgorah.policy", "755"], -] +which = "4.4.2" diff --git a/README.md b/README.md index 5774fe7..1095fdd 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@

A WiFi auditing software that can perform deauth attacks and passwords cracking

- - version + + version license @@ -23,9 +23,9 @@ ![illustration](.github/assets/illustration.png) -`Airgorah` can be used to audit a WiFi network by discovering the clients connected to it, performing deauth attacks against specific clients or all the clients connected to the network, or by cracking the password of the access point. +`Airgorah` is a WiFi auditing software that can discover the clients connected to an access point, perform deauthentication attacks against specific clients or all the clients connected to it, capture WPA handshakes, and crack the password of the access point. -It is written in Rust and uses [GTK4 bindings](https://github.com/gtk-rs/gtk4-rs) for the graphical part. The software is based on [aircrack-ng](https://github.com/aircrack-ng/aircrack-ng) tools suite. +It is written in Rust and uses [GTK4](https://github.com/gtk-rs/gtk4-rs) for the graphical part. The software is mainly based on [aircrack-ng](https://github.com/aircrack-ng/aircrack-ng) tools suite. `⭐ Don't forget to put a star if you like the project!` @@ -41,22 +41,18 @@ You will also need a wireless network card that supports `monitor mode` and `pac ## Installation -You can find pre-built releases for `Debian` based distributions [here](https://github.com/martin-olivier/airgorah/releases/latest) (Ubuntu, PopOS, Mint, Kali). You will just need to download the debian package and install it with the following command: - -``` -sudo apt install ~/Downloads/airgorah_0.4.0_amd64.deb -``` - -Otherwise, if you'd like to compile from source, you can follow this [guide](https://github.com/martin-olivier/airgorah/wiki/Build-from-source). +The installation instructions are available [here](https://github.com/martin-olivier/airgorah/wiki/Installation). ## Documentation -The documentation of this project are available on the [wiki](https://github.com/martin-olivier/airgorah/wiki) +The documentation about the usage of the application is available [here](https://github.com/martin-olivier/airgorah/wiki/Usage). ## License This project is released under [MIT](LICENSE) license. -## Contributing +## Community + +If you have any question about the usage of the application, do not hesitate to open a [discussion](https://github.com/martin-olivier/airgorah/discussions) -Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. +If you want to report a bug or provide a feature, do not hesitate to open an [issue](https://github.com/martin-olivier/airgorah/issues) or submit a [pull request](https://github.com/martin-olivier/airgorah/pulls) diff --git a/package/.desktop b/package/.desktop index 9caaff9..5c5af83 100644 --- a/package/.desktop +++ b/package/.desktop @@ -1,8 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 -Version=0.4.0 +Name=Airgorah +Comment=A WiFi auditing software that can perform deauth attacks and passwords cracking +Exec=pkexec airgorah +Icon=/usr/share/pixmaps/airgorah.png +ApplicationId=com.molivier.airgorah Type=Application Terminal=false -Exec=pkexec airgorah -Name=Airgorah -Icon=/usr/share/app-install/icons/airgorah.png \ No newline at end of file diff --git a/src/backend/app.rs b/src/backend/app.rs index b069af0..6673e9b 100755 --- a/src/backend/app.rs +++ b/src/backend/app.rs @@ -19,9 +19,9 @@ pub fn app_setup() -> Result<(), Error> { load_settings(); - check_dependencies(&[ + check_required_dependencies(&[ "sh", - "service", + "systemctl", "ip", "iw", "awk", @@ -29,11 +29,9 @@ pub fn app_setup() -> Result<(), Error> { "airodump-ng", "aireplay-ng", "aircrack-ng", - "mdk4", - "gnome-terminal", + "xfce4-terminal", "mergecap", "macchanger", - "crunch", ]) } @@ -66,12 +64,17 @@ pub fn app_cleanup() { std::fs::remove_file(OLD_SCAN_PATH.to_string() + "-01.cap").ok(); } -/// Check if all the dependencies are installed -pub fn check_dependencies(deps: &[&str]) -> Result<(), Error> { +/// Check if a dependency is installed +pub fn has_dependency(dep: &str) -> bool { + which::which(dep).is_ok() +} + +/// Check if all the required dependencies are installed +pub fn check_required_dependencies(deps: &[&str]) -> Result<(), Error> { for dep in deps { - if which::which(dep).is_err() { + if !has_dependency(dep) { return Err(Error::new(&format!( - "Missing dependency: \"{}\"\n{}", + "Missing required dependency: \"{}\"\n{}", dep, "Please install it using your package manager" ))); } diff --git a/src/backend/decrypt.rs b/src/backend/decrypt.rs index d4a0cd4..dc7e6c5 100755 --- a/src/backend/decrypt.rs +++ b/src/backend/decrypt.rs @@ -15,22 +15,26 @@ pub fn run_decrypt_wordlist_process( wordlist: &str, ) -> Result<(), Error> { let cmd = format!( - "aircrack-ng '{}' -b '{}' -w '{}' ; exec sh", + "aircrack-ng '{}' -b '{}' -w '{}'", handshake, bssid, wordlist ); - Command::new("gnome-terminal") - .stdin(Stdio::piped()) - .args([ - "--hide-menubar", - "--title", - &format!("Handshake Decryption ({})", essid), - "--", - "sh", - "-c", - &cmd, - ]) - .output()?; + let mut process = Command::new("xfce4-terminal"); + process.stdin(Stdio::piped()); + process.args([ + "--hide-menubar", + "--hide-toolbar", + "--hide-scrollbar", + "--hold", + "-T", + &format!("Handshake Decryption ({})", essid), + "-e", + &cmd, + ]); + + std::thread::spawn(move || { + process.output().unwrap(); + }); Ok(()) } @@ -65,22 +69,26 @@ pub fn run_decrypt_bruteforce_process( }, ); let cmd = format!( - "crunch 8 64 '{}' | aircrack-ng -w - -b '{}' '{}' ; exec sh", + "sh -c \"crunch 8 64 '{}' | aircrack-ng -w - -b '{}' '{}'\"", charset, bssid, handshake ); - Command::new("gnome-terminal") - .stdin(Stdio::piped()) - .args([ - "--hide-menubar", - "--title", - &format!("Handshake Decryption ({})", essid), - "--", - "sh", - "-c", - &cmd, - ]) - .output()?; + let mut process = Command::new("xfce4-terminal"); + process.stdin(Stdio::piped()); + process.args([ + "--hide-menubar", + "--hide-toolbar", + "--hide-scrollbar", + "--hold", + "-T", + &format!("Handshake Decryption ({})", essid), + "-e", + &cmd, + ]); + + std::thread::spawn(move || { + process.output().unwrap(); + }); Ok(()) } diff --git a/src/backend/interface.rs b/src/backend/interface.rs index 207b177..8129121 100644 --- a/src/backend/interface.rs +++ b/src/backend/interface.rs @@ -188,14 +188,14 @@ pub fn restore_network_manager() -> Result<(), Error> { return Ok(()); } - Command::new("service") - .args(["NetworkManager", "restart"]) + Command::new("systemctl") + .args(["restart", "NetworkManager"]) .output()?; - Command::new("service") - .args(["network-manager", "restart"]) + Command::new("systemctl") + .args(["restart", "network-manager"]) .output()?; - Command::new("service") - .args(["wpa-supplicant", "restart"]) + Command::new("systemctl") + .args(["restart", "wpa-supplicant"]) .output()?; Ok(()) diff --git a/src/frontend/connections/deauth.rs b/src/frontend/connections/deauth.rs index 6677182..36fae1f 100755 --- a/src/frontend/connections/deauth.rs +++ b/src/frontend/connections/deauth.rs @@ -91,14 +91,23 @@ fn connect_attack_but(app_data: Rc) { false => AttackSoftware::Mdk4, }; - backend::launch_deauth_attack(backend::get_aps()[&bssid].clone(), params, attack_software).unwrap_or_else(|e| { - ErrorDialog::spawn( - &app_data.app_gui.window, + if attack_software == AttackSoftware::Mdk4 && !backend::has_dependency("mdk4") { + return ErrorDialog::spawn( + &app_data.deauth_gui.window, + "Error", + "\"mdk4\" is not installed on your system", + false, + ); + } + + if let Err(e) = backend::launch_deauth_attack(backend::get_aps()[&bssid].clone(), params, attack_software) { + return ErrorDialog::spawn( + &app_data.deauth_gui.window, "Error", &format!("Could not start deauth process:\n\n{}", e), false, ); - }); + }; app_data.deauth_gui.window.hide(); })); diff --git a/src/frontend/connections/decrypt.rs b/src/frontend/connections/decrypt.rs index b42a07f..a106bc4 100755 --- a/src/frontend/connections/decrypt.rs +++ b/src/frontend/connections/decrypt.rs @@ -166,17 +166,20 @@ fn connect_decrypt_button(app_data: Rc) { let stack = app_data.decrypt_gui.stack.visible_child_name().unwrap(); - app_data.decrypt_gui.window.close(); - if stack == "dictionary" { - backend::run_decrypt_wordlist_process(&handshake_entry, &bssid, &essid, &wordlist_entry).unwrap_or_else(|e| { - ErrorDialog::spawn(&app_data.app_gui.window, "Failed to run decryption", &e.to_string(), false); - }); + if let Err(e) = backend::run_decrypt_wordlist_process(&handshake_entry, &bssid, &essid, &wordlist_entry) { + return ErrorDialog::spawn(&app_data.decrypt_gui.window, "Failed to run decryption", &e.to_string(), false); + } } else { - backend::run_decrypt_bruteforce_process(&handshake_entry, &bssid, &essid, low, up, num, sym).unwrap_or_else(|e| { - ErrorDialog::spawn(&app_data.app_gui.window, "Failed to run decryption", &e.to_string(), false); - }); + if !backend::has_dependency("crunch") { + let err_msg = "\"crunch\" is not installed on your system, could not generate a wordlist from a charset"; + return ErrorDialog::spawn(&app_data.decrypt_gui.window, "Failed to run decryption", err_msg, false); + } + if let Err(e) = backend::run_decrypt_bruteforce_process(&handshake_entry, &bssid, &essid, low, up, num, sym) { + return ErrorDialog::spawn(&app_data.decrypt_gui.window, "Failed to run decryption", &e.to_string(), false); + } } + app_data.decrypt_gui.window.close(); })); } diff --git a/src/frontend/interfaces/app.rs b/src/frontend/interfaces/app.rs index 7a337b9..f2e5904 100755 --- a/src/frontend/interfaces/app.rs +++ b/src/frontend/interfaces/app.rs @@ -74,15 +74,15 @@ fn build_aps_view() -> TreeView { let view = TreeView::builder().vexpand(true).hexpand(true).build(); let columns = [ ("ESSID", 154), - ("BSSID", 130), + ("BSSID", 138), ("Band", 64), ("Channel", 86), ("Speed", 72), ("Power", 72), ("Encryption", 106), ("Clients", 80), - ("First time seen", 140), - ("Last time seen", 140), + ("First time seen", 150), + ("Last time seen", 150), ("Handshake", 106), ]; diff --git a/src/globals.rs b/src/globals.rs index 8c11dcf..14bfafa 100644 --- a/src/globals.rs +++ b/src/globals.rs @@ -6,8 +6,8 @@ use std::process::Child; use std::sync::Mutex; use std::thread::JoinHandle; -pub static APP_ID: &str = "com.martin-olivier.airgorah"; -pub static VERSION: &str = "v0.4.0"; +pub static APP_ID: &str = "com.molivier.airgorah"; +pub static VERSION: &str = "v0.4.1"; pub static LIVE_SCAN_PATH: &str = "/tmp/airgorah_live_scan"; pub static OLD_SCAN_PATH: &str = "/tmp/airgorah_old_scan"; diff --git a/src/types.rs b/src/types.rs index 58d8020..3755450 100644 --- a/src/types.rs +++ b/src/types.rs @@ -7,6 +7,7 @@ pub enum AttackedClients { Selection(Vec<(String, Child)>), } +#[derive(PartialEq)] pub enum AttackSoftware { Aireplay, Mdk4,