diff --git a/.airgeddonrc b/.airgeddonrc index 46ce06f8a..0f5dc4134 100644 --- a/.airgeddonrc +++ b/.airgeddonrc @@ -28,6 +28,9 @@ AIRGEDDON_FORCE_IPTABLES=false #Available values: mdk3, mdk4 - Define which mdk version is going to be used - Default value mdk4 AIRGEDDON_MDK_VERSION=mdk4 +#Enabled true / Disabled false - Enable plugins system - Default value true +AIRGEDDON_PLUGINS_ENABLED=true + #Enabled true / Disabled false - Development mode for faster development skipping intro and all initial checks - Default value false AIRGEDDON_DEVELOPMENT_MODE=false diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index fd49a6b09..d366775d1 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,4 +1,5 @@ - + + @@ -10,7 +11,7 @@ #### What is your Linux O.S. and which version? - + #### Which is the chipset of your wireless card? diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 28189d768..f74155866 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,7 +4,8 @@ about: Create a report to help us improve --- - + + @@ -16,7 +17,7 @@ about: Create a report to help us improve #### What is your Linux O.S. and which version? - + #### Which is the chipset of your wireless card? diff --git a/.github/ISSUE_TEMPLATE/feature-request---compatibility-enhancement.md b/.github/ISSUE_TEMPLATE/feature-request---compatibility-enhancement.md index b043367a2..2d7547362 100644 --- a/.github/ISSUE_TEMPLATE/feature-request---compatibility-enhancement.md +++ b/.github/ISSUE_TEMPLATE/feature-request---compatibility-enhancement.md @@ -4,7 +4,8 @@ about: Suggest an idea for this project --- - + + diff --git a/.github/ISSUE_TEMPLATE/general-question.md b/.github/ISSUE_TEMPLATE/general-question.md index c5bd2a052..4317d073b 100644 --- a/.github/ISSUE_TEMPLATE/general-question.md +++ b/.github/ISSUE_TEMPLATE/general-question.md @@ -4,7 +4,8 @@ about: Ask some general question --- - + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5b9eaf924..99f19a57a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,8 @@ + + #### Describe the purpose of the pull request diff --git a/CHANGELOG.md b/CHANGELOG.md index b9d31d267..126addb97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +### 10.0 + - Added plugins system + - Added example plugin: Missing dependencies auto-installation for some distros (Kali, Parrot, BlackArch) + - Improvements for Evil Twin on captive portal detection for newer devices + - Missing 5GHz channels added + - Github pull request template added and issue templates updated + - Fixed error on hex2ascii conversion for some WEP passwords + ### 9.23 - Fixed error printing hints - Fixed problem with default values on options file creation diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3492c2fdb..822db8840 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,16 +11,17 @@ Please note we have a [Code of Conduct], please follow it in all your interactio ## Issue Creation Policy -1. Filling the issue template with *ALL* the requested info is mandatory. Otherwise the issue can be marked as "invalid" and closed immediately. -2. Issues must be opened in English. -3. If an issue is opened and more info is needed, `airgeddon` staff will request it. If there is no answer in 7 days or the OP is not collaborating, the issue will be closed. -4. If the issue is not related to airgeddon or the root cause is out of scope, it will be closed. `airgeddon` staff is not a helpdesk support service. -5. Try to be sure that your problem is related to airgeddon and that is not a driver issue. A good practice is always to try to perform the same operation without using `airgeddon` in order to see if the problem or the behavior can be reproduced. In that case, probably the issue should not be created. -6. Don't talk or mention references to other tools. If you want to talk about other similar tools you can do it on their pages/github. `airgeddon` issues are to talk about `airgeddon`. +1. Please, consider to contact us on [IRC] or [Discord] channel before opening an issue. More info at [Wiki Contact Section] +2. Filling the issue template with *ALL* the requested info is mandatory. Otherwise the issue can be marked as "invalid" and closed immediately. +3. Issues must be opened in English. +4. If an issue is opened and more info is needed, `airgeddon` staff will request it. If there is no answer in 7 days or the OP is not collaborating, the issue will be closed. +5. If the issue is not related to airgeddon or the root cause is out of scope, it will be closed. `airgeddon` staff is not a helpdesk support service. +6. Try to be sure that your problem is related to airgeddon and that is not a driver issue. A good practice is always to try to perform the same operation without using `airgeddon` in order to see if the problem or the behavior can be reproduced. In that case, probably the issue should not be created. +7. Don't talk or mention references to other tools. If you want to talk about other similar tools you can do it on their pages/github. `airgeddon` issues are to talk about `airgeddon`. ## Collaborating Translators -1. Ask ALWAYS before start a translation to add a new language ([v1s1t0r.1s.h3r3@gmail.com]). Contact to the development team in order to know what are you going to do. You'll be informed about how to proceed. +1. Ask ALWAYS before start a translation to add a new language (by mail at [v1s1t0r.1s.h3r3@gmail.com], by Twitter at [@OscarAkaElvis], by [IRC] or [Discord] channel). Contact to the development team in order to know what are you going to do. You'll be informed about how to proceed. 2. Once new language is approved or if you are going to update an existing one, update the date under shebang on every commit. 3. Translate the strings located in `language_strings.sh` and the existing phrases _language_strings_handling_messages function_ in `airgeddon.sh`. 4. If you want to create a pull request with a new language to be added, at least the 80% of the phrases must be translated and the rest must be done with at least _an automatic-translation_ system and marked with PoT (Pending of Translation) mark. @@ -28,7 +29,9 @@ Please note we have a [Code of Conduct], please follow it in all your interactio 6. After verification of and acceptation of the pull request, you can be added as a collaborator on the project to push directly on the repository instead of making pull requests. 7. Knowledge about `git` is mandatory (at least basic commands) to push directly into the project repository. -## Collaborating Developers +## Collaborating Developers and Plugins Development + +#### For direct interaction with the repository (plugins development excluded): 1. First of all ask ALWAYS before performing a development. Ask to the developement team to set what is going to be 2. Tweak *"AIRGEDDON_DEVELOPMENT_MODE"* variable to "true" for faster development skipping intro and initial checks or change *"AIRGEDDON_DEBUG_MODE"* variable for verbosity. @@ -39,22 +42,28 @@ Please note we have a [Code of Conduct], please follow it in all your interactio - *X* is a major release with a new menu (e.g. WPS menu) - *Y* is a minor release with a new feature for an existing menu or a new submenu for an existing feature - *Z* is a minor release with new bug fixes, small modifications or code improvements -7. Update the date on `.sh` and `.db` files under shebang, if appropriate. -8. Split your commits into parts. Each part represents a unique change on files. -9. Direct push to [Master] is not allowed. Pull Requests to [Master] are not allowed. Should be done over [Dev] or any other branch. They require revision and approvement. Read the git workflow policy first. -10. All the development and coding must be in English. +7. Split your commits into parts. Each part represents a unique change on files. +8. Direct push to [Master] is not allowed. Pull Requests to [Master] are not allowed. Should be done over [Dev] or any other branch. They require revision and approvement. Read the git workflow policy first. +9. All the development and coding must be in English. *Be sure to merge the latest from "upstream" before making a pull request!* +#### For plugins development: + +1. Read carefully the [Wiki Plugins Development Section]. +2. Plugins Pull Requests will be never accepted. Plugins MUST be external to this repository. +3. Develop your plugin following the guidelines and using the plugin template to keep the needed structure. +4. If you want to add your plugin to [Wiki Plugins Hall of Fame Section], follow the instructions explained there. Don't open an issue. + We also have a private Telegram group for *trusted collaborators* for more agile discussion about developments, improvements, etc. To be added on it you must prove first you are a *trusted collaborator* with your contributions. -Anything ca be also discussed on the IRC channel. More info on [Wiki Contact Section] +Anything can be also discussed on public [IRC] or [Discord] channel. More info at [Wiki Contact Section]. ## WPS PIN Database Collaborators 1. Send MAC of the BSSID and the default PIN to [v1s1t0r.1s.h3r3@gmail.com]. If you are going to push directly into the repository, keep reading the next points. 2. Add PINs ordered by the key in the associative array located in the `known_pins.db` file. (Keys are the first 6 BSSID digits). -3. Update the `pindb_checksum.txt` file with the calculated checksum of the database file using `md5sum` tool. +3. Update the `pindb_checksum.txt` file with the calculated checksum of the already modified database file using `md5sum` tool. 4. Update the date under shebang. *PINs should be from devices that generate generic ones.* @@ -62,7 +71,7 @@ Anything ca be also discussed on the IRC channel. More info on [Wiki Contact Sec ## Beta Testers 1. Download the main version from the [Master] branch or the beta testing version from the development branch called [Dev]. Temporary branches may be existing for specific features that can also be tested. -2. Report any issues or bugs by mail [v1s1t0r.1s.h3r3@gmail.com] or submit issue requests [Here] reading first the Issue Creation Policy. +2. Report any issues or bugs by Twitter at [@OscarAkaElvis], mail [v1s1t0r.1s.h3r3@gmail.com], on [IRC] or [Discord] channel or submit Github issue requests [Here] reading first the Issue Creation Policy. ## Git Workflow Policy @@ -158,10 +167,17 @@ If you enjoyed the script, feel free to donate. Support the project through Payp [Shellcheck]: https://github.com/koalaman/shellcheck "shellcheck.hs" -[Here]: https://github.com/v1s1t0r1sh3r3/airgeddon/issues/new +[Here]: https://github.com/v1s1t0r1sh3r3/airgeddon/issues/new/choose [Master]: https://github.com/v1s1t0r1sh3r3/airgeddon/tree/master [Dev]: https://github.com/v1s1t0r1sh3r3/airgeddon/tree/dev [xtonousou]: https://github.com/xtonousou "xT" [v1s1t0r]: https://github.com/v1s1t0r1sh3r3 [OscarAkaElvis]: https://github.com/OscarAkaElvis [Wiki Contact Section]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Contact +[Wiki Plugins Development Section]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Plugins%20Development +[Wiki Plugins Hall of Fame Section]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Plugins%20Hall%20of%20Fame + + +[@OscarAkaElvis]: https://twitter.com/OscarAkaElvis +[Discord]: https://discord.gg/sQ9dgt9 +[IRC]: https://webchat.freenode.net/ diff --git a/Dockerfile b/Dockerfile index bb1b993a8..1a12f8cd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,7 +47,8 @@ RUN \ aircrack-ng \ xterm \ iproute2 \ - pciutils + pciutils \ + procps #Install airgeddon internal tools RUN \ @@ -148,7 +149,7 @@ RUN \ apt autoclean && \ apt autoremove -y -#Clean files +#Clean and remove useless files RUN rm -rf /opt/airgeddon/imgs > /dev/null 2>&1 && \ rm -rf /opt/airgeddon/.github > /dev/null 2>&1 && \ rm -rf /opt/airgeddon/.editorconfig > /dev/null 2>&1 && \ @@ -159,11 +160,15 @@ RUN rm -rf /opt/airgeddon/imgs > /dev/null 2>&1 && \ rm -rf /opt/airgeddon/binaries > /dev/null 2>&1 && \ rm -rf /opt/hashcat2.0 > /dev/null 2>&1 && \ rm -rf /opt/bettercap1.6.2 > /dev/null 2>&1 && \ + rm -rf /opt/airgeddon/plugins/* > /dev/null 2>&1 && \ rm -rf /tmp/* > /dev/null 2>&1 && \ rm -rf /var/lib/apt/lists/* > /dev/null 2>&1 #Expose BeEF control panel port EXPOSE 3000 +#Create volume for plugins +VOLUME /opt/airgeddon/plugins + #Start command (launching airgeddon) CMD ["/bin/bash", "-c", "/opt/airgeddon/airgeddon.sh"] diff --git a/README.md b/README.md index e01daf8f4..61908a145 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,9 @@ All the needed info about how to "install | use | enjoy" `airgeddon` is present - *IV. Project & Development* + - [Plugins system] + - [Plugins development] + - [Plugins Hall of Fame] - [Supported Languages] - [Contributing & Code of Conduct] - [Changelog] @@ -82,6 +85,9 @@ All the needed info about how to "install | use | enjoy" `airgeddon` is present [Mac OSX]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Docker%20Mac%20OSX [Windows]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Docker%20Windows [Other Sources]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Other%20Sources +[Plugins system]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Plugins%20System +[Plugins development]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Plugins%20Development +[Plugins Hall of Fame]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Plugins%20Hall%20of%20Fame [Supported Languages]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Supported%20Languages [Contributing & Code of Conduct]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Contributing-&-Code-of-Conduct [Changelog]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Changelog @@ -90,7 +96,7 @@ All the needed info about how to "install | use | enjoy" `airgeddon` is present [Hat Tip To]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Hat%20Tip%20To [Inspiration]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Inspiration -[Version-shield]: https://img.shields.io/badge/version-9.23-blue.svg?style=flat-square&colorA=273133&colorB=0093ee "Latest version" +[Version-shield]: https://img.shields.io/badge/version-10.0-blue.svg?style=flat-square&colorA=273133&colorB=0093ee "Latest version" [Bash4.2-shield]: https://img.shields.io/badge/bash-4.2%2B-blue.svg?style=flat-square&colorA=273133&colorB=00db00 "Bash 4.2 or later" [License-shield]: https://img.shields.io/badge/license-GPL%20v3%2B-blue.svg?style=flat-square&colorA=273133&colorB=bd0000 "GPL v3+" [Docker-shield]: https://img.shields.io/docker/automated/v1s1t0r1sh3r3/airgeddon.svg?style=flat-square&colorA=273133&colorB=f9ff5a "Docker rules!" diff --git a/airgeddon.sh b/airgeddon.sh index fa48af0a3..bf4c7ba32 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,8 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190924 -#Version......: 9.23 +#Version......: 10.0 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -40,6 +39,7 @@ essential_tools_names=( "xterm" "ip" "lspci" + "ps" ) optional_tools_names=( @@ -71,6 +71,16 @@ optional_tools_names=( update_tools=("curl") +internal_tools=( + "xdpyinfo" + "ethtool" + "lsusb" + "rfkill" + "wget" + "ccze" + "xset" + ) + declare -A possible_package_names=( [${essential_tools_names[0]}]="net-tools" #ifconfig [${essential_tools_names[1]}]="wireless-tools / wireless_tools" #iwconfig @@ -82,6 +92,7 @@ declare -A possible_package_names=( [${essential_tools_names[7]}]="xterm" #xterm [${essential_tools_names[8]}]="iproute2" #ip [${essential_tools_names[9]}]="pciutils" #lspci + [${essential_tools_names[10]}]="procps / procps-ng" #ps [${optional_tools_names[0]}]="aircrack-ng" #wpaclean [${optional_tools_names[1]}]="crunch" #crunch [${optional_tools_names[2]}]="aircrack-ng" #aireplay-ng @@ -115,12 +126,13 @@ declare -A possible_alias_names=( ) #General vars -airgeddon_version="9.23" -language_strings_expected_version="9.23-1" +airgeddon_version="10.0" +language_strings_expected_version="10.0-1" standardhandshake_filename="handshake-01.cap" timeout_capture_handshake="20" tmpdir="/tmp/" osversionfile_dir="/etc/" +plugins_dir="plugins/" minimum_bash_version_required="4.2" resume_message=224 abort_question=12 @@ -138,7 +150,7 @@ ghz="Ghz" band_24ghz="2.4${ghz}" band_5ghz="5${ghz}" valid_channels_24_ghz_regexp="([1-9]|1[0-4])" -valid_channels_24_and_5_ghz_regexp="([1-9]|1[0-4]|3[68]|4[0468]|5[246]|6[024]|10[0248]|11[02])" +valid_channels_24_and_5_ghz_regexp="([1-9]|1[0-4]|3[68]|4[02468]|5[02468]|6[024]|10[02468]|11[02468]|12[02468]|13[2468]|14[0249]|15[13579]|16[15])" minimum_wash_dualscan_version="1.6.5" #aircrack vars @@ -172,7 +184,7 @@ wep_processes_file="wep_processes" #Docker vars docker_based_distro="Parrot" -docker_io_dir="/io" +docker_io_dir="/io/" #WPS vars minimum_reaver_pixiewps_version="1.5.2" @@ -205,16 +217,16 @@ mail="v1s1t0r.1s.h3r3@gmail.com" author="v1s1t0r" #Dhcpd, Hostapd and misc Evil Twin vars -ip_range="192.168.1.0" -alt_ip_range="172.16.250.0" -router_ip="192.168.1.1" -alt_router_ip="172.16.250.1" -broadcast_ip="192.168.1.255" -alt_broadcast_ip="172.16.250.255" -range_start="192.168.1.33" -range_stop="192.168.1.100" -alt_range_start="172.16.250.33" -alt_range_stop="172.16.250.100" +ip_range="192.169.1.0" +alt_ip_range="192.167.1.0" +router_ip="192.169.1.1" +alt_router_ip="192.167.1.1" +broadcast_ip="192.169.1.255" +alt_broadcast_ip="192.167.1.255" +range_start="192.169.1.33" +range_stop="192.169.1.100" +alt_range_start="192.167.1.33" +alt_range_stop="192.167.1.100" std_c_mask="255.255.255.0" ip_mask="255.255.255.255" std_c_mask_cidr="24" @@ -226,6 +238,7 @@ loopback_ip="127.0.0.1" loopback_ipv6="::1/128" routing_tmp_file="ag.iptables_nftables" dhcpd_file="ag.dhcpd.conf" +hosts_file="ag.hosts" internet_dns1="8.8.8.8" internet_dns2="8.8.4.4" internet_dns3="139.130.4.5" @@ -320,7 +333,7 @@ known_arm_compatible_distros=( ) #Hint vars -declare main_hints=(128 134 163 437 438 442 445 516 590 626) +declare main_hints=(128 134 163 437 438 442 445 516 590 626 660) declare dos_hints=(129 131 133) declare handshake_hints=(127 130 132 136) declare dos_handshake_hints=(142) @@ -556,6 +569,11 @@ function option_toggle() { debug_print + local required_reboot=0 + if [[ -n "${2}" ]] && [[ "${2}" = "required_reboot" ]]; then + required_reboot=1 + fi + local option_var_name="${1}" local option_var_value="${!1}" @@ -564,13 +582,19 @@ function option_toggle() { if ! grep "${option_var_name}=false" "${rc_path}" > /dev/null; then return 1 fi - eval "export ${option_var_name}=false" + + if [ ${required_reboot} -eq 0 ]; then + eval "export ${option_var_name}=false" + fi else sed -ri "s:(${option_var_name})=(false):\1=true:" "${rc_path}" 2> /dev/null if ! grep "${option_var_name}=true" "${rc_path}" > /dev/null; then return 1 fi - eval "export ${option_var_name}=true" + + if [ ${required_reboot} -eq 0 ]; then + eval "export ${option_var_name}=true" + fi fi case "${option_var_name}" in @@ -618,47 +642,49 @@ function debug_print() { if "${AIRGEDDON_DEBUG_MODE:-true}"; then declare excluded_functions=( - "airmon_fix" - "ask_yesno" - "check_pending_of_translation" - "clean_env_vars" - "contains_element" - "create_rcfile" - "echo_blue" - "echo_brown" - "echo_cyan" - "echo_green" - "echo_green_title" - "echo_pink" - "echo_red" - "echo_red_slim" - "echo_white" - "echo_yellow" - "env_vars_initialization" - "env_vars_values_validation" - "generate_dynamic_line" - "initialize_colors" - "initialize_script_settings" - "interrupt_checkpoint" - "language_strings" - "last_echo" - "physical_interface_finder" - "print_hint" - "print_large_separator" - "print_simple_separator" - "read_yesno" - "remove_warnings" - "set_script_folder_and_name" - "special_text_missed_optional_tool" - "store_array" - "under_construction_message" - ) + "airmon_fix" + "ask_yesno" + "check_pending_of_translation" + "clean_env_vars" + "contains_element" + "create_rcfile" + "echo_blue" + "echo_brown" + "echo_cyan" + "echo_green" + "echo_green_title" + "echo_pink" + "echo_red" + "echo_red_slim" + "echo_white" + "echo_yellow" + "env_vars_initialization" + "env_vars_values_validation" + "fix_autocomplete_chars" + "flying_saucer" + "generate_dynamic_line" + "initialize_colors" + "initialize_script_settings" + "interrupt_checkpoint" + "language_strings" + "last_echo" + "physical_interface_finder" + "print_hint" + "print_large_separator" + "print_simple_separator" + "read_yesno" + "remove_warnings" + "set_script_paths" + "special_text_missed_optional_tool" + "store_array" + "under_construction_message" + ) if (IFS=$'\n'; echo "${excluded_functions[*]}") | grep -qFx "${FUNCNAME[1]}"; then return 1 fi - echo "Line:${BASH_LINENO[1]}" "${FUNCNAME[1]}" + echo "Line:${BASH_LINENO[2]}" "${FUNCNAME[1]}" fi return 0 @@ -675,7 +701,7 @@ function interrupt_checkpoint() { last_buffered_type1=${2} last_buffered_type2=${2} else - if [ "${1}" -ne ${resume_message} ]; then + if [[ "${1}" -ne "${resume_message}" ]] 2>/dev/null && [[ "${1}" != "${resume_message}" ]]; then last_buffered_message2=${last_buffered_message1} last_buffered_message1=${1} last_buffered_type2=${last_buffered_type1} @@ -1630,6 +1656,11 @@ function option_menu() { else language_strings "${language}" 637 fi + if "${AIRGEDDON_PLUGINS_ENABLED:-true}"; then + language_strings "${language}" 651 + else + language_strings "${language}" 652 + fi language_strings "${language}" 447 print_hint ${current_menu} @@ -1871,13 +1902,22 @@ function option_menu() { ;; 10) if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - sed -ri "s:(AIRGEDDON_WINDOWS_HANDLING)=(xterm):\1=tmux:" "${rc_path}" 2> /dev/null + ask_yesno 657 "yes" + if [ "${yesno}" = "y" ]; then + sed -ri "s:(AIRGEDDON_WINDOWS_HANDLING)=(xterm):\1=tmux:" "${rc_path}" 2> /dev/null + echo + language_strings "${language}" 620 "yellow" + language_strings "${language}" 115 "read" + fi else - sed -ri "s:(AIRGEDDON_WINDOWS_HANDLING)=(tmux):\1=xterm:" "${rc_path}" 2> /dev/null + ask_yesno 658 "yes" + if [ "${yesno}" = "y" ]; then + sed -ri "s:(AIRGEDDON_WINDOWS_HANDLING)=(tmux):\1=xterm:" "${rc_path}" 2> /dev/null + echo + language_strings "${language}" 620 "yellow" + language_strings "${language}" 115 "read" + fi fi - echo - language_strings "${language}" 620 "yellow" - language_strings "${language}" 115 "read" ;; 11) ask_yesno 639 "yes" @@ -1890,6 +1930,24 @@ function option_menu() { fi ;; 12) + if "${AIRGEDDON_PLUGINS_ENABLED:-true}"; then + ask_yesno 655 "yes" + else + ask_yesno 656 "yes" + fi + + if [ "${yesno}" = "y" ]; then + if option_toggle "AIRGEDDON_PLUGINS_ENABLED" "required_reboot"; then + echo + language_strings "${language}" 620 "yellow" + else + echo + language_strings "${language}" 417 "red" + fi + language_strings "${language}" 115 "read" + fi + ;; + 13) ask_yesno 478 "yes" if [ "${yesno}" = "y" ]; then get_current_permanent_language @@ -2848,6 +2906,7 @@ function create_certificates_config_files() { } #Manage the questions to decide if custom certificates are used +#shellcheck disable=SC2181 function custom_certificates_integration() { debug_print @@ -2932,6 +2991,8 @@ function custom_certificates_integration() { function validate_certificates() { debug_print + local certsresult + certsresult=0 if ! [ -f "${1}server.pem" ] || ! [ -r "${1}server.pem" ] || ! [ -f "${1}ca.pem" ] || ! [ -r "${1}ca.pem" ] || ! [ -f "${1}server.key" ] || ! [ -r "${1}server.key" ]; then return 1 @@ -3217,7 +3278,7 @@ function set_wep_key_script() { cat >&8 <<-'EOF' wep_hex_key=$(eval "${wep_hex_key_cmd}") - wep_ascii_key=$(echo "${wep_hex_key}" | awk 'RT{printf "%c", strtonum("0x"RT)}' RS='[0-9]{2}') + wep_ascii_key=$(echo "${wep_hex_key}" | awk 'RT{printf "%c", strtonum("0x"RT)}' RS='[0-9A-Fa-f]{2}') EOF cat >&8 <<-EOF @@ -4731,13 +4792,33 @@ function print_options() { language_strings "${language}" 595 "blue" fi - language_strings "${language}" 641 "blue" - + reboot_required_text="" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + if grep -q "AIRGEDDON_WINDOWS_HANDLING=tmux" "${rc_path}" 2> /dev/null; then + reboot_required_text="${reboot_required[${language}]}" + fi language_strings "${language}" 618 "blue" else + if grep -q "AIRGEDDON_WINDOWS_HANDLING=xterm" "${rc_path}" 2> /dev/null; then + reboot_required_text="${reboot_required[${language}]}" + fi language_strings "${language}" 619 "blue" fi + + language_strings "${language}" 641 "blue" + + reboot_required_text="" + if "${AIRGEDDON_PLUGINS_ENABLED:-true}"; then + if grep -q "AIRGEDDON_PLUGINS_ENABLED=false" "${rc_path}" 2> /dev/null; then + reboot_required_text="${reboot_required[${language}]}" + fi + language_strings "${language}" 653 "blue" + else + if grep -q "AIRGEDDON_PLUGINS_ENABLED=true" "${rc_path}" 2> /dev/null; then + reboot_required_text="${reboot_required[${language}]}" + fi + language_strings "${language}" 654 "blue" + fi } #Print selected interface @@ -5064,7 +5145,7 @@ function dependencies_modifications() { if [ "${iptables_nftables}" -eq 0 ]; then optional_tools_names=("${optional_tools_names[@]/nft/iptables}") possible_package_names[${optional_tools_names[7]}]="iptables" - unset possible_package_names["nftables"] + unset possible_package_names["nft"] fi } @@ -5187,7 +5268,7 @@ function clean_env_vars() { debug_print - unset AIRGEDDON_AUTO_UPDATE AIRGEDDON_SKIP_INTRO AIRGEDDON_BASIC_COLORS AIRGEDDON_EXTENDED_COLORS AIRGEDDON_AUTO_CHANGE_LANGUAGE AIRGEDDON_SILENT_CHECKS AIRGEDDON_PRINT_HINTS AIRGEDDON_5GHZ_ENABLED AIRGEDDON_FORCE_IPTABLES AIRGEDDON_MDK_VERSION AIRGEDDON_DEVELOPMENT_MODE AIRGEDDON_DEBUG_MODE AIRGEDDON_WINDOWS_HANDLING + unset AIRGEDDON_AUTO_UPDATE AIRGEDDON_SKIP_INTRO AIRGEDDON_BASIC_COLORS AIRGEDDON_EXTENDED_COLORS AIRGEDDON_AUTO_CHANGE_LANGUAGE AIRGEDDON_SILENT_CHECKS AIRGEDDON_PRINT_HINTS AIRGEDDON_5GHZ_ENABLED AIRGEDDON_FORCE_IPTABLES AIRGEDDON_MDK_VERSION AIRGEDDON_PLUGINS_ENABLED AIRGEDDON_DEVELOPMENT_MODE AIRGEDDON_DEBUG_MODE AIRGEDDON_WINDOWS_HANDLING } #Clean temporary files @@ -5207,6 +5288,7 @@ function clean_tmpfiles() { rm -rf "${tmpdir}${hostapd_wpe_file}" > /dev/null 2>&1 rm -rf "${tmpdir}${hostapd_wpe_log}" > /dev/null 2>&1 rm -rf "${tmpdir}${dhcpd_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${hosts_file}" >/dev/null 2>&1 rm -rf "${tmpdir}${control_et_file}" > /dev/null 2>&1 rm -rf "${tmpdir}${control_enterprise_file}" > /dev/null 2>&1 rm -rf "${tmpdir}parsed_file" > /dev/null 2>&1 @@ -7105,12 +7187,7 @@ function manage_hashcat_pot() { language_strings "${language}" 234 "yellow" ask_yesno 235 "yes" if [ "${yesno}" = "y" ]; then - hashcat_potpath="${default_save_path}" - lastcharhashcat_potpath=${hashcat_potpath: -1} - if [ "${lastcharhashcat_potpath}" != "/" ]; then - hashcat_potpath="${hashcat_potpath}/" - fi local multiple_users=0 if [ "${1}" = "personal" ]; then @@ -7214,10 +7291,6 @@ function manage_jtr_pot() { ask_yesno 235 "yes" if [ "${yesno}" = "y" ]; then jtr_potpath="${default_save_path}" - lastcharjtr_potpath=${jtr_potpath: -1} - if [ "${lastcharjtr_potpath}" != "/" ]; then - jtr_potpath="${jtr_potpath}/" - fi local multiple_users=0 @@ -7308,10 +7381,6 @@ function manage_aircrack_pot() { ask_yesno 235 "yes" if [ "${yesno}" = "y" ]; then aircrack_potpath="${default_save_path}" - lastcharaircrack_potpath=${aircrack_potpath: -1} - if [ "${lastcharaircrack_potpath}" != "/" ]; then - aircrack_potpath="${aircrack_potpath}/" - fi aircrackpot_filename="aircrack-${bssid}.txt" aircrack_potpath="${aircrack_potpath}${aircrackpot_filename}" @@ -7365,12 +7434,7 @@ function manage_asleap_pot() { ask_yesno 235 "yes" if [ "${yesno}" = "y" ]; then local write_to_file=1 - asleap_potpath="${default_save_path}" - lastcharasleap_potpath=${asleap_potpath: -1} - if [ "${lastcharasleap_potpath}" != "/" ]; then - asleap_potpath="${asleap_potpath}/" - fi asleappot_filename="asleap_decrypted_password.txt" asleap_potpath="${asleap_potpath}${asleappot_filename}" @@ -7445,10 +7509,6 @@ function manage_ettercap_log() { if [ "${yesno}" = "y" ]; then ettercap_log=1 default_ettercap_logpath="${default_save_path}" - lastcharettercaplogpath=${default_ettercap_logpath: -1} - if [ "${lastcharettercaplogpath}" != "/" ]; then - ettercap_logpath="${default_ettercap_logpath}/" - fi default_ettercaplogfilename="evil_twin_captured_passwords-${essid}.txt" rm -rf "${tmpdir}${ettercap_file}"* > /dev/null 2>&1 tmp_ettercaplog="${tmpdir}${ettercap_file}" @@ -7470,10 +7530,6 @@ function manage_bettercap_log() { if [ "${yesno}" = "y" ]; then bettercap_log=1 default_bettercap_logpath="${default_save_path}" - lastcharbettercaplogpath=${default_bettercap_logpath: -1} - if [ "${lastcharbettercaplogpath}" != "/" ]; then - bettercap_logpath="${default_bettercap_logpath}/" - fi default_bettercaplogfilename="evil_twin_captured_passwords-bettercap-${essid}.txt" rm -rf "${tmpdir}${bettercap_file}"* > /dev/null 2>&1 tmp_bettercaplog="${tmpdir}${bettercap_file}" @@ -7490,11 +7546,8 @@ function manage_wps_log() { debug_print - wps_potpath=$(env | grep ^HOME | awk -F = '{print $2}') - lastcharwps_potpath=${wps_potpath: -1} - if [ "${lastcharwps_potpath}" != "/" ]; then - wps_potpath="${wps_potpath}/" - fi + wps_potpath="${user_homedir}" + if [ -z "${wps_essid}" ]; then wpspot_filename="wps_captured_key-${wps_bssid}.txt" else @@ -7513,11 +7566,7 @@ function manage_wep_log() { debug_print - wep_potpath=$(env | grep ^HOME | awk -F = '{print $2}') - lastcharwep_potpath=${wep_potpath: -1} - if [ "${lastcharwep_potpath}" != "/" ]; then - wep_potpath="${wep_potpath}/" - fi + wep_potpath="${user_homedir}" weppot_filename="wep_captured_key-${essid}.txt" wep_potpath="${wep_potpath}${weppot_filename}" @@ -7532,12 +7581,7 @@ function manage_enterprise_log() { debug_print - enterprise_potpath=$(env | grep ^HOME | awk -F = '{print $2}') - - lastcharenterprise_potpath=${enterprise_potpath: -1} - if [ "${lastcharenterprise_potpath}" != "/" ]; then - enterprise_potpath="${enterprise_potpath}/" - fi + enterprise_potpath="${user_homedir}" enterprisepot_suggested_dirname="enterprise_captured-${essid}" enterprise_potpath="${enterprise_potpath}${enterprisepot_suggested_dirname}/" @@ -7552,12 +7596,7 @@ function manage_enterprise_certs() { debug_print - enterprisecertspath=$(env | grep ^HOME | awk -F = '{print $2}') - - lastcharenterprisecertspath=${enterprisecertspath: -1} - if [ "${lastcharenterprisecertspath}" != "/" ]; then - enterprisecertspath="${enterprisecertspath}/" - fi + enterprisecertspath="${user_homedir}" enterprisecerts_suggested_dirname="enterprise_certs" enterprisecertspath="${enterprisecertspath}${enterprisecerts_suggested_dirname}/" @@ -7591,12 +7630,8 @@ function manage_captive_portal_log() { debug_print default_et_captive_portal_logpath="${default_save_path}" - lastcharetcaptiveportallogpath=${default_et_captive_portal_logpath: -1} - if [ "${lastcharetcaptiveportallogpath}" != "/" ]; then - et_captive_portal_logpath="${default_et_captive_portal_logpath}/" - fi default_et_captive_portallogfilename="evil_twin_captive_portal_password-${essid}.txt" - default_et_captive_portal_logpath="${et_captive_portal_logpath}${default_et_captive_portallogfilename}" + default_et_captive_portal_logpath="${default_et_captive_portal_logpath}${default_et_captive_portallogfilename}" validpath=1 while [[ "${validpath}" != "0" ]]; do read_path "et_captive_portallog" @@ -9866,11 +9901,22 @@ function launch_dns_blackhole() { debug_print recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g4_middleright_window} -T \"DNS\"" "${optional_tools_names[12]} -i ${interface}" "DNS" + + tmpfiles_toclean=1 + rm -rf "${tmpdir}${hosts_file}" > /dev/null 2>&1 + + { + echo -e "${et_ip_router}\t*.*" + echo -e "172.217.5.238\tgoogle.com" + echo -e "172.217.13.78\tclients3.google.com" + echo -e "172.217.13.78\tclients4.google.com" + } >> "${tmpdir}${hosts_file}" + + manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g4_middleright_window} -T \"DNS\"" "${optional_tools_names[12]} -i ${interface} -f \"${tmpdir}${hosts_file}\"" "DNS" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - get_tmux_process_id "${optional_tools_names[12]} -i ${interface}" + get_tmux_process_id "${optional_tools_names[12]} -i ${interface} -f \"${tmpdir}${hosts_file}\"" et_processes+=("${global_process_pid}") global_process_pid="" fi @@ -11041,10 +11087,6 @@ function capture_handshake_evil_twin() { if check_bssid_in_captured_file "${tmpdir}${standardhandshake_filename}" "silent"; then handshakepath="${default_save_path}" - lastcharhandshakepath=${handshakepath: -1} - if [ "${lastcharhandshakepath}" != "/" ]; then - handshakepath="${handshakepath}/" - fi handshakefilename="handshake-${bssid}.cap" handshakepath="${handshakepath}${handshakefilename}" @@ -11567,10 +11609,6 @@ function launch_handshake_capture() { if check_bssid_in_captured_file "${tmpdir}${standardhandshake_filename}" "silent"; then handshakepath="${default_save_path}" - lastcharhandshakepath=${handshakepath: -1} - if [ "${lastcharhandshakepath}" != "/" ]; then - handshakepath="${handshakepath}/" - fi handshakefilename="handshake-${bssid}.cap" handshakepath="${handshakepath}${handshakefilename}" @@ -13012,7 +13050,7 @@ function validate_wash_dualscan_version() { } #Set the script folder var if necessary -function set_script_folder_and_name() { +function set_script_paths() { debug_print @@ -13027,6 +13065,17 @@ function set_script_folder_and_name() { scriptfolder="${scriptfolder%/*}/" scriptname="${0##*/}" fi + + user_homedir=$(env | grep ^HOME | awk -F = '{print $2}' 2> /dev/null) + lastcharuser_homedir=${user_homedir: -1} + if [ "${lastcharuser_homedir}" != "/" ]; then + user_homedir="${user_homedir}/" + fi + + plugins_paths=( + "${scriptfolder}${plugins_dir}" + "${user_homedir}.airgeddon/${plugins_dir}" + ) } #Set the default directory for saving files @@ -13037,7 +13086,7 @@ function set_default_save_path() { if [ "${is_docker}" -eq 1 ]; then default_save_path="${docker_io_dir}" else - default_save_path=$(env | grep ^HOME | awk -F = '{print $2}') + default_save_path="${user_homedir}" fi } @@ -13512,11 +13561,6 @@ function general_checkings() { debug_print compatible=0 - distro="Unknown Linux" - - detect_distro_phase1 - detect_distro_phase2 - special_distro_features check_if_kill_needed if [ "${distro}" = "Unknown Linux" ]; then @@ -13535,7 +13579,6 @@ function general_checkings() { return fi - language_strings "${language}" 115 "read" exit_code=1 exit_script_option } @@ -13690,6 +13733,7 @@ function check_compatibility() { language_strings "${language}" 581 "blue" echo fi + language_strings "${language}" 115 "read" return fi @@ -13699,8 +13743,9 @@ function check_compatibility() { if [ ${optional_toolsok} -eq 0 ]; then echo language_strings "${language}" 219 "yellow" - echo + if [ ${fake_beef_found} -eq 1 ]; then + echo language_strings "${language}" 401 "red" echo fi @@ -13858,6 +13903,7 @@ function initialize_script_settings() { debug_print + distro="Unknown Linux" is_docker=0 exit_code=0 check_kill_needed=0 @@ -13879,7 +13925,7 @@ function initialize_script_settings() { pin_dbfile_checked=0 beef_found=0 fake_beef_found=0 - set_script_folder_and_name + set_script_paths http_proxy_set=0 hccapx_needed=0 xterm_ok=1 @@ -14040,43 +14086,43 @@ function recalculate_windows_sizes() { #shellcheck disable=SC2145 function env_vars_initialization() { - debug_print - ordered_options_env_vars=( - "AIRGEDDON_AUTO_UPDATE" - "AIRGEDDON_SKIP_INTRO" - "AIRGEDDON_BASIC_COLORS" - "AIRGEDDON_EXTENDED_COLORS" - "AIRGEDDON_AUTO_CHANGE_LANGUAGE" - "AIRGEDDON_SILENT_CHECKS" - "AIRGEDDON_PRINT_HINTS" - "AIRGEDDON_5GHZ_ENABLED" - "AIRGEDDON_FORCE_IPTABLES" - "AIRGEDDON_MDK_VERSION" - "AIRGEDDON_DEVELOPMENT_MODE" - "AIRGEDDON_DEBUG_MODE" - "AIRGEDDON_WINDOWS_HANDLING" + "AIRGEDDON_AUTO_UPDATE" #0 + "AIRGEDDON_SKIP_INTRO" #1 + "AIRGEDDON_BASIC_COLORS" #2 + "AIRGEDDON_EXTENDED_COLORS" #3 + "AIRGEDDON_AUTO_CHANGE_LANGUAGE" #4 + "AIRGEDDON_SILENT_CHECKS" #5 + "AIRGEDDON_PRINT_HINTS" #6 + "AIRGEDDON_5GHZ_ENABLED" #7 + "AIRGEDDON_FORCE_IPTABLES" #8 + "AIRGEDDON_MDK_VERSION" #9 + "AIRGEDDON_PLUGINS_ENABLED" #10 + "AIRGEDDON_DEVELOPMENT_MODE" #11 + "AIRGEDDON_DEBUG_MODE" #12 + "AIRGEDDON_WINDOWS_HANDLING" #13 ) declare -gA nonboolean_options_env_vars - nonboolean_options_env_vars["${ordered_options_env_vars[9]},default_value"]="mdk4" - nonboolean_options_env_vars["${ordered_options_env_vars[12]},default_value"]="xterm" + nonboolean_options_env_vars["${ordered_options_env_vars[9]},default_value"]="mdk4" #mdk_version + nonboolean_options_env_vars["${ordered_options_env_vars[13]},default_value"]="xterm" #windows_handling nonboolean_options_env_vars["${ordered_options_env_vars[9]},rcfile_text"]="#Available values: mdk3, mdk4 - Define which mdk version is going to be used - Default value ${nonboolean_options_env_vars[${ordered_options_env_vars[9]},'default_value']}" - nonboolean_options_env_vars["${ordered_options_env_vars[12]},rcfile_text"]="#Available values: xterm, tmux - Define the needed tool to be used for windows handling - Default value ${nonboolean_options_env_vars[${ordered_options_env_vars[12]},'default_value']}" + nonboolean_options_env_vars["${ordered_options_env_vars[13]},rcfile_text"]="#Available values: xterm, tmux - Define the needed tool to be used for windows handling - Default value ${nonboolean_options_env_vars[${ordered_options_env_vars[13]},'default_value']}" declare -gA boolean_options_env_vars - boolean_options_env_vars["${ordered_options_env_vars[0]},default_value"]="true" - boolean_options_env_vars["${ordered_options_env_vars[1]},default_value"]="false" - boolean_options_env_vars["${ordered_options_env_vars[2]},default_value"]="true" - boolean_options_env_vars["${ordered_options_env_vars[3]},default_value"]="true" - boolean_options_env_vars["${ordered_options_env_vars[4]},default_value"]="true" - boolean_options_env_vars["${ordered_options_env_vars[5]},default_value"]="false" - boolean_options_env_vars["${ordered_options_env_vars[6]},default_value"]="true" - boolean_options_env_vars["${ordered_options_env_vars[7]},default_value"]="true" - boolean_options_env_vars["${ordered_options_env_vars[8]},default_value"]="false" - boolean_options_env_vars["${ordered_options_env_vars[10]},default_value"]="false" - boolean_options_env_vars["${ordered_options_env_vars[11]},default_value"]="false" + boolean_options_env_vars["${ordered_options_env_vars[0]},default_value"]="true" #auto_update + boolean_options_env_vars["${ordered_options_env_vars[1]},default_value"]="false" #skip_intro + boolean_options_env_vars["${ordered_options_env_vars[2]},default_value"]="true" #basic_colors + boolean_options_env_vars["${ordered_options_env_vars[3]},default_value"]="true" #extended_colors + boolean_options_env_vars["${ordered_options_env_vars[4]},default_value"]="true" #auto_change_language + boolean_options_env_vars["${ordered_options_env_vars[5]},default_value"]="false" #silent_checks + boolean_options_env_vars["${ordered_options_env_vars[6]},default_value"]="true" #print_hints + boolean_options_env_vars["${ordered_options_env_vars[7]},default_value"]="true" #5ghz_enabled + boolean_options_env_vars["${ordered_options_env_vars[8]},default_value"]="false" #force_iptables + boolean_options_env_vars["${ordered_options_env_vars[10]},default_value"]="true" #plugins_enabled + boolean_options_env_vars["${ordered_options_env_vars[11]},default_value"]="false" #development_mode + boolean_options_env_vars["${ordered_options_env_vars[12]},default_value"]="false" #debug_mode boolean_options_env_vars["${ordered_options_env_vars[0]},rcfile_text"]="#Enabled true / Disabled false - Auto update feature (it has no effect on development mode) - Default value ${boolean_options_env_vars[${ordered_options_env_vars[0]},'default_value']}" boolean_options_env_vars["${ordered_options_env_vars[1]},rcfile_text"]="#Enabled true / Disabled false - Skip intro (it has no effect on development mode) - Default value ${boolean_options_env_vars[${ordered_options_env_vars[1]},'default_value']}" @@ -14087,8 +14133,9 @@ function env_vars_initialization() { boolean_options_env_vars["${ordered_options_env_vars[6]},rcfile_text"]="#Enabled true / Disabled false - Print help hints on menus - Default value ${boolean_options_env_vars[${ordered_options_env_vars[6]},'default_value']}" boolean_options_env_vars["${ordered_options_env_vars[7]},rcfile_text"]="#Enabled true / Disabled false - Enable 5Ghz support (it has no effect if your cards are not 5Ghz compatible cards) - Default value ${boolean_options_env_vars[${ordered_options_env_vars[7]},'default_value']}" boolean_options_env_vars["${ordered_options_env_vars[8]},rcfile_text"]="#Enabled true / Disabled false - Force to use iptables instead of nftables (it has no effect if nftables are not present) - Default value ${boolean_options_env_vars[${ordered_options_env_vars[8]},'default_value']}" - boolean_options_env_vars["${ordered_options_env_vars[10]},rcfile_text"]="#Enabled true / Disabled false - Development mode for faster development skipping intro and all initial checks - Default value ${boolean_options_env_vars[${ordered_options_env_vars[10]},'default_value']}" - boolean_options_env_vars["${ordered_options_env_vars[11]},rcfile_text"]="#Enabled true / Disabled false - Debug mode for development printing debug information - Default value ${boolean_options_env_vars[${ordered_options_env_vars[11]},'default_value']}" + boolean_options_env_vars["${ordered_options_env_vars[10]},rcfile_text"]="#Enabled true / Disabled false - Enable plugins system - Default value ${boolean_options_env_vars[${ordered_options_env_vars[10]},'default_value']}" + boolean_options_env_vars["${ordered_options_env_vars[11]},rcfile_text"]="#Enabled true / Disabled false - Development mode for faster development skipping intro and all initial checks - Default value ${boolean_options_env_vars[${ordered_options_env_vars[11]},'default_value']}" + boolean_options_env_vars["${ordered_options_env_vars[12]},rcfile_text"]="#Enabled true / Disabled false - Debug mode for development printing debug information - Default value ${boolean_options_env_vars[${ordered_options_env_vars[12]},'default_value']}" readarray -t ENV_VARS_ELEMENTS < <(printf %s\\n "${!nonboolean_options_env_vars[@]} ${!boolean_options_env_vars[@]}" | cut -d, -f1 | sort -u) readarray -t ENV_BOOLEAN_VARS_ELEMENTS < <(printf %s\\n "${!boolean_options_env_vars[@]}" | cut -d, -f1 | sort -u) @@ -14514,114 +14561,152 @@ function manage_output() { esac } -#Script starting point -function main() { +#Plugins initialization, parsing and validations handling +function parse_plugins() { - initialize_script_settings - initialize_colors - env_vars_initialization + plugins_enabled=() - debug_print + shopt -s nullglob + for path in "${plugins_paths[@]}"; do + if [ -d "${path}" ]; then + for file in "${path}"*.sh; do + if [ "${file}" != "${path}plugin_template.sh" ]; then - remap_colors + plugin_short_name="${file##*/}" + plugin_short_name="${plugin_short_name%.sh*}" - clear - current_menu="pre_main_menu" - docker_detection - set_default_save_path + #shellcheck source=./plugins/missing_dependencies.sh + source "${file}" + if [ ${plugin_enabled} -eq 1 ]; then + validate_plugin_requirements + plugin_validation_result=$? + if [ "${plugin_validation_result}" -eq 0 ]; then + plugins_enabled+=("${plugin_short_name}") + fi + fi + fi + done + fi + done + shopt -u nullglob +} - if "${AIRGEDDON_AUTO_CHANGE_LANGUAGE:-true}"; then - autodetect_language +#Validate if plugin meets the needed requirements +function validate_plugin_requirements() { + + if [ -n "${plugin_minimum_ag_affected_version}" ]; then + if compare_floats_greater_than "${plugin_minimum_ag_affected_version}" "${airgeddon_version}"; then + return 1 + fi fi - check_language_strings + if [ -n "${plugin_maximum_ag_affected_version}" ]; then + if compare_floats_greater_than "${airgeddon_version}" "${plugin_maximum_ag_affected_version}"; then + return 1 + fi + fi - if [ ${tmux_error} -eq 1 ]; then - language_strings "${language}" 86 "title" - echo - language_strings "${language}" 621 "yellow" - language_strings "${language}" 115 "read" - create_tmux_session "${session_name}" "false" + if [ "${plugin_distros_supported[0]}" != "*" ]; then - exit_code=1 - exit ${exit_code} - fi + for item in "${plugin_distros_supported[@]}"; do + if [ "${item}" = "${distro}" ]; then + return 0 + fi + done - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - check_xwindow_system - detect_screen_resolution + return 2 fi - iptables_nftables_detection - set_mdk_version - dependencies_modifications - set_possible_aliases - initialize_optional_tools_values + return 0 +} - if ! "${AIRGEDDON_DEVELOPMENT_MODE:-false}"; then - if ! "${AIRGEDDON_SKIP_INTRO:-false}"; then - language_strings "${language}" 86 "title" - language_strings "${language}" 6 "blue" - echo - if check_window_size_for_intro; then - print_intro - else - language_strings "${language}" 228 "green" +#Apply modifications to functions with defined plugins changes +#shellcheck disable=SC2086,SC2001 +function apply_plugin_functions_rewriting() { + + declare -A function_hooks + + local original_function + local action + + for plugin in "${plugins_enabled[@]}"; do + for current_function in $(compgen -A function "${plugin}_" | grep -e "[override|prehook|posthook]"); do + original_function=$(echo ${current_function} | sed "s/^${plugin}_\(override\)*\(prehook\)*\(posthook\)*_//") + action=$(echo ${current_function} | sed "s/^${plugin}_\(override\)*\(prehook\)*\(posthook\)*_.*$/\1\2\3/") + + if ! declare -F ${original_function} &>/dev/null; then echo - language_strings "${language}" 395 "yellow" - sleep 3 + language_strings "${language}" 659 "red" + exit_code=1 + exit_script_option fi - fi - clear - language_strings "${language}" 86 "title" - language_strings "${language}" 7 "pink" - language_strings "${language}" 114 "pink" + if printf '%s\n' "${!function_hooks[@]}" | grep -x -q "${original_function},${action}"; then + echo + language_strings "${language}" 661 "red" + exit_code=1 + exit_script_option + fi - if [ ${autochanged_language} -eq 1 ]; then - echo - language_strings "${language}" 2 "yellow" - fi + if ! printf '%s\n' "${hooked_functions[@]}" | grep -x -q "${original_function}"; then + hooked_functions+=("${original_function}") + fi + function_hooks[${original_function},${action}]=${plugin} + done + done - check_bash_version - check_root_permissions + local function_modifications + local arguments + local actions=("prehook" "override" "posthook") - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - echo - if [[ ${resolution_detected} -eq 1 ]] && [[ "${xterm_ok}" -eq 1 ]]; then - language_strings "${language}" 294 "blue" + for current_function in "${hooked_functions[@]}"; do + arguments="${current_function} " + function_modifications=$(declare -f ${current_function} | sed "1c${current_function}_original ()") + + for action in "${actions[@]}"; do + if printf '%s\n' "${!function_hooks[@]}" | grep -x -q "${current_function},${action}"; then + arguments+="true " + function_name="${function_hooks[${current_function},${action}]}_${action}_${current_function}" + function_modifications+=$'\n'"$(declare -f ${function_name} | sed "1c${current_function}_${action} ()")" else - if [ "${xterm_ok}" -eq 0 ]; then - language_strings "${language}" 476 "red" - exit_code=1 - exit_script_option - else - language_strings "${language}" 295 "red" - echo - language_strings "${language}" 300 "yellow" - fi + arguments+="false " fi - fi + done - echo - language_strings "${language}" 8 "blue" - print_known_distros - echo - language_strings "${language}" 9 "blue" - general_checkings - language_strings "${language}" 115 "read" + arguments+="\"\${@}\"" + function_modifications+=$'\n'"${current_function} () {"$'\n'" plugin_function_call_handler ${arguments}"$'\n'"}" + eval "${function_modifications}" + done +} - airmonzc_security_check - check_update_tools +#Plugins function handler in charge of managing prehook, posthooks and override function calls +function plugin_function_call_handler() { + + local function_name=${1} + local prehook_enabled=${2} + local override_enabled=${3} + local posthook_enabled=${4} + local funtion_call="${function_name}_original" + + if [ "${prehook_enabled}" = true ]; then + local prehook_funcion_name="${function_name}_prehook" + ${prehook_funcion_name} "${@:5:${#}}" fi - print_configuration_vars_issues - initialize_extended_colorized_output - set_windows_sizes - select_interface - initialize_menu_options_dependencies - remove_warnings - main_menu + if [ "${override_enabled}" = true ]; then + funtion_call="${function_name}_override" + fi + + ${funtion_call} "${@:5:${#}}" + + local result=${?} + if [ "${posthook_enabled}" = true ]; then + local posthook_funcion_name="${function_name}_posthook" + ${posthook_funcion_name} ${result} + result=${?} + fi + + return ${result} } #Avoid the problem of using airmon-zc without ethtool or lspci installed @@ -15065,6 +15150,122 @@ function echo_white() { last_echo "${1}" "${white_color}" } +#Script starting point +function main() { + + initialize_script_settings + initialize_colors + env_vars_initialization + detect_distro_phase1 + detect_distro_phase2 + special_distro_features + + if "${AIRGEDDON_AUTO_CHANGE_LANGUAGE:-true}"; then + autodetect_language + fi + + check_language_strings + iptables_nftables_detection + set_mdk_version + dependencies_modifications + + if "${AIRGEDDON_PLUGINS_ENABLED:-true}"; then + parse_plugins + apply_plugin_functions_rewriting + fi + + remap_colors + + clear + current_menu="pre_main_menu" + docker_detection + set_default_save_path + + if [ ${tmux_error} -eq 1 ]; then + language_strings "${language}" 86 "title" + echo + language_strings "${language}" 621 "yellow" + language_strings "${language}" 115 "read" + create_tmux_session "${session_name}" "false" + + exit_code=1 + exit ${exit_code} + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + check_xwindow_system + detect_screen_resolution + fi + + set_possible_aliases + initialize_optional_tools_values + + if ! "${AIRGEDDON_DEVELOPMENT_MODE:-false}"; then + if ! "${AIRGEDDON_SKIP_INTRO:-false}"; then + language_strings "${language}" 86 "title" + language_strings "${language}" 6 "blue" + echo + if check_window_size_for_intro; then + print_intro + else + language_strings "${language}" 228 "green" + echo + language_strings "${language}" 395 "yellow" + sleep 3 + fi + fi + + clear + language_strings "${language}" 86 "title" + language_strings "${language}" 7 "pink" + language_strings "${language}" 114 "pink" + + if [ ${autochanged_language} -eq 1 ]; then + echo + language_strings "${language}" 2 "yellow" + fi + + check_bash_version + check_root_permissions + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + echo + if [[ ${resolution_detected} -eq 1 ]] && [[ "${xterm_ok}" -eq 1 ]]; then + language_strings "${language}" 294 "blue" + else + if [ "${xterm_ok}" -eq 0 ]; then + language_strings "${language}" 476 "red" + exit_code=1 + exit_script_option + else + language_strings "${language}" 295 "red" + echo + language_strings "${language}" 300 "yellow" + fi + fi + fi + + echo + language_strings "${language}" 8 "blue" + print_known_distros + echo + language_strings "${language}" 9 "blue" + general_checkings + language_strings "${language}" 115 "read" + + airmonzc_security_check + check_update_tools + fi + + print_configuration_vars_issues + initialize_extended_colorized_output + set_windows_sizes + select_interface + initialize_menu_options_dependencies + remove_warnings + main_menu +} + #Script starts to executing stuff from this point, traps and then main function for f in SIGINT SIGHUP INT SIGTSTP; do trap_cmd="trap \"capture_traps ${f}\" \"${f}\"" diff --git a/binaries/arch/airgeddon-git-10.0-1-any.pkg.tar.xz b/binaries/arch/airgeddon-git-10.0-1-any.pkg.tar.xz new file mode 100644 index 000000000..8df4cff2a Binary files /dev/null and b/binaries/arch/airgeddon-git-10.0-1-any.pkg.tar.xz differ diff --git a/binaries/arch/airgeddon-git-9.23-1-any.pkg.tar.tar.xz b/binaries/arch/airgeddon-git-9.23-1-any.pkg.tar.tar.xz deleted file mode 100644 index d849cb458..000000000 Binary files a/binaries/arch/airgeddon-git-9.23-1-any.pkg.tar.tar.xz and /dev/null differ diff --git a/binaries/kali/airgeddon_10.0-1_all.deb b/binaries/kali/airgeddon_10.0-1_all.deb new file mode 100644 index 000000000..0023b5b08 Binary files /dev/null and b/binaries/kali/airgeddon_10.0-1_all.deb differ diff --git a/binaries/kali/airgeddon_9.23-1_all.deb b/binaries/kali/airgeddon_9.23-1_all.deb deleted file mode 100644 index 52cc460e5..000000000 Binary files a/binaries/kali/airgeddon_9.23-1_all.deb and /dev/null differ diff --git a/imgs/wiki/airgeddon_discord.png b/imgs/wiki/airgeddon_discord.png new file mode 100644 index 000000000..ba76971d8 Binary files /dev/null and b/imgs/wiki/airgeddon_discord.png differ diff --git a/imgs/wiki/airgeddon_scrs1.png b/imgs/wiki/airgeddon_scrs1.png index 0ae9dcd6e..e064a632d 100644 Binary files a/imgs/wiki/airgeddon_scrs1.png and b/imgs/wiki/airgeddon_scrs1.png differ diff --git a/imgs/wiki/airgeddon_scrs10.png b/imgs/wiki/airgeddon_scrs10.png index dc7526e31..97981c8b7 100644 Binary files a/imgs/wiki/airgeddon_scrs10.png and b/imgs/wiki/airgeddon_scrs10.png differ diff --git a/imgs/wiki/airgeddon_scrs2.png b/imgs/wiki/airgeddon_scrs2.png index 2725f34ac..7c986e4fb 100644 Binary files a/imgs/wiki/airgeddon_scrs2.png and b/imgs/wiki/airgeddon_scrs2.png differ diff --git a/known_pins.db b/known_pins.db index 5a056fb7f..7d14a39fb 100644 --- a/known_pins.db +++ b/known_pins.db @@ -2,7 +2,6 @@ #Title........: known_pins.db #Description..: This is a WPS PIN database for routers that generate generic passwords. #Author.......: v1s1t0r -#Date.........: 20190918 #Bash Version.: 4.2 or later #Set PIN database. Keys are the first 6 bssid digits and are ordered diff --git a/language_strings.sh b/language_strings.sh index ab79bebe3..04c34e575 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -2,7 +2,6 @@ #Title........: language_strings.sh #Description..: All the translated strings that airgeddon uses are located here. #Author.......: v1s1t0r -#Date.........: 20190927 #Bash Version.: 4.2 or later #Set language_strings file version @@ -11,7 +10,7 @@ function set_language_strings_version() { debug_print - language_strings_version="9.23-1" + language_strings_version="10.0-1" } #Set different language text strings @@ -29,6 +28,10 @@ function language_strings() { declare -gA interfaces_band_info fi + if [[ "$(declare -p function_hooks 2> /dev/null)" != "declare -A"* ]]; then + declare -gA function_hooks + fi + declare -A unknown_chipset unknown_chipset["ENGLISH"]="Unknown" unknown_chipset["SPANISH"]="Desconocido" @@ -111,6 +114,19 @@ function language_strings() { disabled_text["GERMAN"]="Deaktiviert" disabled_text["TURKISH"]="Aktif Değil" + declare -gA reboot_required + reboot_required["ENGLISH"]="${red_color_slim} (reboot required)${normal_color}" + reboot_required["SPANISH"]="${red_color_slim} (reinicio requerido)${normal_color}" + reboot_required["FRENCH"]="${red_color_slim} (redémarrage requis)${normal_color}" + reboot_required["CATALAN"]="${red_color_slim} (reinici requerit)${normal_color}" + reboot_required["PORTUGUESE"]="${red_color_slim} (é necessário reiniciar)${normal_color}" + reboot_required["RUSSIAN"]="${red_color_slim} (требуется перезагрузка)${normal_color}" + reboot_required["GREEK"]="${red_color_slim} (απαιτείται επανεκκίνηση)${normal_color}" + reboot_required["ITALIAN"]="${red_color_slim} (riavvio richiesto)${normal_color}" + reboot_required["POLISH"]="${pending_of_translation} ${red_color_slim} (wymagane ponowne uruchomienie)${normal_color}" + reboot_required["GERMAN"]="${red_color_slim} (Neustart erforderlich)${normal_color}" + reboot_required["TURKISH"]="${red_color_slim} (yeniden başlatma gerekli)${normal_color}" + declare -gA et_misc_texts et_misc_texts["ENGLISH",0]="Evil Twin AP Info" et_misc_texts["SPANISH",0]="Info Evil Twin AP" @@ -852,7 +868,7 @@ function language_strings() { footer_texts["GERMAN",1]="Wenn Ihnen das Skript gefallen hat und Sie es nützlich fanden, können Sie das Projekt mit einer Spende unterstützen. Durch PayPal (${mail}) oder durch Senden eines Bruchteils von Kryptowährung (Bitcoin, Ethereum, Litecoin...). Jeder kleine Betrag (1, 2, 5 $/€) wird gut angenommen. Weitere Informationen und direkte Links dazu finden Sie unter: ${urlgithub_wiki}/Contributing" footer_texts["TURKISH",1]="Eğer bu yazılımı kullanışlı ve eğlenceli bulduysanız, bize bağış yaparak destekte bulunabilirsiniz. PayPal üzerinden (${mail}) ya da herhangi bir kripto para birimi ile (Bitcoin, Ethereum, Litecoin...) Yolladığınız miktarın küçüklüğü fark etmez (1, 2, 5 $/€). Daha fazla fazla bilgi için linkler: ${urlgithub_wiki}/Contributing" - declare -A arr + declare -gA arr arr["ENGLISH",0]="This interface ${current_iface_on_messages} is already in managed mode" arr["SPANISH",0]="Esta interfaz ${current_iface_on_messages} ya está en modo managed" arr["FRENCH",0]="L'interface ${current_iface_on_messages} est déjà en mode managed" @@ -1874,17 +1890,17 @@ function language_strings() { arr["GERMAN",84]="Enterprise-Angriffsmenü" arr["TURKISH",84]="Enterprise saldırı menüsü" - arr["ENGLISH",85]="Send me bugs or suggestions to ${normal_color}${mail}" - arr["SPANISH",85]="Enviadme errores o sugerencias a ${normal_color}${mail}" - arr["FRENCH",85]="Envoyer des erreurs ou des suggestions à ${normal_color}${mail}" - arr["CATALAN",85]="Envieu-me errorrs o suggeriments a ${normal_color}${mail}" - arr["PORTUGUESE",85]="Envie erros ou sugestões para ${normal_color}${mail}" - arr["RUSSIAN",85]="Отправляйте ошибки и предложения мне на почту ${normal_color}${mail}" - arr["GREEK",85]="Στείλτε μου αναφορές για bugs ή συστάσεις στο ${normal_color}${mail}" - arr["ITALIAN",85]="Inviatemi errori o suggerimenti a ${normal_color}${mail}" - arr["POLISH",85]="Wyślij mi błędy lub sugestie na ${normal_color}${mail}" - arr["GERMAN",85]="Senden Sie mir Fehler oder Vorschläge zu ${normal_color}${mail}" - arr["TURKISH",85]="Hataları ve önerileri bize yollayın ${normal_color}${mail}" + arr["ENGLISH",85]="Contact us by mail, IRC, Discord, etc. More info here: ${normal_color}${urlgithub_wiki}/Contact" + arr["SPANISH",85]="Contáctanos por mail, IRC, Discord, etc. Más información aquí: ${normal_color}${urlgithub_wiki}/Contact" + arr["FRENCH",85]="Contactez-nous par e-mail, IRC, Discord, etc. Plus d'infos ici: ${normal_color}${urlgithub_wiki}/Contact" + arr["CATALAN",85]="Poseu-vos en contacte amb nosaltres per correu, IRC, Discord, etc. Més informació ací: ${normal_color}${urlgithub_wiki}/Contact" + arr["PORTUGUESE",85]="Contacte-nos por e-mail, IRC, Discord, etc. Mais informações em: ${normal_color}${urlgithub_wiki}/Contact" + arr["RUSSIAN",85]="Для связи с нами вы можете использовать электронную почту, IRC, Discord, и прочее. Больше информации здесь: ${normal_color}${urlgithub_wiki}/Contact" + arr["GREEK",85]="Επικοινωνήστε μαζί μας μέσω mail, IRC, Discord, κλπ. Περισσότερες πληροφορίες εδώ: ${normal_color}${urlgithub_wiki}/Contact" + arr["ITALIAN",85]="Contattaci via e-mail, IRC, Discord, ecc. Maggiori informazioni qui: ${normal_color}${urlgithub_wiki}/Contact" + arr["POLISH",85]="${pending_of_translation} Skontaktować się z nami za pośrednictwem poczty, IRC, Discord itp Więcej informacji tutaj: ${normal_color}${urlgithub_wiki}/Contact" + arr["GERMAN",85]="Kontaktieren Sie uns per E-Mail, IRC, Discord, etc. Mehr Infos hier: ${normal_color}${urlgithub_wiki}/Contact" + arr["TURKISH",85]="E-posta, IRC, Discord, vb. ile ile bize ulaşın. Daha fazla bilgi için: ${normal_color}${urlgithub_wiki}/Contact" arr["ENGLISH",86]="Welcome" arr["SPANISH",86]="Bienvenid@" @@ -6218,17 +6234,17 @@ function language_strings() { arr["GERMAN",446]="0. Zum Optionsmenü zurückkehren" arr["TURKISH",446]="0. Ayarlar menüsüne geri dön" - arr["ENGLISH",447]="12. Set permanently airgeddon's language to the current one" - arr["SPANISH",447]="12. Cambiar permanentemente el idioma de airgeddon al actual" - arr["FRENCH",447]="12. Etablir comme langue permanente d'airgeddon celle utilisée actuellement" - arr["CATALAN",447]="12. Canviar permanentment l'idioma de airgeddon a l'actual" - arr["PORTUGUESE",447]="12. Alterar permanentemente o idioma do airgeddon para o atual" - arr["RUSSIAN",447]="12. Сделать текущий язык airgeddon постоянным" - arr["GREEK",447]="12. Θέστε μόνιμα την τρέχουσα γλώσσα του airgeddon ως προεπιλεγμένη" - arr["ITALIAN",447]="12. Modificare in modo permanente la lingua di airgeddon a quella attuale" - arr["POLISH",447]="12. Trwale ustaw język airgeddon na aktualny" - arr["GERMAN",447]="12. Ändern Sie dauerhaft die Sprache von airgeddon zur aktuellen Sprache" - arr["TURKISH",447]="12. Sürekli olarak airgeddon'un dilini geçerli olana ayarla" + arr["ENGLISH",447]="13. Set permanently airgeddon's language to the current one" + arr["SPANISH",447]="13. Cambiar permanentemente el idioma de airgeddon al actual" + arr["FRENCH",447]="13. Etablir comme langue permanente d'airgeddon celle utilisée actuellement" + arr["CATALAN",447]="13. Canviar permanentment l'idioma de airgeddon a l'actual" + arr["PORTUGUESE",447]="13. Alterar permanentemente o idioma do airgeddon para o atual" + arr["RUSSIAN",447]="13. Сделать текущий язык airgeddon постоянным" + arr["GREEK",447]="13. Θέστε μόνιμα την τρέχουσα γλώσσα του airgeddon ως προεπιλεγμένη" + arr["ITALIAN",447]="13. Modificare in modo permanente la lingua di airgeddon a quella attuale" + arr["POLISH",447]="13. Trwale ustaw język airgeddon na aktualny" + arr["GERMAN",447]="13. Ändern Sie dauerhaft die Sprache von airgeddon zur aktuellen Sprache" + arr["TURKISH",447]="13. Sürekli olarak airgeddon'un dilini geçerli olana ayarla" arr["ENGLISH",448]="If you installed airgeddon from a repository, you should not enable automatic updates. airgeddon will be updated when there is a new version in the repository" arr["SPANISH",448]="Si instalaste airgeddon desde un repositorio, no deberías activar la actualización automática. airgeddon se actualizará cuando haya una nueva versión en el repositorio" @@ -8270,41 +8286,41 @@ function language_strings() { arr["GERMAN",617]="10. Ändern Sie die Fensterverwaltung zu xterm" arr["TURKISH",617]="10. Pencere yönetimi yöntemini xterm olarak değiştirin" - arr["ENGLISH",618]="Windows handling: ${pink_color}xterm${normal_color}" - arr["SPANISH",618]="Manejo de ventanas: ${pink_color}xterm${normal_color}" - arr["FRENCH",618]="Gestion des fenêtres: ${pink_color}xterm${normal_color}" - arr["CATALAN",618]="Maneig de finestres: ${pink_color}xterm${normal_color}" - arr["PORTUGUESE",618]="Gerenciador de janelas: ${pink_color}xterm${normal_color}" - arr["RUSSIAN",618]="Управление окнами: ${pink_color}xterm${normal_color}" - arr["GREEK",618]="Διαχείριση παραθύρων: ${pink_color}xterm${normal_color}" - arr["ITALIAN",618]="Gestione delle finestre: ${pink_color}xterm${normal_color}" - arr["POLISH",618]="${pending_of_translation} Zarządzanie oknami: ${pink_color}xterm${normal_color}" - arr["GERMAN",618]="Fensterverwaltung: ${pink_color}xterm${normal_color}" - arr["TURKISH",618]="Pencere yönetimi: ${pink_color}xterm${normal_color}" - - arr["ENGLISH",619]="Windows handling: ${pink_color}tmux${normal_color}" - arr["SPANISH",619]="Manejo de ventanas: ${pink_color}tmux${normal_color}" - arr["FRENCH",619]="Gestion des fenêtres: ${pink_color}tmux${normal_color}" - arr["CATALAN",619]="Maneig de finestres: ${pink_color}tmux${normal_color}" - arr["PORTUGUESE",619]="Gerenciador de janelas: ${pink_color}tmux${normal_color}" - arr["RUSSIAN",619]="Управление окнами: ${pink_color}tmux${normal_color}" - arr["GREEK",619]="Διαχείριση παραθύρων: ${pink_color}tmux${normal_color}" - arr["ITALIAN",619]="Gestione delle finestre: ${pink_color}tmux${normal_color}" - arr["POLISH",619]="${pending_of_translation} Zarządzanie oknami: ${pink_color}tmux${normal_color}" - arr["GERMAN",619]="Fensterverwaltung: ${pink_color}tmux${normal_color}" - arr["TURKISH",619]="Pencere yönetimi: ${pink_color}tmux${normal_color}" - - arr["ENGLISH",620]="The windows handling method has been modified in the configuration file. Restart the script in order to make the changes to take effect" - arr["SPANISH",620]="Se ha modificado en el fichero de configuración el método de gestión de ventanas. Reinicia el script para que los cambios tengan efecto" - arr["FRENCH",620]="La méthode de gestion des fenêtres a été modifiée dans le fichier de configuration. Redémarrez le script pour que les modifications prennent effet" - arr["CATALAN",620]="S'ha modificat en el fitxer de configuració el mètode de gestió de finestres. Reinicia el script perquè els canvis tinguin efecte" - arr["PORTUGUESE",620]="O gerenciador de janelas foi modificado no arquivo de configuração. Reinicie o script para que as alterações entrem em vigor" - arr["RUSSIAN",620]="Метод управления окнами был изменён в файле конфигурации. Перезапустите скрипт, чтобы изменения вступили в силу" - arr["GREEK",620]="Η μέθοδος διαχείρισης παραθύρων έχει τροποποιηθεί στο αρχείο ρυθμίσεων. Κάντε επανεκκίνηση του script για να εφαρμοστούν οι αλλαγές" - arr["ITALIAN",620]="Il metodo di gestione delle finestre è stato modificato nel file di configurazione. Riavviare lo script per rendere effettive le modifiche" - arr["POLISH",620]="${pending_of_translation} Metoda zarządzania oknami została zmodyfikowana w pliku konfiguracyjnym. Uruchom ponownie skrypt, aby zmiany odniosły skutek" - arr["GERMAN",620]="Die Fensterverwaltungsmethode wurde in der Konfigurationsdatei geändert. Starten Sie das Skript neu, damit die Änderungen wirksam werden" - arr["TURKISH",620]="Pencere yönetim yöntemi, yapılandırma dosyasında değiştirildi. Değişikliklerin etkili olması için betiği yeniden başlatın" + arr["ENGLISH",618]="Current windows handling: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["SPANISH",618]="Manejo de ventanas actual: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["FRENCH",618]="Gestion actuelle des fenêtres: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["CATALAN",618]="Maneig de finestres actual: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["PORTUGUESE",618]="Gerenciador de janelas atual: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["RUSSIAN",618]="Текущее управление окнами: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["GREEK",618]="Τρέχουσα διαχείριση παραθύρων: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["ITALIAN",618]="Gestione delle finestre attuale: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["POLISH",618]="${pending_of_translation} Bieżące zarządzanie oknami: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["GERMAN",618]="Aktuelle Fensterverwaltung: ${pink_color}xterm${normal_color}${reboot_required_text}" + arr["TURKISH",618]="Mevcut pencere yönetimi: ${pink_color}xterm${normal_color}${reboot_required_text}" + + arr["ENGLISH",619]="Current windows handling: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["SPANISH",619]="Manejo de ventanas actual: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["FRENCH",619]="Gestion actuelle des fenêtres: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["CATALAN",619]="Maneig de finestres actual: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["PORTUGUESE",619]="Gerenciador de janelas atual: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["RUSSIAN",619]="Текущее управление окнами: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["GREEK",619]="Τρέχουσα διαχείριση παραθύρων: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["ITALIAN",619]="Gestione delle finestre attuale: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["POLISH",619]="${pending_of_translation} Bieżące zarządzanie oknami: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["GERMAN",619]="Aktuelle Fensterverwaltung: ${pink_color}tmux${normal_color}${reboot_required_text}" + arr["TURKISH",619]="Mevcut pencere yönetimi: ${pink_color}tmux${normal_color}${reboot_required_text}" + + arr["ENGLISH",620]="The option has been modified in the configuration file. Restart the script in order to make the changes to take effect" + arr["SPANISH",620]="Se ha modificado la opción en el fichero de configuración. Reinicia el script para que los cambios tengan efecto" + arr["FRENCH",620]="On a changé l'option dans le fichier de configuration. Redémarrez le script pour que les modifications prennent effet" + arr["CATALAN",620]="S'ha modificat l'opció en el fitxer de configuració. Reinicia el script perquè els canvis tinguin efecte" + arr["PORTUGUESE",620]="O arquivo de configuração foi modificado. Reinicie o script para que as alterações entrem em vigor" + arr["RUSSIAN",620]="Эта опция изменила параметр в файле конфигурации. Перезапустите данный скрипт для того, чтобы изменения вступили в силу" + arr["GREEK",620]="Η επιλογή στο configuration file τροποποιήθηκε. Επανεκκινήστε το script για να τεθούν οι αλλαγές σε ισχύ" + arr["ITALIAN",620]="É stata cambiata l'opzione nel file di configurazione. Riavviare lo script affinché le modifiche abbiano effetto" + arr["POLISH",620]="${pending_of_translation} To zmieniło opcję w pliku konfiguracyjnym. Ponownie uruchom skrypt, aby zmiany odniosły skutek" + arr["GERMAN",620]="Es änderte sich die Option in der Konfigurationsdatei. Starten Sie das Skript neu, damit die Änderungen wirksam werden" + arr["TURKISH",620]="Yapılandırma dosyasında bu seçenek değiştirildi. Değişikliklerin etkili olması için script'i yeniden başlatın" arr["ENGLISH",621]="It's not possible to run airgeddon in the current tmux session. This session will be send to background and a new tmux session will be created for launching airgeddon" arr["SPANISH",621]="No es posible ejecutar airgeddon en la sesión tmux actual. Esta sesión será enviada a segundo plano y se creará una nueva sesión tmux donde airgeddon será lanzado" @@ -8366,17 +8382,17 @@ function language_strings() { arr["GERMAN",625]="Der Null-PIN-Angriff ist sehr schnell und erhält das Kennwort sofort, aber nur wenige access points sind anfällig. Einige sind \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" und \"ZTE H298N\"" arr["TURKISH",625]="Null PIN saldırısı çok hızlıdır ve şifreyi anında alır, ancak yalnızca birkaç erişim noktası korunmasızdır. Bazı \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" ve \"ZTE H298N\"" - arr["ENGLISH",626]="Since airgeddon 9.20 version, tmux is supported and it can be used instead of xterm as windows handler. Script can be launched in a headless environment without a graphical X window system. It is recommended only for advanced users. Like any other option, it can be configured on the options menu, on the ${rc_path} options file or launched using AIRGEDDON_WINDOWS_HANDLING \"flag\" in the command line. More information about options customization at Wiki: ${urlgithub_wiki}/Options" - arr["SPANISH",626]="A partir de la versión 9.20 de airgeddon, tmux está soportado y se puede utilizar en lugar de xterm como gestor de ventanas. Se puede lanzar el script en un entorno sin un sistema gráfico de ventanas X. Solo se recomienda hacerlo para usuarios avanzados. Como cualquier otra opción, se puede configurar desde el menú de opciones, configurarlo en el fichero de opciones ${rc_path} o lanzarlo usando el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línea de comandos. Más información acerca de la personalización de opciones en el Wiki: ${urlgithub_wiki}/Options" - arr["FRENCH",626]="À partir de la version 9.20 d'airgeddon, tmux est supporté et peut être utilisé à la place de xterm en tant que gestionnaire de fenêtres. Vous pouvez lancer le script dans un environnement dépourvu de système graphique X Windows. Il est recommandé aux utilisateurs avancés. Comme toute autre option, elle peut être configurée à partir du menu d'options, dans le fichier d'options ${rc_path} ou le lancer à l'aide de \"flag\" AIRGEDDON_WINDOWS_HANDLING sur la ligne de commande. Plus d'informations sur la personnalisation des options dans le Wiki: ${urlgithub_wiki}/Options" - arr["CATALAN",626]="A partir de la versió 9.20 de airgeddon, tmux està suportat i es pot utilitzar en lloc de xterm com a gestor de finestres. Es pot llançar l'script en un entorn sense un sistema gràfic de finestres X. Només es recomana fer-ho per a usuaris avançats. Com qualsevol altra opció, es pot configurar des del menú d'opcions, configurar en el fitxer d'opcions ${rc_path} o llançar usant el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línia d'ordres. Més informació sobre la personalització d'opcions al Wiki: ${urlgithub_wiki}/Options" - arr["PORTUGUESE",626]="A partir da versão 9.20 do airgeddon, o tmux pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico (X-Window). É recomendado apenas para usuários avançados. Como as demais opções, pode ser configurado a partir do menu, configurado no arquivo de opções ${rc_path} ou iniciado usando o \"parâmetro\" AIRGEDDON_WINDOWS_HANDLING na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" - arr["RUSSIAN",626]="Начиная с версии airgeddon 9.20, поддерживается tmux и он может использоваться вместо xterm в качестве обработчика окон. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_path} или запустить с помощью AIRGEDDON_WINDOWS_HANDLING \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" - arr["GREEK",626]="Από την έκδοση 9.20 του airgeddon, υποστηρίζεται το tmux και μπορεί να χρησιμοποιηθεί αντί του xterm ως χειριστής παραθύρων. Το script μπορεί να εκκινηθεί σε headless περιβάλλον χωρίς γραφικό σύστημα παραθύρου X. Συνιστάται μόνο για προχωρημένους χρήστες. Όπως και κάθε άλλη επιλογή, μπορεί να ρυθμιστεί στο μενού επιλογών, στο αρχείο επιλογών ${rc_path} ή να εκκινηθεί χρησιμοποιώντας το \"flag\" AIRGEDDON_WINDOWS_HANDLING στη γραμμή εντολών. Περισσότερες πληροφορίες σχετικά με την προσαρμογή των επιλογών στο Wiki: ${urlgithub_wiki}/Options" - arr["ITALIAN",626]="A partire dalla versione 9.20 di airgeddon, tmux è supportato e può essere usato al posto di xterm come gestore di finestre. È possibile avviare lo script in un ambiente senza un sistema grafico di finestre X. È consigliato solo per utenti esperti. Come qualsiasi altra opzione, può essere configurata dal menu delle opzioni, configurata nel file delle opzioni ${rc_path} o avviata utilizzando il \"flag\" AIRGEDDON_WINDOWS_HANDLING dalla linea di comando. Maggiori informazioni sulla personalizzazione delle opzioni nella Wiki: ${urlgithub_wiki}/Options" - arr["POLISH",626]="${pending_of_translation} Począwszy od wersji 9.20 airgeddon, tmux jest obsługiwany i może być używany zamiast xterm jako menedżer okien. Skrypt można uruchomić w środowisku bez systemu graficznego okien X. Zalecany jest tylko dla zaawansowanych użytkowników. Jak każda inna opcja, można ją skonfigurować z menu opcji, skonfigurować w pliku opcji ${rc_path} lub uruchomić za pomocą \"flag\" AIRGEDDON_WINDOWS_HANDLING w wierszu poleceń. Więcej informacji na temat dostosowywania opcji w Wikiv" - arr["GERMAN",626]="Ab airgeddon Version 9.20 wird tmux unterstützt und kann anstelle von xterm als Fenstermanager verwendet werden. Sie können das Skript in einer Umgebung ohne Grafiksystem von X-Fenstern starten, es wird nur für fortgeschrittene Benutzer empfohlen. Wie jede andere Option kann sie über das Optionsmenü konfiguriert werden, in der Optionsdatei ${rc_path} konfiguriert oder mit dem \"flag\" AIRGEDDON_WINDOWS_HANDLING in der Befehlszeile gestartet werden. Weitere Informationen zur Anpassung der Optionen im Wiki: ${urlgithub_wiki}/Options" - arr["TURKISH",626]="airgeddon'un 9.20 sürümünden itibaren, tmux destekleniyor ve bir pencere yöneticisi olarak xterm yerine kullanılabilir. Senaryoyu X windows grafik sistemine sahip olmayan bir ortamda başlatabilirsiniz, sadece ileri düzey kullanıcılar için önerilir. Diğer seçeneklerde olduğu gibi, seçenekler menüsünden yapılandırılabilir, ${rc_path} seçenekler dosyasında yapılandırılabilir veya komut satırında \"flag\" AIRGEDDON_WINDOWS_HANDLING kullanılarak başlatılabilir. Wiki'deki seçeneklerin özelleştirilmesi hakkında daha fazla bilgi: ${urlgithub_wiki}/Options" + arr["ENGLISH",626]="Since airgeddon 9.20 version, tmux is supported and it can be used instead of xterm as windows handler. Script can be launched in a headless environment without a graphical X window system. It is recommended only for advanced users. Like any other option, it can be configured on the options menu, on the ${rc_path} options file or launched using ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} \"flag\" in the command line. More information about options customization at Wiki: ${urlgithub_wiki}/Options" + arr["SPANISH",626]="A partir de la versión 9.20 de airgeddon, tmux está soportado y se puede utilizar en lugar de xterm como gestor de ventanas. Se puede lanzar el script en un entorno sin un sistema gráfico de ventanas X. Solo se recomienda hacerlo para usuarios avanzados. Como cualquier otra opción, se puede configurar desde el menú de opciones, configurarlo en el fichero de opciones ${rc_path} o lanzarlo usando el \"flag\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} en la línea de comandos. Más información acerca de la personalización de opciones en el Wiki: ${urlgithub_wiki}/Options" + arr["FRENCH",626]="À partir de la version 9.20 d'airgeddon, tmux est supporté et peut être utilisé à la place de xterm en tant que gestionnaire de fenêtres. Vous pouvez lancer le script dans un environnement dépourvu de système graphique X Windows. Il est recommandé aux utilisateurs avancés. Comme toute autre option, elle peut être configurée à partir du menu d'options, dans le fichier d'options ${rc_path} ou le lancer à l'aide de \"flag\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} sur la ligne de commande. Plus d'informations sur la personnalisation des options dans le Wiki: ${urlgithub_wiki}/Options" + arr["CATALAN",626]="A partir de la versió 9.20 de airgeddon, tmux està suportat i es pot utilitzar en lloc de xterm com a gestor de finestres. Es pot llançar l'script en un entorn sense un sistema gràfic de finestres X. Només es recomana fer-ho per a usuaris avançats. Com qualsevol altra opció, es pot configurar des del menú d'opcions, configurar en el fitxer d'opcions ${rc_path} o llançar usant el \"flag\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} en la línia d'ordres. Més informació sobre la personalització d'opcions al Wiki: ${urlgithub_wiki}/Options" + arr["PORTUGUESE",626]="A partir da versão 9.20 do airgeddon, o tmux pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico (X-Window). É recomendado apenas para usuários avançados. Como as demais opções, pode ser configurado a partir do menu, configurado no arquivo de opções ${rc_path} ou iniciado usando o \"parâmetro\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" + arr["RUSSIAN",626]="Начиная с версии airgeddon 9.20, поддерживается tmux и он может использоваться вместо xterm в качестве обработчика окон. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_path} или запустить с помощью ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" + arr["GREEK",626]="Από την έκδοση 9.20 του airgeddon, υποστηρίζεται το tmux και μπορεί να χρησιμοποιηθεί αντί του xterm ως χειριστής παραθύρων. Το script μπορεί να εκκινηθεί σε headless περιβάλλον χωρίς γραφικό σύστημα παραθύρου X. Συνιστάται μόνο για προχωρημένους χρήστες. Όπως και κάθε άλλη επιλογή, μπορεί να ρυθμιστεί στο μενού επιλογών, στο αρχείο επιλογών ${rc_path} ή να εκκινηθεί χρησιμοποιώντας το \"flag\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} στη γραμμή εντολών. Περισσότερες πληροφορίες σχετικά με την προσαρμογή των επιλογών στο Wiki: ${urlgithub_wiki}/Options" + arr["ITALIAN",626]="A partire dalla versione 9.20 di airgeddon, tmux è supportato e può essere usato al posto di xterm come gestore di finestre. È possibile avviare lo script in un ambiente senza un sistema grafico di finestre X. È consigliato solo per utenti esperti. Come qualsiasi altra opzione, può essere configurata dal menu delle opzioni, configurata nel file delle opzioni ${rc_path} o avviata utilizzando il \"flag\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} dalla linea di comando. Maggiori informazioni sulla personalizzazione delle opzioni nella Wiki: ${urlgithub_wiki}/Options" + arr["POLISH",626]="${pending_of_translation} Począwszy od wersji 9.20 airgeddon, tmux jest obsługiwany i może być używany zamiast xterm jako menedżer okien. Skrypt można uruchomić w środowisku bez systemu graficznego okien X. Zalecany jest tylko dla zaawansowanych użytkowników. Jak każda inna opcja, można ją skonfigurować z menu opcji, skonfigurować w pliku opcji ${rc_path} lub uruchomić za pomocą \"flag\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} w wierszu poleceń. Więcej informacji na temat dostosowywania opcji w Wikiv" + arr["GERMAN",626]="Ab airgeddon Version 9.20 wird tmux unterstützt und kann anstelle von xterm als Fenstermanager verwendet werden. Sie können das Skript in einer Umgebung ohne Grafiksystem von X-Fenstern starten, es wird nur für fortgeschrittene Benutzer empfohlen. Wie jede andere Option kann sie über das Optionsmenü konfiguriert werden, in der Optionsdatei ${rc_path} konfiguriert oder mit dem \"flag\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} in der Befehlszeile gestartet werden. Weitere Informationen zur Anpassung der Optionen im Wiki: ${urlgithub_wiki}/Options" + arr["TURKISH",626]="airgeddon'un 9.20 sürümünden itibaren, tmux destekleniyor ve bir pencere yöneticisi olarak xterm yerine kullanılabilir. Senaryoyu X windows grafik sistemine sahip olmayan bir ortamda başlatabilirsiniz, sadece ileri düzey kullanıcılar için önerilir. Diğer seçeneklerde olduğu gibi, seçenekler menüsünden yapılandırılabilir, ${rc_path} seçenekler dosyasında yapılandırılabilir veya komut satırında \"flag\" ${normal_color}AIRGEDDON_WINDOWS_HANDLING${pink_color} kullanılarak başlatılabilir. Wiki'deki seçeneklerin özelleştirilmesi hakkında daha fazla bilgi: ${urlgithub_wiki}/Options" arr["ENGLISH",627]="certificates" arr["SPANISH",627]="certificados" @@ -8586,8 +8602,8 @@ function language_strings() { arr["SPANISH",644]="Los ficheros de los certificados (ca.pem, server.pem and server.key) se han salvado correctamente en la ruta elegida [${normal_color}${enterprisecerts_completepath}${blue_color}]. El tiempo de expiración para estos certificados es de ${normal_color}10${blue_color} años y la contraseña utilizada en su creación fue \"${normal_color}${certspass}${blue_color}\"" arr["FRENCH",644]="Les fichiers de certificat (ca.pem, server.pem et server.key) ont été correctement enregistrés dans le chemin choisi [${normal_color}${enterprisecerts_completepath}${blue_color}]. Le temp d'expiration de ces certificats est de ${normal_color}10${blue_color} ans et le mot de passe utilisé lors de sa création était \"${normal_color}${certspass}${blue_color}\"" arr["CATALAN",644]="Els fitxers dels certificats (ca.pem, server.pem and server.key) s'han salvat correctament en la ruta escollida [${normal_color}${enterprisecerts_completepath}${blue_color}]. El temps de termini per a aquests certificats és de ${normal_color}10${blue_color} anys i la contrasenya utilitzada en la seva creació va ser \"${normal_color}${certspass}${blue_color}\"" - arr["PORTUGUESE",644]="Os arquivos de certificados (ca.pem, server.pem e server.key) foram salvos corretamente no caminho escolhido [${normal_color}${enterprisecerts_completepath}${blue_color}]. O prazo de validade desses certificados é de ${normal_color}10${blue_color} anos e a senha usada em sua criação era \"${normal_color}${certspass}${blue_color} \"" - arr["RUSSIAN",644]="Файлы сертификатов (ca.pem, server.pem и server.key) были успешно сохранены по выбранному пути [${normal_color}${enterprisecerts_completepath}${blue_color}]. Срок действия этих сертификатов составляет ${normal_color}10${blue_color} лет, а пароль, использованный при их создании, был \"${normal_color} ${certspass} ${blue_color} \"" + arr["PORTUGUESE",644]="Os arquivos de certificados (ca.pem, server.pem e server.key) foram salvos corretamente no caminho escolhido [${normal_color}${enterprisecerts_completepath}${blue_color}]. O prazo de validade desses certificados é de ${normal_color}10${blue_color} anos e a senha usada em sua criação era \"${normal_color}${certspass}${blue_color}\"" + arr["RUSSIAN",644]="Файлы сертификатов (ca.pem, server.pem и server.key) были успешно сохранены по выбранному пути [${normal_color}${enterprisecerts_completepath}${blue_color}]. Срок действия этих сертификатов составляет ${normal_color}10${blue_color} лет, а пароль, использованный при их создании, был \"${normal_color} ${certspass} ${blue_color}\"" arr["GREEK",644]="Τα πιστοποιητικά (ca.pem, server.pem και server.key) αποθηκεύτηκαν με επιτυχία στην επιλεγμένη διαδρομή [${normal_color}${enterprisecerts_completepath}${blue_color}}. Ο χρόνος λήξης αυτών των πιστοποιητικών είναι ${normal_color}10${blue_color} χρόνια και ο κωδικός πρόσβασης που χρησιμοποιήθηκε κατά τη δημιουργία του ήταν \"${normal_color}${certspass}${blue_color}\"" arr["ITALIAN",644]="I files del certificato (ca.pem, server.pem e server.key) sono stati salvati correttamente nel percorso scelto [${normal_color}${enterprisecerts_completepath}${blue_color}]. Il tempo di scadenza per questi certificati è ${normal_color}10${blue_color} anni e la password utilizzata nella sua creazione era \"${normal_color}${certspass}${blue_color}\"" arr["POLISH",644]="${pending_of_translation} pliki certyfikatów (ca.pem, server.pem i server.key) zostały poprawnie zapisane w wybranej ścieżce [${normal_color}${enterprisecerts_completepath}${blue_color}]. Czas wygaśnięcia tych certyfikatów wynosi ${normal_color}10${blue_color} lat, a hasło użyte do jego utworzenia to \"${normal_color}${certspass}${blue_color}\"" @@ -8666,6 +8682,138 @@ function language_strings() { arr["GERMAN",650]="Die Zertifikate sind gültig. Der Angriff kann ausgeführt werden" arr["TURKISH",650]="Sertifikalar geçerli. Saldırı yapılabilir" + arr["ENGLISH",651]="12. Disable plugins system permanently" + arr["SPANISH",651]="12. Deshabilitar sistema de plugins permanentemente" + arr["FRENCH",651]="12. Désactiver le système de plugins en permanence" + arr["CATALAN",651]="12. Deshabilitar sistema de plugins permanentment" + arr["PORTUGUESE",651]="12. Desativar permanentemente o sistema de plugins" + arr["RUSSIAN",651]="12. Насовсем отключить систему плагинов" + arr["GREEK",651]="12. Απενεργοποιήστε το σύστημα plugins μόνιμα" + arr["ITALIAN",651]="12. Disattivare sistema di plugins permanentemente" + arr["POLISH",651]="${pending_of_translation} 12. Wyłącz system wtyczek na stałe" + arr["GERMAN",651]="12. Plugins-System dauerhaft deaktivieren" + arr["TURKISH",651]="12. Eklentiler sistemini kalıcı olarak devre dışı bırak" + + arr["ENGLISH",652]="12. Enable plugins system permanently" + arr["SPANISH",652]="12. Habilitar sistema de plugins permanentemente" + arr["FRENCH",652]="12. Activer le système de plugins en permanence" + arr["CATALAN",652]="12. Habilitar sistema de plugins permanentment" + arr["PORTUGUESE",652]="12. Ativar o sistema de plugins permanentemente" + arr["RUSSIAN",652]="12. Включить систему плагинов" + arr["GREEK",652]="12. Ενεργοποιήστε το σύστημα plugins μόνιμα" + arr["ITALIAN",652]="12. Attivare sistema di plugin permanentemente" + arr["POLISH",652]="${pending_of_translation} 12. Włączenie na stałe system wtyczek" + arr["GERMAN",652]="12. Plugins-System dauerhaft aktivieren" + arr["TURKISH",652]="12. Eklentiler sistemini kalıcı olarak etkinleştir" + + arr["ENGLISH",653]="Plugins system: ${pink_color}Enabled${normal_color}${reboot_required_text}" + arr["SPANISH",653]="Sistema de plugins: ${pink_color}Activado${normal_color}${reboot_required_text}" + arr["FRENCH",653]="Système de plugins: ${pink_color}Activé${normal_color}${reboot_required_text}" + arr["CATALAN",653]="Sistema de plugins: ${pink_color}Activat${normal_color}${reboot_required_text}" + arr["PORTUGUESE",653]="Sistema de plugins: ${pink_color}Ativo${normal_color}${reboot_required_text}" + arr["RUSSIAN",653]="Система плагинов: ${pink_color}Включена${normal_color}${reboot_required_text}" + arr["GREEK",653]="Σύστημα plugins: ${pink_color}Ενεργοποιημένo${normal_color}${reboot_required_text}" + arr["ITALIAN",653]="Sistema di plugin: ${pink_color}Attivato${normal_color}${reboot_required_text}" + arr["POLISH",653]="${pending_of_translation} System wtyczek: ${pink_color}Włączone${normal_color}${reboot_required_text}" + arr["GERMAN",653]="Plugins-System: ${pink_color}Aktiviert${normal_color}${reboot_required_text}" + arr["TURKISH",653]="Eklentiler sistemi: ${pink_color}Aktif${normal_color}${reboot_required_text}" + + arr["ENGLISH",654]="Plugins system: ${pink_color}Disabled${normal_color}${reboot_required_text}" + arr["SPANISH",654]="Sistema de plugins: ${pink_color}Desactivados${normal_color}${reboot_required_text}" + arr["FRENCH",654]="Système de plugins: ${pink_color}Désactivé${normal_color}${reboot_required_text}" + arr["CATALAN",654]="Sistema de plugins: ${pink_color}Desactivat${normal_color}${reboot_required_text}" + arr["PORTUGUESE",654]="Sistema de plugins: ${pink_color}Desativo${normal_color}${reboot_required_text}" + arr["RUSSIAN",654]="Система плагинов: ${pink_color}Отключена${normal_color}${reboot_required_text}" + arr["GREEK",654]="Σύστημα plugins: ${pink_color}Απενεργοποιημένo${normal_color}${reboot_required_text}" + arr["ITALIAN",654]="Sistema di plugin: ${pink_color}Disattivato${normal_color}${reboot_required_text}" + arr["POLISH",654]="${pending_of_translation} System wtyczek: ${pink_color}Wyłączone${normal_color}${reboot_required_text}" + arr["GERMAN",654]="Plugins-System: ${pink_color}Deaktiviert${normal_color}${reboot_required_text}" + arr["TURKISH",654]="Eklentiler sistemi: ${pink_color}DevreDışı${normal_color}${reboot_required_text}" + + arr["ENGLISH",655]="${blue_color}Plugins system will be disabled. ${green_color}Do you want to continue? ${normal_color}${visual_choice}" + arr["SPANISH",655]="${blue_color}Se va a deshabilitar el sistema de plugins. ${green_color}¿Deseas continuar? ${normal_color}${visual_choice}" + arr["FRENCH",655]="${blue_color}Le système de plugins sera désactivé. ${green_color}Voulez-vous continuer? ${normal_color}${visual_choice}" + arr["CATALAN",655]="${blue_color}Es va a desactivar el sistema de plugins. ${green_color}¿Vols continuar? ${normal_color}${visual_choice}" + arr["PORTUGUESE",655]="${blue_color}O sistema de plug-in será desativado. ${green_color}Você deseja continuar? ${normal_color}${visual_choice}" + arr["RUSSIAN",655]="${blue_color}Система плагинов будет отключена. ${green_color}Вы хотите продолжить? ${normal_color}${visual_choice}" + arr["GREEK",655]="${blue_color}Το σύστημα plugins θα απενεργοποιηθεί. ${green_color}Θέλετε να συνεχίσετε; ${normal_color}${visual_choice}" + arr["ITALIAN",655]="${blue_color}Il sistema di plugin sarà disabilitato. ${green_color}Vuoi continuare? ${normal_color}${visual_choice}" + arr["POLISH",655]="${pending_of_translation} ${blue_color}System wtyczek zostanie wyłączony. ${green_color}Czy chcesz kontynuować? ${normal_color}${visual_choice}" + arr["GERMAN",655]="${blue_color}Das Plugins-System wird deaktiviert. ${green_color}Möchten Sie fortfahren? ${normal_color}${visual_choice}" + arr["TURKISH",655]="${blue_color}Eklenti sistemi devre dışı bırakılacak. ${green_color}Devam etmek istiyor musunuz? ${normal_color}${visual_choice}" + + arr["ENGLISH",656]="${blue_color}Plugins system will be enabled. ${green_color}Do you want to continue? ${normal_color}${visual_choice}" + arr["SPANISH",656]="${blue_color}Se va a habilitar el sistema de plugins. ${green_color}¿Deseas continuar? ${normal_color}${visual_choice}" + arr["FRENCH",656]="${blue_color}Le système de plugins sera activé. ${green_color}Voulez-vous continuer? ${normal_color}${visual_choice}" + arr["CATALAN",656]="${blue_color}Es va a habilitar el sistema de plugins. ${green_color}¿Vols continuar? ${normal_color}${visual_choice}" + arr["PORTUGUESE",656]="${blue_color}O sistema de plug-in será ativado. ${green_color}Você deseja continuar? ${normal_color}${visual_choice}" + arr["RUSSIAN",656]="${blue_color}Система плагинов будет включена. ${green_color}Вы хотите продолжить? ${normal_color}${visual_choice}" + arr["GREEK",656]="${blue_color}Το σύστημα plugins θα ενεργοποιηθεί. ${green_color}Θέλετε να συνεχίσετε; ${normal_color}${visual_choice}" + arr["ITALIAN",656]="${blue_color}Il sistema di plugin verrà abilitato ${green_color}Vuoi continuare? ${normal_color}${visual_choice}" + arr["POLISH",656]="${pending_of_translation} ${blue_color}System wtyczek zostanie włączony. ${green_color}Czy chcesz kontynuować? ${normal_color}${visual_choice}" + arr["GERMAN",656]="${blue_color}Das Plugins-System wird aktiviert. ${green_color}Möchten Sie fortfahren? ${normal_color}${visual_choice}" + arr["TURKISH",656]="${blue_color}Eklenti sistemi etkinleştirilecek. ${green_color}Devam etmek istiyor musunuz? ${normal_color}${visual_choice}" + + arr["ENGLISH",657]="${blue_color}tmux will be enabled. ${green_color}Do you want to continue? ${normal_color}${visual_choice}" + arr["SPANISH",657]="${blue_color}Se va a habilitar tmux. ${green_color}¿Deseas continuar? ${normal_color}${visual_choice}" + arr["FRENCH",657]="${blue_color}tmux será activé. ${green_color}Voulez-vous continuer? ${normal_color}${visual_choice}" + arr["CATALAN",657]="${blue_color}Es va a habilitar tmux. ${green_color}¿Vols continuar? ${normal_color}${visual_choice}" + arr["PORTUGUESE",657]="${blue_color}tmux será habilitado. ${green_color}Você deseja continuar? ${normal_color}${visual_choice}" + arr["RUSSIAN",657]="${blue_color}tmux будет включен. ${green_color}Вы хотите продолжить? ${normal_color}${visual_choice}" + arr["GREEK",657]="${blue_color}tmux θα ενεργοποιηθεί. ${green_color}Θέλετε να συνεχίσετε; ${normal_color}${visual_choice}" + arr["ITALIAN",657]="${blue_color}tmux verrà attivato ${green_color}Vuoi continuare? ${normal_color}${visual_choice}" + arr["POLISH",657]="${pending_of_translation} ${blue_color}tmux zostanie włączone. ${green_color}Czy chcesz kontynuować? ${normal_color}${visual_choice}" + arr["GERMAN",657]="${blue_color}tmux wird aktiviert. ${green_color}Möchten Sie fortfahren? ${normal_color}${visual_choice}" + arr["TURKISH",657]="${blue_color}tmux etkinleştirilecek. ${green_color}Devam etmek istiyor musunuz? ${normal_color}${visual_choice}" + + arr["ENGLISH",658]="${blue_color}xterm will be enabled. ${green_color}Do you want to continue? ${normal_color}${visual_choice}" + arr["SPANISH",658]="${blue_color}Se va a habilitar xterm. ${green_color}¿Deseas continuar? ${normal_color}${visual_choice}" + arr["FRENCH",658]="${blue_color}xterm será activé. ${green_color}Voulez-vous continuer? ${normal_color}${visual_choice}" + arr["CATALAN",658]="${blue_color}Es va a habilitar xterm. ${green_color}¿Vols continuar? ${normal_color}${visual_choice}" + arr["PORTUGUESE",658]="${blue_color}xterm será habilitado. ${green_color}Você deseja continuar? ${normal_color}${visual_choice}" + arr["RUSSIAN",658]="${blue_color}xterm будет включен. ${green_color}Вы хотите продолжить? ${normal_color}${visual_choice}" + arr["GREEK",658]="${blue_color}xterm θα ενεργοποιηθεί. ${green_color}Θέλετε να συνεχίσετε; ${normal_color}${visual_choice}" + arr["ITALIAN",658]="${blue_color}xterm verrà attivato ${green_color}Vuoi continuare? ${normal_color}${visual_choice}" + arr["POLISH",658]="${pending_of_translation} ${blue_color}xterm zostanie włączone. ${green_color}Czy chcesz kontynuować? ${normal_color}${visual_choice}" + arr["GERMAN",658]="${blue_color}xterm wird aktiviert. ${green_color}Möchten Sie fortfahren? ${normal_color}${visual_choice}" + arr["TURKISH",658]="${blue_color}xterm etkinleştirilecek. ${green_color}Devam etmek istiyor musunuz? ${normal_color}${visual_choice}" + + arr["ENGLISH",659]="Error. Invalid function \"${normal_color}${current_function}${red_color}\" at plugin \"${normal_color}${plugin}${red_color}\". The function tried to be modified does not exist. Fix it before continuing" + arr["SPANISH",659]="Error. Función no válida \"${normal_color}${current_function}${red_color}\" en el plugin \"${normal_color}${plugin}${red_color}\". La función que se intenta modificar no existe. Arréglalo antes de continuar" + arr["FRENCH",659]="Erreur. Fonction non valide \"${normal_color}${current_function}${red_color}\" dans le plugin \"${normal_color}${plugin}${red_color}\". La fonction que essaie de modifier n'existe pas. Devriez-vous le réparer avant de continuer" + arr["CATALAN",659]="Error. Funció no vàlida \"${normal_color}${current_function}${red_color}\" al plugin \"${normal_color}${plugin}${red_color}\". La funció que s'intenta modificar no existeix. Arregla-ho abans de continuar" + arr["PORTUGUESE",659]="Error. Função inválida \"${normal_color}${current_function}${red_color}\" no plugin \"${normal_color}${plugin}${red_color}\". A função a ser modificada não existe. Corrija antes de continuar" + arr["RUSSIAN",659]="Ошибка. Недействительные функции \"${normal_color}${current_function}${red_color}\" в плагине \"${normal_color}${plugin}${red_color}\". Попытка изменить несуществующую функцию. Исправьте это, прежде чем продолжить" + arr["GREEK",659]="Σφάλμα. Μη έγκυρη λειτουργία \"${normal_color}${current_function}${red_color}\" στο plugin \"${normal_color}${plugin}${red_color}\". Η λειτουργία που προσπάθησε να τροποποιηθεί δεν υπάρχει. Διορθώστε το πριν συνεχίσετε" + arr["ITALIAN",659]="Errore. Funzione non valida \"${normal_color}${current_function}${red_color}\" nel plugin \"${normal_color}${plugin}${red_color}\". La funzione che si cerca di modificare non esiste. Risolvilo prima di continuare" + arr["POLISH",659]="${pending_of_translation} Błąd. Nieprawidłowe funkcyjne \"${normal_color}${current_function}${red_color}\" we wtyczce \"${normal_color}${plugin}${red_color}\". Funkcja próbuje modyfikować nie istnieją. Napraw to przed kontynuowaniem" + arr["GERMAN",659]="Fehler. Ungültige Funktion \"${normal_color}${current_function}${red_color}\" im Plugin \"${normal_color}${plugin}${red_color}\". Die zu-ändernde Funktion ist nicht vorhanden. Beheben Sie es, bevor Sie fortfahren" + arr["TURKISH",659]="Hata. \"${normal_color}${plugin}${red_color}\" eklentisinde geçersiz İşlev \"${normal_color}${current_function}${red_color}\". Değiştirmeye çalışılan fonksiyon mevcut değil. Devam etmeden önce düzeltin" + + arr["ENGLISH",660]="Thanks to the plugins system, customized content can be developed. Custom modifications of any menu or functionality in a quick and simple way. More information at Wiki: ${urlgithub_wiki}/Plugins%20System" + arr["SPANISH",660]="Gracias al sistema de plugins se puede desarrollar contenido personalizado, modificaciones propias de alguna funcionalidad del menú de una forma ágil y sencilla. Más información en el Wiki: " + arr["FRENCH",660]="Merci aux système de plugins, on peuvent développer des contenu personnalisé, modifications de toutes les fonctionnalités ou menu d'une manière rapide et simple. Plus d'informations sur le Wiki: ${urlgithub_wiki}/Plugins%20System" + arr["CATALAN",660]="Gràcies al sistema de plugins es pot desenvolupar contingut personalitzat, modificacions pròpies d'alguna funcionalitat o menú d'una forma àgil i senzilla. Més informació al Wiki: ${urlgithub_wiki}/Plugins%20System" + arr["PORTUGUESE",660]="Graças ao sistema de plugins se pode desenvolver conteúdo personalizado, modificações próprias de qualquer menu ou funcionalidade de uma maneira fácil e rápida. Mais informações na o Wiki em: ${urlgithub_wiki}/Plugins%20System" + arr["RUSSIAN",660]="Благодаря плагинам можно быстро и просто разработать настраиваемое содержимое, собственные модификации с любой функциональностью или меню. Более подробная информация о Wiki: ${urlgithub_wiki}/Plugins%20System" + arr["GREEK",660]="Χάρη στα plugins, μπορεί να αναπτυχθεί προσαρμοσμένο περιεχόμενο. Τροποποιήστε από οποιαδήποτε μενού ή λειτουργία σε ένα γρήγορο και απλό τρόπο. Περισσότερες πληροφορίες σχετικά με το Wiki: ${urlgithub_wiki}/Plugins%20System" + arr["ITALIAN",660]="Grazie al sistema di plugins si possono sviluppare contenuti personalizzati, modifiche di alcune funzionalità o un menu in modo semplice e veloce. Maggiori informazioni su Wiki: ${urlgithub_wiki}/Plugins%20System" + arr["POLISH",660]="${pending_of_translation} Dzięki wtyczek może rozwijać spersonalizowanej treści, własne modyfikacje jakiejkolwiek funkcji lub menu w szybki i prosty sposób. Więcej informacji na wiki: ${urlgithub_wiki}/Plugins%20System" + arr["GERMAN",660]="Dank des Plugin-Systems können individuell angepasste Inhalte, eigene Modifikationen jeglicher Funktionalität oder ein Menü in einer schnellen und einfachen Art und Weise entwickelt werden. Weitere Informationen finden Sie auf Wiki: ${urlgithub_wiki}/Plugins%20System" + arr["TURKISH",660]="Eklentiler sistemi sayesinde özel içerikler, menü veya özellik kolay ve hızlı bir şekilde eklenebilir. Hakkında daha fazla bilgi: ${urlgithub_wiki}/Plugins%20System" + + arr["ENGLISH",661]="Error. You have conflicting plugins (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" and \"${normal_color}${plugin}${red_color}\") performing the same action \"${normal_color}${action}${red_color}\" over the same function \"${normal_color}${original_function}${red_color}\". Fix it before continuing" + arr["SPANISH",661]="Error. Tienes plugins en conflicto (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" y \"${normal_color}${plugin}${red_color}\") están realizando la misma acción \"${normal_color}${action}${red_color}\" sobre la misma función \"${normal_color}${original_function}${red_color}\". Arréglalo antes de continuar" + arr["FRENCH",661]="Erreur. Vous avez des plugins contradictoires (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" et \"${normal_color}${plugin}${red_color}\") On va effectuer la même action \"${normal_color}${action}${red_color}\" sur la même fonction \"${normal_color}${original_function}${red_color}\". Devriez-vous le réparer avant de continuer" + arr["CATALAN",661]="Error. Vostè té plugins en conflicte (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" i \"${normal_color}${plugin}${red_color}\") s'està realitzant la mateixa acció \"${normal_color}${action}${red_color}\" sobre la mateixa funció \"${normal_color}${original_function}${red_color}\". Arregla-ho abans de continuar" + arr["PORTUGUESE",661]="Erro. Você tem plugins conflitantes (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" e \"${normal_color}${plugin}${red_color}\") executam a mesma ação \"${normal_color}${action}${red_color}\" na função \"${normal_color}${original_function}${red_color}\". Corrija antes de continuar" + arr["RUSSIAN",661]="Ошибка. У вас есть конфликтующие плагины (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" и \"${normal_color}${plugin}${red_color}\") выполняют одно о то же действие \"${normal_color}${action}${red_color}\" над одной и той же функцией \"${normal_color}${original_function}${red_color}\". Исправьте это, прежде чем продолжить" + arr["GREEK",661]="Σφάλμα. Έχετε αντικρουόμενα plugins (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" και \"${normal_color}${plugin}${red_color}\") εκτελεί την ίδια ενέργεια \"${normal_color}${action}${red_color}\" για την ίδια λειτουργία \"${normal_color}${original_function}${red_color}\". Διορθώστε το πριν συνεχίσετε" + arr["ITALIAN",661]="Errore. Hai plugins in conflitto (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" e \"${normal_color}${plugin}${red_color}\") si sta eseguendo la stessa azione \"${normal_color}${action}${red_color}\" sopra la stessa funzione \"${normal_color}${original_function}${red_color}\". Risolvilo prima di continuare" + arr["POLISH",661]="${pending_of_translation} Błąd. Masz sprzecznych wtyczek (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" i \"${normal_color}${plugin}${red_color}\") wykonywania tej samej czynności \"${normal_color}${action}${red_color}\" na tej samej funkcji \"${normal_color}${original_function}${red_color}\". Napraw to przed kontynuowaniem" + arr["GERMAN",661]="Error. Sie haben widersprüchliche Plugins (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" und \"${normal_color}${plugin}${red_color}\") die die gleiche Aktion \"${normal_color}${action}${red_color}\" über die gleiche funktion \"${normal_color}${original_function}${red_color}\" durchführen. Beheben Sie es, bevor Sie fortfahren" + arr["TURKISH",661]="Hata. Çakışan eklentiler var: (\"${normal_color}${function_hooks[${original_function},${action}]}${red_color}\" ve \"${normal_color}${plugin}${red_color}\"). Aynı eylemi gerçekleştirerek \"${normal_color}${action}${red_color}\" aynı işlevi \"${normal_color}${original_function}${red_color}\" gerçekleştirmeye çalışıyorlar. Devam etmeden önce düzeltin" + case "${3}" in "yellow") interrupt_checkpoint "${2}" "${3}" @@ -8678,7 +8826,7 @@ function language_strings() { echo_red "${arr[${1},${2}]}" ;; "green") - if [ "${2}" -ne "${abort_question}" ]; then + if [[ "${2}" -ne "${abort_question}" ]] 2>/dev/null && [[ "${2}" != "${abort_question}" ]]; then interrupt_checkpoint "${2}" "${3}" fi echo_green "${arr[${1},${2}]}" diff --git a/plugins/missing_dependencies.sh b/plugins/missing_dependencies.sh new file mode 100644 index 000000000..66079478f --- /dev/null +++ b/plugins/missing_dependencies.sh @@ -0,0 +1,311 @@ +#!/usr/bin/env bash + +#Global shellcheck disabled warnings +#shellcheck disable=SC2034 + +plugin_name="Missing dependencies auto-installation" +plugin_description="A plugin to autoinstall missing dependencies on some Operating Systems (Kali, Parrot, BlackArch)" +plugin_author="v1s1t0r" + +plugin_enabled=1 + +plugin_minimum_ag_affected_version="10.0" +plugin_maximum_ag_affected_version="" +plugin_distros_supported=("Kali" "Parrot" "BlackArch") + +#Custom function. Create the correspondence between commands and packages for each supported distro +#shellcheck disable=SC2154 +function commands_to_packages() { + + local missing_commands_string_clean + missing_commands_string_clean="${1#${1%%[![:space:]]*}}" + + declare -A commands_to_packages_correspondence + + case "${distro}" in + "Kali"|"Parrot") + commands_to_packages_correspondence["ifconfig"]="net-tools" + commands_to_packages_correspondence["iwconfig"]="wireless-tools" + commands_to_packages_correspondence["iw"]="iw" + commands_to_packages_correspondence["awk"]="gawk" + commands_to_packages_correspondence["airmon-ng"]="aircrack-ng" + commands_to_packages_correspondence["airodump-ng"]="aircrack-ng" + commands_to_packages_correspondence["aircrack-ng"]="aircrack-ng" + commands_to_packages_correspondence["xterm"]="xterm" + commands_to_packages_correspondence["tmux"]="tmux" + commands_to_packages_correspondence["ip"]="iproute2" + commands_to_packages_correspondence["lspci"]="pciutils" + commands_to_packages_correspondence["ps"]="procps" + commands_to_packages_correspondence["wpaclean"]="aircrack-ng" + commands_to_packages_correspondence["crunch"]="crunch" + commands_to_packages_correspondence["aireplay-ng"]="aircrack-ng" + commands_to_packages_correspondence["mdk3"]="mdk3" + commands_to_packages_correspondence["mdk4"]="mdk4" + commands_to_packages_correspondence["hashcat"]="hashcat" + commands_to_packages_correspondence["hostapd"]="hostapd" + commands_to_packages_correspondence["dhcpd"]="isc-dhcp-server" + commands_to_packages_correspondence["nft"]="nftables" + commands_to_packages_correspondence["iptables"]="iptables" + commands_to_packages_correspondence["ettercap"]="ettercap-text-only" + commands_to_packages_correspondence["etterlog"]="ettercap-text-only" + commands_to_packages_correspondence["sslstrip"]="sslstrip" + commands_to_packages_correspondence["lighttpd"]="lighttpd" + commands_to_packages_correspondence["dnsspoof"]="dsniff" + commands_to_packages_correspondence["wash"]="reaver" + commands_to_packages_correspondence["reaver"]="reaver" + commands_to_packages_correspondence["bully"]="bully" + commands_to_packages_correspondence["pixiewps"]="pixiewps" + commands_to_packages_correspondence["bettercap"]="bettercap" + commands_to_packages_correspondence["beef-xss"]="beef-xss" + commands_to_packages_correspondence["packetforge-ng"]="aircrack-ng" + commands_to_packages_correspondence["hostapd-wpe"]="hostapd-wpe" + commands_to_packages_correspondence["asleap"]="asleap" + commands_to_packages_correspondence["john"]="john" + commands_to_packages_correspondence["openssl"]="openssl" + commands_to_packages_correspondence["xdpyinfo"]="x11-utils" + commands_to_packages_correspondence["ethtool"]="ethtool" + commands_to_packages_correspondence["lsusb"]="usbutils" + commands_to_packages_correspondence["rfkill"]="rfkill" + commands_to_packages_correspondence["wget"]="wget" + commands_to_packages_correspondence["ccze"]="ccze" + commands_to_packages_correspondence["xset"]="x11-xserver-utils" + ;; + "BlackArch") + commands_to_packages_correspondence["ifconfig"]="net-tools" + commands_to_packages_correspondence["iwconfig"]="wireless_tools" + commands_to_packages_correspondence["iw"]="iw" + commands_to_packages_correspondence["awk"]="gawk" + commands_to_packages_correspondence["airmon-ng"]="aircrack-ng" + commands_to_packages_correspondence["airodump-ng"]="aircrack-ng" + commands_to_packages_correspondence["aircrack-ng"]="aircrack-ng" + commands_to_packages_correspondence["xterm"]="xterm" + commands_to_packages_correspondence["tmux"]="tmux" + commands_to_packages_correspondence["ip"]="iproute2" + commands_to_packages_correspondence["lspci"]="pciutils" + commands_to_packages_correspondence["ps"]="procps-ng" + commands_to_packages_correspondence["wpaclean"]="aircrack-ng" + commands_to_packages_correspondence["crunch"]="crunch" + commands_to_packages_correspondence["aireplay-ng"]="aircrack-ng" + commands_to_packages_correspondence["mdk3"]="mdk3" + commands_to_packages_correspondence["mdk4"]="mdk4" + commands_to_packages_correspondence["hashcat"]="hashcat" + commands_to_packages_correspondence["hostapd"]="hostapd" + commands_to_packages_correspondence["dhcpd"]="dhcp" + commands_to_packages_correspondence["nft"]="nftables" + commands_to_packages_correspondence["iptables"]="iptables" + commands_to_packages_correspondence["ettercap"]="ettercap" + commands_to_packages_correspondence["etterlog"]="ettercap" + commands_to_packages_correspondence["sslstrip"]="sslstrip" + commands_to_packages_correspondence["lighttpd"]="lighttpd" + commands_to_packages_correspondence["dnsspoof"]="dsniff" + commands_to_packages_correspondence["wash"]="reaver" + commands_to_packages_correspondence["reaver"]="reaver" + commands_to_packages_correspondence["bully"]="bully" + commands_to_packages_correspondence["pixiewps"]="pixiewps" + commands_to_packages_correspondence["bettercap"]="bettercap" + commands_to_packages_correspondence["beef"]="beef" + commands_to_packages_correspondence["packetforge-ng"]="aircrack-ng" + commands_to_packages_correspondence["hostapd-wpe"]="hostapd-wpe" + commands_to_packages_correspondence["asleap"]="asleap" + commands_to_packages_correspondence["john"]="john" + commands_to_packages_correspondence["openssl"]="openssl" + commands_to_packages_correspondence["xdpyinfo"]="xorg-xdpyinfo" + commands_to_packages_correspondence["ethtool"]="ethtool" + commands_to_packages_correspondence["lsusb"]="usbutils" + commands_to_packages_correspondence["rfkill"]="rfkill" + commands_to_packages_correspondence["wget"]="wget" + commands_to_packages_correspondence["ccze"]="ccze" + commands_to_packages_correspondence["xset"]="xorg-xset" + ;; + esac + + local missing_packages_string="" + IFS=' ' read -r -a missing_commands_array <<< "${missing_commands_string_clean}" + for item in "${missing_commands_array[@]}"; do + missing_packages_string+=" ${commands_to_packages_correspondence[${item}]}" + done + + missing_packages_string_clean="${missing_packages_string#${missing_packages_string%%[![:space:]]*}}" +} + +#Custom function. Create text messages to be used in missing dependencies plugin +#shellcheck disable=SC2154 +function missing_dependencies_text() { + + arr["ENGLISH","missing_dependencies_1"]="${blue_color}Even with the ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color} option enabled, airgeddon has detected that you are missing some dependencies due to the auto install missing dependencies plugin. ${green_color}Do you want to proceed with the automatic installation? ${normal_color}${visual_choice}" + arr["SPANISH","missing_dependencies_1"]="${blue_color}Incluso con la opción ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color} habilitado, debido al plugin de auto instalación de dependencias airgeddon ha detectado que faltan algunas. ${green_color}¿Quieres proceder con la instalación automática? ${normal_color}${visual_choice}" + arr["FRENCH","missing_dependencies_1"]="${blue_color}Même si l'option ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color} est activé, en raison du plugin d'installation automatique des dépendances d'airgeddon, certaines manquent. ${green_color}Voulez-vous procéder à l'installation automatique? ${normal_color}${visual_choice}" + arr["CATALAN","missing_dependencies_1"]="${blue_color}Fins i tot amb l'opció habilitada ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color}, a causa del plugin d'acte instal·lació de dependències airgeddon ha detectat que falten algunes. ${green_color}Vols procedir amb la instal·lació automàtica? ${normal_color}${visual_choice}" + arr["PORTUGUESE","missing_dependencies_1"]="${blue_color}Mesmo com a opção ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color} habilitada, airgeddon detectou algumas ausentes devido ao plugin de instalação automática de dependências. ${green_color}Você quer prosseguir com a instalação automática? ${normal_color}${visual_choice}" + arr["RUSSIAN","missing_dependencies_1"]="${blue_color}Даже при включённой опции ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color}, airgeddon с помощью плагина auto install missing dependencies (автоматическая установка отсутствующих зависимостей) обнаружил, что вам не хватает некоторых зависимостей. ${green_color}Вы хотите продолжить автоматическую установку? ${normal_color}${visual_choice}" + arr["GREEK","missing_dependencies_1"]="${blue_color}Ακόμα και με ενεργοποιημένη την επιλογή ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color}, το airgeddon εντόπισε ότι σας λείπουν κάποια dependencies λόγω της αυτόματης εγκατάστασης του missing dependencies plugin. ${green_color}Θέλετε να συνεχίσετε με την αυτόματη εγκατάσταση; ${normal_color}${visual_choice}" + arr["ITALIAN","missing_dependencies_1"]="${blue_color}Anche con l'opzione abilitata ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color} abilitata, a causa del plugin di installazione automatica delle dipendenze, airgeddon ha rilevato che mancano alcune. ${green_color}Vuoi procedere con l'installazione automatica? ${normal_color}${visual_choice}" + arr["POLISH","missing_dependencies_1"]="${pending_of_translation} ${blue_color}awet z włączoną opcją ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color}, airgeddon wykrył, że brakuje pewnych zależności, ze względu na Auto Install brakujące wtyczki zależności. ${green_color}Chcesz przystąpić do automatycznej instalacji? ${normal_color}${visual_choice}" + arr["GERMAN","missing_dependencies_1"]="${blue_color}Auch wenn die ${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color} Option aktiviert ist, hat airgeddon bemerkt, dass einige Abhängigkeiten fehlen aufgrund der automatischen Installation fehlenden Abhängigkeiten Plugin. ${green_color}Möchten Sie mit der automatischen Installation fortfahren? ${normal_color}${visual_choice}" + arr["TURKISH","missing_dependencies_1"]="${normal_color}AIRGEDDON_SILENT_CHECKS${blue_color} seçeneği etkin olsa bile, airgeddon bağımlılıkları eklentisi eksik nedeniyle otomatik bazı bağımlılıkları eksik olduğunu install algıladı. ${green_color}Otomatik yükleme ile devam etmek istiyor musunuz? ${normal_color}${visual_choice}" + + arr["ENGLISH","missing_dependencies_2"]="${blue_color}Due to the auto install missing dependencies plugin, airgeddon could try to install the necessary missing packages. ${green_color}Do you want to proceed with the automatic installation? ${normal_color}${visual_choice}" + arr["SPANISH","missing_dependencies_2"]="${blue_color}Debido al plugin de auto instalación de dependencias, airgeddon podría intentar instalar los paquetes necesarios que faltan. ${green_color}¿Quieres proceder con la instalación automática? ${normal_color}${visual_choice}" + arr["FRENCH","missing_dependencies_2"]="${blue_color}En raison du plugin d'installation automatique des dependances, airgeddon pourrait essayer d'installer les logiciels manquants nécessaires. ${green_color}Voulez-vous procéder à l'installation automatique? ${normal_color}${visual_choice}" + arr["CATALAN","missing_dependencies_2"]="${blue_color}A causa del plugin d'acte instal·lació de dependències, airgeddon podria intentar instal·lar els paquets necessaris que falten. ${green_color}Vols procedir amb la instal·lació automàtica? ${normal_color}${visual_choice}" + arr["PORTUGUESE","missing_dependencies_2"]="${blue_color}Devido ao plug-in de instalação automática de dependência, o airgeddon pode tentar instalar os pacotes ausentes necessários. ${green_color}Você quer prosseguir com a instalação automática? ${normal_color}${visual_choice}" + arr["RUSSIAN","missing_dependencies_2"]="${blue_color}Благодаря плагину auto install missing dependencies (автоматическая установка отсутствующих зависимостей) airgeddon может попытаться установить необходимые недостающие пакеты. ${green_color}Вы хотите продолжить автоматическую установку? ${normal_color}${visual_choice}" + arr["GREEK","missing_dependencies_2"]="${blue_color}Λόγω της αυτόματης εγκατάστασης του missing dependencies plugin, το airgeddon θα μπορούσε να προσπαθήσει να εγκαταστήσει τα απαραίτητα πακέτα που λείπουν. ${green_color}θέλετε να συνεχίσετε με την αυτόματη εγκατάσταση; ${normal_color}${visual_choice}" + arr["ITALIAN","missing_dependencies_2"]="${blue_color}A causa del plugin di installazione automatica delle dipendenze, airgeddon potrebbe provare a installare i pacchetti mancanti necessari. ${green_color}Vuoi procedere con l'installazione automatica? ${normal_color}${visual_choice}" + arr["POLISH","missing_dependencies_2"]="${pending_of_translation} ${blue_color}Z powodu wtyczki instalacji automatycznej zależności airgeddon może spróbować zainstalować niezbędne brakujące pakiety. ${green_color}Chcesz przystąpić do automatycznej instalacji? ${normal_color}${visual_choice}" + arr["GERMAN","missing_dependencies_2"]="${blue_color}Mit dem Auto-Dependency-Installations-Plugin könnte airgeddon versuchen, die erforderlichen fehlenden Pakete zu installieren. ${green_color}Haben sie mit der automatischen installation fortfahren? ${normal_color}${visual_choice}" + arr["TURKISH","missing_dependencies_2"]="${blue_color}Otomatik bağımlılık yükleme eklentisi nedeniyle, airgeddon gerekli eksik paketleri kurmayı deneyebilir. ${green_color}Otomatik yükleme ile devam etmek istiyor musunuz? ${normal_color}${visual_choice}" + + arr["ENGLISH","missing_dependencies_3"]="Missing dependencies packages are trying to be installed. Please be patient..." + arr["SPANISH","missing_dependencies_3"]="Se está intentando instalar los paquetes de las dependencias que faltaban. Por favor ten paciencia..." + arr["FRENCH","missing_dependencies_3"]="On va essayez d'installer les dépendances des logiciels manquants. Soyez patients s'il vous plaît..." + arr["CATALAN","missing_dependencies_3"]="S'està intentant instal·lar els paquets de les dependències que faltaven. Si us plau tinguis paciència..." + arr["PORTUGUESE","missing_dependencies_3"]="Tentando instalar dependências ausentes dos pacotes. Por favor, seja paciente..." + arr["RUSSIAN","missing_dependencies_3"]="Попытка установить пакеты отсутствующих зависимостей. Подождите немного..." + arr["GREEK","missing_dependencies_3"]="Τα πακέτα με ελλειπής dependencies προσπαθούν να εγκατασταθούν. Παρακαλώ κάντε υπομονή..." + arr["ITALIAN","missing_dependencies_3"]="Si sta cercando di installare le dipendenze dei pacchetti mancanti. Si prega di essere pazienti..." + arr["POLISH","missing_dependencies_3"]="${pending_of_translation} Próbujesz zainstalować pakiety brakujące zależności. Cierpliwości..." + arr["GERMAN","missing_dependencies_3"]="Fehlende Pakete Abhängigkeiten werden installiert. Wir bitten um Geduld..." + arr["TURKISH","missing_dependencies_3"]="Eksik paket bağımlılıklarını yüklemek için çalışıyoruz. Lütfen sabırlı olun..." + + arr["ENGLISH","missing_dependencies_4"]="Dependencies were successfully installed. Script can continue..." + arr["SPANISH","missing_dependencies_4"]="Las dependencias se han instalado correctamente. El script puede continuar..." + arr["FRENCH","missing_dependencies_4"]="Les dépendances ont etait correctement installés. Le script peut continuer..." + arr["CATALAN","missing_dependencies_4"]="Les dependències s'han instal·lat correctament. El script pot continuar..." + arr["PORTUGUESE","missing_dependencies_4"]="Dependências instaladas com sucesso. O script pode continuar..." + arr["RUSSIAN","missing_dependencies_4"]="Зависимости установлены правильно. Скрипт может продолжать..." + arr["GREEK","missing_dependencies_4"]="Τα dependencies εγκαταστάθηκαν με επιτυχία. Το script μπορεί να συνεχίσει..." + arr["ITALIAN","missing_dependencies_4"]="Le dipendenze sono state installate correttamente. Lo script può continuare..." + arr["POLISH","missing_dependencies_4"]="${pending_of_translation} Zależności są zainstalowane prawidłowo. Skrypt może kontynuować..." + arr["GERMAN","missing_dependencies_4"]="Abhängigkeiten werden erfolgreich installiert. Das Skript kann fortfahren..." + arr["TURKISH","missing_dependencies_4"]="Bağımlılıklar düzgün bir şekilde yüklendi. Yazılım devam edebilir..." + + arr["ENGLISH","missing_dependencies_5"]="An error occurred while trying to install dependencies. This may be due to multiple causes. Make sure your internet connection is working. Anyway, you have installed all essential tools so you can continue. You'll miss only some features" + arr["SPANISH","missing_dependencies_5"]="Ocurrió un error al intentar instalar las dependencias. Esto puede ser debido a múltiples causas. Asegúrate de que tu acceso a internet está operativo. De todas formas tienes instaladas las herramientas esenciales así que puedes continuar. Solo no podrás hacer uso de algunas funcionalidades" + arr["FRENCH","missing_dependencies_5"]="Une erreur est survenue en essayant d'installer les dépendances. Cela peut être dû à des causes multiples. Assurez-vous que votre connexion internet fonctionne. De toute faiçon, vous avez installé tous les outils essentiels afin que vous puissiez continuer. Vous manquez seulement quelques fonctionnalités" + arr["CATALAN","missing_dependencies_5"]="S'ha produït un error en intentar instal·lar les dependències. Això pot ser degut a múltiples causes. Assegura't que el teu accés a internet està operatiu. De totes maneres, ha instal·lat totes les eines essencials perquè pugui continuar. Es perdran només algunes de les característiques" + arr["PORTUGUESE","missing_dependencies_5"]="Ocorreu um erro ao tentar instalar as dependências. Isto pode ter múltiplas causas. Certifique-se de sua conexão com a internet está funcionando. De qualquer forma, você possui todas as ferramentas essenciais para continuar, mas você não poderá usar alguns recursos." + arr["RUSSIAN","missing_dependencies_5"]="Произошла ошибка при попытке установить зависимости. Это может быть связано с несколькими причинами. Убедитесь, что подключение к Интернету работает. Во всяком случае, вы установили все инструменты необходимые для базовой работы. Вам будут недоступны только некоторые функции" + arr["GREEK","missing_dependencies_5"]="Παρουσιάστηκε σφάλμα κατά την προσπάθεια για την εγκατάσταση των dependencies. Αυτό μπορεί να οφείλεται σε πολλές αιτίες. Βεβαιωθείτε ότι η σύνδεσή σας στο internet λειτουργεί. Τέλος πάντων, έχετε εγκαταστήσει όλα τα απαραίτητα εργαλεία ώστε να μπορείτε να συνεχίσετε. Θα χάσετε μόνο μερικά features" + arr["ITALIAN","missing_dependencies_5"]="Si è verificato un errore durante il tentativo di installare le dipendenze. Ciò può essere dovuto a molteplici cause. Assicurarsi che la connessione a internet stia funzionando. In ogni caso, sono stati installati tutti gli strumenti essenziali in modo da poter continuare. Solo non potrai usare alcune funzionalità" + arr["POLISH","missing_dependencies_5"]="${pending_of_translation} Wystąpił błąd podczas próby zainstalowania zależności. Może to być spowodowane wieloma przyczynami. Upewnij się, czy połączenie internetowe działa. W każdym razie, masz zainstalowane wszystkie niezbędne narzędzia, dzięki czemu można kontynuować. będziesz tęsknił tylko niektóre funkcje" + arr["GERMAN","missing_dependencies_5"]="Fehler beim Versuch, Abhängigkeiten zu installieren. Dies kann mehrere Ursachen haben. Stellen Sie sicher, dass Ihre internetverbindung funktioniert. Doch Sie haben alle wichtigen Tools installiert, mit denen Sie fortfahren können. Sie vermissen nur einige Features" + arr["TURKISH","missing_dependencies_5"]="Eksik paket bağımlılıklarını yüklemeye çalışırken bir hata oluştu. Bu farklı nedenlere bağlı olabilir. İnternet bağlantısının çalıştığından emin olun. Neyse, tüm gerekli araçları yüklediniz. Yalnızca bazı özellikler eksik" + + arr["ENGLISH","missing_dependencies_6"]="An error occurred while trying to install dependencies. This may be due to multiple causes. Make sure your internet connection is working. Script can't continue due the lack of some essential tools" + arr["SPANISH","missing_dependencies_6"]="Ocurrió un error al intentar instalar las dependencias. Esto puede ser debido a múltiples causas. Asegúrate de que tu acceso a internet está operativo. El script no puede continuar debido a la falta de algunas herramientas esenciales" + arr["FRENCH","missing_dependencies_6"]="Une erreur est survenue en essayant d'installer les dépendances. Cela peut être dû à des causes multiples. Assurez-vous que votre connexion internet fonctionne. Le script ne peut pas continuer car l'absence de certains outils essentiels" + arr["CATALAN","missing_dependencies_6"]="S'ha produït un error en intentar instal·lar les dependències. Això pot ser degut a múltiples causes. Assegura't que el teu accés a internet està operatiu. Script no pot continuar a causa de la manca d'algunes eines essencials" + arr["PORTUGUESE","missing_dependencies_6"]="Ocorreu um erro ao tentar instalar as dependências. Isto pode ter múltiplas causas. Certifique-se de sua conexão com a internet está funcionando. Script não pode continuar devido a falta de algumas ferramentas essenciais" + arr["RUSSIAN","missing_dependencies_6"]="Произошла ошибка при попытке установить зависимости. Это может быть связано с несколькими причинами. Убедитесь, что подключение к Интернету работает. Скрипт не может продолжить работу из-за отсутствия некоторых необходимых инструментов" + arr["GREEK","missing_dependencies_6"]="Παρουσιάστηκε σφάλμα κατά την προσπάθεια για την εγκατάσταση των dependencies. Αυτό μπορεί να οφείλεται σε πολλές αιτίες. Βεβαιωθείτε ότι η σύνδεσή σας στο internet λειτουργεί. Το script δεν μπορεί να συνεχιστεί λόγω έλλειψης κάποιων βασικών εργαλείων" + arr["ITALIAN","missing_dependencies_6"]="Si è verificato un errore durante il tentativo di installare le dipendenze. Ciò può essere dovuto a molteplici cause. Assicurarsi che la connessione a internet stia funzionando. Lo script non può continuare a causa della mancanza di alcuni strumenti essenziali" + arr["POLISH","missing_dependencies_6"]="${pending_of_translation} Wystąpił błąd podczas próby zainstalowania zależności. Może to być spowodowane wieloma przyczynami. Upewnij się, czy połączenie internetowe działa. Skrypt nie może kontynuować z powodu braku pewnych podstawowych narzędzi" + arr["GERMAN","missing_dependencies_6"]="Fehler beim Versuch, Abhängigkeiten zu installieren. Dies kann mehrere Ursachen haben. Stellen Sie sicher, dass Ihre internetverbindung funktioniert. Script kann wegen des Fehlens einiger wichtiger Tools nicht mehr weitermachen" + arr["TURKISH","missing_dependencies_6"]="Eksik paket bağımlılıklarını yüklemeye çalışırken bir hata oluştu. Bu farklı nedenlere bağlı olabilir. İnternet bağlantısının çalıştığından emin olun. Script bazı temel araçların eksikliği nedeniyle devam edemiyor" +} + +#Posthook for check_compatibity function to install missing dependencies +#shellcheck disable=SC2154 +function missing_dependencies_posthook_check_compatibility() { + + if [[ ${essential_toolsok} -ne 1 ]] || [[ ${optional_toolsok} -ne 1 ]] || [[ ${update_toolsok} -ne 1 ]]; then + + if "${AIRGEDDON_SILENT_CHECKS:-true}"; then + ask_yesno "missing_dependencies_1" "yes" + else + ask_yesno "missing_dependencies_2" "yes" + fi + + if [ "${yesno}" = "y" ]; then + + local missing_tools=() + + for item in "${!possible_package_names[@]}"; do + if ! hash "${item}" 2> /dev/null || [[ "${item}" = "beef" ]]; then + if [ "${item}" = "beef" ]; then + case "${distro}" in + "Kali"|"Parrot") + if ! hash "beef-xss" 2> /dev/null; then + missing_tools+=("beef-xss") + fi + ;; + "BlackArch") + if ! hash "${item}" 2> /dev/null; then + missing_tools+=("${item}") + fi + ;; + esac + else + missing_tools+=("${item}") + fi + fi + done + + for item in "${internal_tools[@]}"; do + if ! hash "${item}" 2> /dev/null; then + missing_tools+=("${item}") + fi + done + + local missing_commands_string="" + for item in "${missing_tools[@]}"; do + missing_commands_string+=" ${item}" + done + + commands_to_packages "${missing_commands_string}" + + echo + language_strings "${language}" "missing_dependencies_3" "blue" + echo + + local resultok=0 + case "${distro}" in + "Kali"|"Parrot") + if apt update > /dev/null 2>&1 && apt -y install "${missing_packages_string_clean}" > /dev/null 2>&1; then + resultok=1 + fi + ;; + "BlackArch") + if pacman -Sy > /dev/null 2>&1 && pacman --noconfirm -S "${missing_packages_string_clean}" > /dev/null 2>&1; then + resultok=1 + fi + ;; + esac + + if [ ${resultok} -eq 1 ]; then + compatible=1 + update_toolsok=1 + for item in "${optional_tools_names[@]}"; do + optional_tools[${item}]=1 + done + language_strings "${language}" "missing_dependencies_4" "yellow" + else + if [ ${compatible} -eq 1 ]; then + language_strings "${language}" "missing_dependencies_5" "yellow" + else + language_strings "${language}" "missing_dependencies_6" "red" + language_strings "${language}" 115 "read" + fi + fi + else + if [ "${compatible}" -ne 1 ]; then + exit_code=1 + exit_script_option + fi + fi + fi +} + +#Override read_yesno function to be able to print the question correctly +#shellcheck disable=SC2154 +function missing_dependencies_override_read_yesno() { + + debug_print + + echo + missing_dependencies_text + + language_strings "${language}" "${1}" "green" + read -rp "> " yesno +} diff --git a/plugins/plugin_template.sh b/plugins/plugin_template.sh new file mode 100644 index 000000000..f63b74243 --- /dev/null +++ b/plugins/plugin_template.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +#Global shellcheck disabled warnings +#shellcheck disable=SC2034,SC2154 + +#Start modifying below this line. You can safely remove comments but be pretty sure to know what you are doing! + +###### QUICK SUMMARY ###### + +#How it works? This system allows to modify functionality of airgeddon to create a custom behavior based on a system of prehooking, overriding and posthooking functions +#This can be done without any modification in the main script. All you need is to do modifications at plugins directory +#Ready? Three simple steps! +#1. Set some generic vars and some requirements vars to set some validations +#2. Check airgeddon main script code and choose a function to work with (you need to be sure which function is doing the part you want to modify. Debug mode can help here) +#3. Code your own stuff. You can set as much functions to prehook, override or posthook as you want. You can also create your own functions to be called from a hooked function + +#Bear in mind that this plugin template is ignored by airgeddon and is not executed because of its special filename which is an exception for the system +#To use this template just rename the file to any other filename keeping .sh extension +#Example: my_super_pr0_plugin.sh +#If you have any doubt about plugins development check our Wiki: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Plugins%20Development + +###### GENERIC PLUGIN VARS ###### + +plugin_name="Set your plugin name here" +plugin_description="Set a short description of your plugin" +plugin_author="Set your nick/name here" + +#Enabled 1 / Disabled 0 - Set this plugin as enabled - Default value 1 +plugin_enabled=1 + +###### PLUGIN REQUIREMENTS ###### + +#Set airgeddon versions to apply this plugin (leave blank to set no limits, minimum version recommended is 10.0 on which plugins feature was added) +plugin_minimum_ag_affected_version="10.0" +plugin_maximum_ag_affected_version="" + +#Set only one element in the array "*" to affect all distros, otherwise add them one by one with the name which airgeddon uses for that distro (examples "BlackArch", "Parrot", "Kali") +plugin_distros_supported=("*") + +###### CUSTOM FUNCTIONS ###### + +#Just create here new custom functions if they are needed +#They can be called from the plugin itself. They are different than the "hooked" functions (explained on the next section) + +###### FUNCTION HOOKING: OVERRIDE ###### + +#To override airgeddon functions, just define them following this nomenclature name: _override_ +#plugin_short_name: This is the name of the plugin filename without extension (.sh) +#function_name: This is the name of the airgeddon function you want to rewrite with new content + +#Overridden function example +#This will replace an existing function in main airgeddon script to change its behavior in order to execute this content instead of the original +#In this template the existing function is called "somefunction" but of course this is not existing in airgeddon. You should replace "somefunction" with the real name of the function you want to override +#Remember also to modify the starting part of the function "plugin_template" to set your plugin short name (filename without .sh) "my_super_pr0_plugin" if you renamed this template file to my_super_pr0_plugin.sh +#Example name: function my_super_pr0_plugin_override_set_chipset() { <- this will override the content of the chosen function +function plugin_template_override_somefunction() { + + echo "Here comes my custom code content which will replace the original source code of the overridden function" +} + +###### FUNCTION HOOKING: PREHOOK ###### + +#To prehook airgeddon functions, just define them following this nomenclature name: _prehook_ +#plugin_short_name: This is the name of the plugin filename without extension (.sh) +#function_name: This is the name of the airgeddon function where you want to launch your stuff before + +#Prehook function example +#This will execute this content before the chosen function +#In this template the existing function is called "somefunction" but of course this is not existing in airgeddon. You should replace "somefunction" with the real name of the function you want to prehook +#Remember also to modify the starting part of the function "plugin_template" to set your plugin short name (filename without .sh) "my_super_pr0_plugin" if you renamed this template file to my_super_pr0_plugin.sh +#Example name: function my_super_pr0_plugin_prehook_clean_tmpfiles() { <- this will execute the custom code just before executing the content of the chosen function +function plugin_template_prehook_somefunction() { + + echo "Here comes my custom code which will be executed just before starting to execute the content of the chosen function" +} + +###### FUNCTION HOOKING: POSTHOOK ###### + +#To posthook airgeddon functions, just define them following this nomenclature name: _posthook_ +#plugin_short_name: This is the name of the plugin filename without extension (.sh) +#function_name: This is the name of the airgeddon function where you want to launch your stuff after + +#Posthook function example +#This will execute this content just after the chosen function +#In this template the existing function is called "somefunction" but of course this is not existing in airgeddon. You should replace "somefunction" with the real name of the function you want to posthook +#Remember also to modify the starting part of the function "plugin_template" to set your plugin short name (filename without .sh) "my_super_pr0_plugin" if you renamed this template file to my_super_pr0_plugin.sh +#Example name: function my_super_pr0_plugin_posthook_clean_tmpfiles() { <- this will execute the custom code just after executing the content of the chosen function +function plugin_template_posthook_somefunction() { + + echo "Here comes my custom code which will be executed just after finish executing the content of the chosen function" +} + +#Important notes about returning codes on posthooking +#If the function you are posthooking has a returning code, that value is available on the posthook function as ${1}. +#The return done on the posthook function will be the final return value for the function overriding the original one. +#So if you are posthooking a function with return codes you must do mandatorily a return statement on the posthook function.