├── version ├── update ├── README.md ├── install ├── malrecon └── LICENSE /version: -------------------------------------------------------------------------------- 1 | 1.08 2 | -------------------------------------------------------------------------------- /update: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # MalRecon - A Basic Malware Reconnaissance Tool, by Outrider 4 | # 5 | # Usage: Updates MalRecon by utilizing Git 6 | # Syntax: ./update 7 | # Example: ./update 8 | # 9 | # Get the latest version here: https://github.com/0utrider/malrecon 10 | # 11 | # 12 | # Copyright 2017 Outrider - keybase.io/outrider 13 | # 14 | # Licensed under the Apache License, Version 2.0 (the "License"); 15 | # you may not use this file except in compliance with the License. 16 | # You may obtain a copy of the License at 17 | # 18 | # http://www.apache.org/licenses/LICENSE-2.0 19 | # 20 | # Unless required by applicable law or agreed to in writing, software 21 | # distributed under the License is distributed on an "AS IS" BASIS, 22 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 23 | # See the License for the specific language governing permissions and 24 | # limitations under the License. 25 | 26 | # Banner 27 | echo "" 28 | echo -e "\033[38;5;0m \033[0m" 29 | echo -e "\033[38;5;196m (_ __) \033[38;5;63m _____ \033[0m" 30 | echo -e "\033[38;5;196m /| /| /)\033[38;5;63m / ) \033[0m" 31 | echo -e "\033[38;5;196m / | / | _ // \033[38;5;63m /__ / _ _ _____ \033[0m" 32 | echo -e "\033[38;5;196m ) / |/ |_(_(_(/_ \033[38;5;63m / \__(/_(__(_) / (_ \033[0m" 33 | echo -e "\033[38;5;196m (_/ ' \033[38;5;63m / \033[0m" 34 | echo -e "\033[38;5;254m by Outrider \033[0m" 35 | echo -e "\033[38;5;0m \033[0m" 36 | echo -e " Basic Malware Reconnaissance Tool " 37 | echo "" 38 | echo " https://git.io/0utrider " 39 | echo "" 40 | 41 | # Set directory 42 | ## Below it is trying to ensure that the commands are run out of the real malrecon directory, resolving symlinks 43 | updatePath=$(dirname $(realpath -s $0)) 44 | cd $updatePath 45 | 46 | # Update using Git 47 | echo "Running updates ..." 48 | git fetch -q origin master 49 | git reset -q --hard origin/master 50 | git clean -dfq 51 | 52 | # Reset permissions 53 | chmod +x install malrecon update 54 | 55 | # That's a wrap! 56 | echo -e "\033[30;48;5;82mDone.\033[0m" 57 | echo "" 58 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MalRecon 2 | Basic Malware Reconnaissance Tool 3 | by [Outrider](https://github.com/0utrider) 4 | 5 | ## Information 6 | This is just a simple tool used to automate some of the more mundane tasks when obtaining malware. The final action is to compress/encrypt all of the files in a 7z for portability and analysis. It is designed to work out-of-the-box with Kali Linux, but should work with most 'nix distros with no problem. 7 | 8 | I plan to add more features as I think of them - if you have any ideas, especially for more useful tools and outputs, please let me know! 9 | 10 | **Usage:** Performs basic malware/download reconnaissance of URLs (curl, wget, hashing, etc.) 11 | 12 | **Syntax:** `malrecon` **or** `malrecon [URL] [Case Number] [Zip File Password]` 13 | 14 | **Example:** `malrecon http://malwaredomain.org/payload1 IN123456 MalZippity!` 15 | 16 | ## Prerequisites 17 | Installed via installer script - Note: FLOSS is still a manual install at this time, work in progress. 18 | 19 | ``` 20 | binutils Contains the strings utility 21 | p7zip-full 7zip file archiver 22 | floss FireEye Labs Obfuscated String Solver (FLOSS) - https://github.com/fireeye/flare-floss 23 | ``` 24 | 25 | ## File Outputs 26 | ``` 27 | .7z Compressed & encrypted vault of all other outputs 28 | .curl Curls the URL provided 29 | .floss FLOSS output of the .malware file 30 | .header File header and hex values of the .malware file 31 | .malware The downloaded file/binary - this is the file that is analyzed by other tools 32 | .md5 MD5sum of the .malware file 33 | .password Password to .7z file 34 | .properties Summarized file properties of the .malware file 35 | .sha256 SHA256sum of the .malware file 36 | .strings Strings output of the .malware file 37 | .url URL used to operate the script / URL reconned 38 | .wget wget command log file of output 39 | ``` 40 | 41 | ## How To Install 42 | This assumes you have Git installed and that you are using Kali Linux. Add 'sudo' before commands if you are not logged in as root, or using another distro. 43 | 44 | ``` 45 | mkdir -p [/install/path] 46 | cd [/install/path] 47 | git clone https://github.com/0utrider/malrecon 48 | chmod +x install 49 | ./install 50 | ``` 51 | 52 | ## How to Update 53 | Simply run the *update* script from within the malrecon directory. 54 | 55 | ``` 56 | cd [/install/path]/malrecon 57 | ./update 58 | ``` 59 | 60 | ## To-Do 61 | - [x] Add 7zip support 62 | - [ ] Add dependency installer script - in progress 63 | - [ ] Move user-set variables to a homedir preferences file 64 | - [ ] Find additional tools to use for outputs 65 | -------------------------------------------------------------------------------- /install: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # MalRecon - A Basic Malware Reconnaissance Tool, by Outrider 4 | # 5 | # Usage: Installs MalRecon dependencies and configures symbolic links 6 | # Syntax: ./install 7 | # Example: ./install 8 | # 9 | # Get the latest version here: https://github.com/0utrider/malrecon 10 | # 11 | # 12 | # Copyright 2017 Outrider - keybase.io/outrider 13 | # 14 | # Licensed under the Apache License, Version 2.0 (the "License"); 15 | # you may not use this file except in compliance with the License. 16 | # You may obtain a copy of the License at 17 | # 18 | # http://www.apache.org/licenses/LICENSE-2.0 19 | # 20 | # Unless required by applicable law or agreed to in writing, software 21 | # distributed under the License is distributed on an "AS IS" BASIS, 22 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 23 | # See the License for the specific language governing permissions and 24 | # limitations under the License. 25 | 26 | # Banner 27 | echo "" 28 | echo -e "\033[38;5;0m \033[0m" 29 | echo -e "\033[38;5;196m (_ __) \033[38;5;63m _____ \033[0m" 30 | echo -e "\033[38;5;196m /| /| /)\033[38;5;63m / ) \033[0m" 31 | echo -e "\033[38;5;196m / | / | _ // \033[38;5;63m /__ / _ _ _____ \033[0m" 32 | echo -e "\033[38;5;196m ) / |/ |_(_(_(/_ \033[38;5;63m / \__(/_(__(_) / (_ \033[0m" 33 | echo -e "\033[38;5;196m (_/ ' \033[38;5;63m / \033[0m" 34 | echo -e "\033[38;5;254m by Outrider \033[0m" 35 | echo -e "\033[38;5;0m \033[0m" 36 | echo -e " Basic Malware Reconnaissance Tool " 37 | echo "" 38 | echo " https://git.io/0utrider " 39 | echo "" 40 | 41 | # Define prerequisite packages 42 | installPax="binutils p7zip-full" 43 | 44 | # Set directory 45 | ## Below it is trying to ensure that the commands are run out of the real malrecon directory, resolving symlinks 46 | installPath=$(dirname $(realpath -s $0)) 47 | cd $installPath 48 | echo -e "Setting \033[38;5;254mpath\033[0m to \033[38;5;254m$installPath\033[0m ..." 49 | 50 | # Permissions: allow execute on scripts 51 | echo -e "Setting \033[38;5;254mpermissions\033[0m ..." 52 | chmod +x install malrecon update 53 | 54 | # Create symbolic link 55 | echo -e "Creating \033[38;5;254msymbolic link\033[0m ..." 56 | ln -s $installPath/malrecon /usr/bin/malrecon 57 | 58 | # Install dependencies 59 | ## Package manager check 60 | installApt=$(which apt-get) 61 | installPac=$(which pacman) 62 | installYum=$(which yum) 63 | 64 | if [[ ! -z $installApt ]]; then # if apt-get exists on the system, install dependencies 65 | apt-get update > /dev/null 2>&1 66 | apt-get install -y $installPax > /dev/null 2>&1 67 | elif [[ ! -z $installPac ]]; then # if pacman exists on the system, install dependencies 68 | pacman -Sy > /dev/null 2>&1 69 | pacman -S $installPax > /dev/null 2>&1 70 | pacman -S p7zip > /dev/null 2>&1 71 | ## TO-DO: (RPM fork) 72 | ###elif [[ ! -z $installYum ]]; then # if yum exists on the system, install dependencies 73 | ### yum 74 | else 75 | echo -e "\033[38;5;196mCannot find APT-GET, PACMAN, or YUM\033[0m" 76 | echo "" 77 | echo "You will need to install the following:" 78 | echo $installPax 79 | echo "" 80 | exit 1; 81 | fi 82 | 83 | # (Not finished with this script yet!) 84 | echo "" 85 | echo "(Still working on this.)" 86 | echo "" 87 | -------------------------------------------------------------------------------- /malrecon: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # MalRecon - A Basic Malware Reconnaissance Tool, by Outrider 4 | # 5 | # Usage: Performs basic malware/download reconnaissance of URLs (curl, wget, hashing, etc.) 6 | # Syntax: malrecon [URL] [Case No.] [Password] 7 | # Example: malrecon http://malwaredomain.org/payload1 IN123456 MalZippity! 8 | # 9 | # Get the latest version here: https://github.com/0utrider/malrecon 10 | # 11 | # 12 | # Copyright 2017 Outrider - https://keybase.io/outrider 13 | # 14 | # Licensed under the Apache License, Version 2.0 (the "License"); 15 | # you may not use this file except in compliance with the License. 16 | # You may obtain a copy of the License at 17 | # 18 | # http://www.apache.org/licenses/LICENSE-2.0 19 | # 20 | # Unless required by applicable law or agreed to in writing, software 21 | # distributed under the License is distributed on an "AS IS" BASIS, 22 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 23 | # See the License for the specific language governing permissions and 24 | # limitations under the License. 25 | 26 | # =================== USER DEFINED VARIABLES =================== 27 | 28 | ## Default password for 7zip files 29 | reconDefaultPass="MalZippity!" 30 | 31 | ## The user agent string below is the tool pretending to be Internet Explorer 9 running on Windows 7 32 | ### For more user agents: http://www.useragentstring.com/pages/useragentstring.php 33 | reconAgent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)" 34 | 35 | ## Output directory 36 | ### Default is the "recon" directory in the user's home path, i.e.: ~/recon 37 | reconDir="~/recon" 38 | 39 | ## File permissions 40 | ### Read-write with no execute "660" 41 | ### Change to read only "440" if you want this to be more forensically sound 42 | reconPermissions="660" 43 | 44 | # ================= END USER DEFINED VARIABLES ================= 45 | 46 | # Banner 47 | echo "" 48 | echo -e "\033[38;5;0m \033[0m" 49 | echo -e "\033[38;5;196m (_ __) \033[38;5;63m _____ \033[0m" 50 | echo -e "\033[38;5;196m /| /| /)\033[38;5;63m / ) \033[0m" 51 | echo -e "\033[38;5;196m / | / | _ // \033[38;5;63m /__ / _ _ _____ \033[0m" 52 | echo -e "\033[38;5;196m ) / |/ |_(_(_(/_ \033[38;5;63m / \__(/_(__(_) / (_ \033[0m" 53 | echo -e "\033[38;5;196m (_/ ' \033[38;5;63m / \033[0m" 54 | echo -e "\033[38;5;254m v1.07 by Outrider \033[0m" 55 | echo -e "\033[38;5;0m \033[0m" 56 | echo -e " Basic Malware Reconnaissance Tool " 57 | echo "" 58 | echo " https://git.io/0utrider " 59 | echo "" 60 | 61 | # Define the URL to be reconned 62 | if [ -z "$1" ] ## Was the URL provided as an argument? 63 | then 64 | read -p 'URL: ' reconURL ## Ask the user for input if not 65 | else 66 | reconURL=$1 ## Set the URL if it was provided 67 | echo "URL: $reconURL" 68 | fi 69 | 70 | # Define the case number 71 | if [ -z "$2" ] ## Was the case provided as an argument? 72 | then 73 | read -p 'Case No.: ' reconCase ## Ask the user for input if not 74 | else 75 | reconCase=$2 # Set the case number if it was provided 76 | echo "Case No.: $reconCase" 77 | fi 78 | 79 | # Define the 7zip password 80 | if [ -z "$3" ] # Was a password provided as an argument? 81 | then 82 | read -e -p "Password: " -i "$reconDefaultPass" reconPass 83 | else 84 | reconPass=$3 # Set the password if it was provided 85 | echo "Password set." 86 | fi 87 | 88 | # Create directory structure and change working directory 89 | echo -e "Creating directory \033[38;5;254m$reconCase\033[0m ..." 90 | reconPath=`eval echo $reconDir` # determine the literal path to the output directory, prevents errors 91 | mkdir -p $reconPath/$reconCase 92 | cd $reconPath/$reconCase 93 | 94 | # Basic recon functions begin here 95 | ## lets curl the URL provided by the user 96 | echo -e "Performing \033[38;5;254mcurl\033[0m ..." 97 | curl -s -o $reconCase.curl -A "$reconAgent" $reconURL > /dev/null 2>&1 98 | 99 | ## lets wget the URL provided by the user 100 | echo -e "Performing \033[38;5;254mwget\033[0m ..." 101 | wget -q --user-agent="$reconAgent" -c $reconURL -O $reconCase.malware > $reconCase.wget 2>&1 102 | 103 | ## lets run checksums on the wget download 104 | echo -e "Generating \033[38;5;254mhashes\033[0m ..." 105 | md5sum $reconCase.malware | awk '{print $1}' > $reconCase.md5 106 | sha256sum $reconCase.malware | awk '{print $1}' > $reconCase.sha256 107 | 108 | ## lets run strings against the download 109 | echo -e "Generating \033[38;5;254mstrings\033[0m ..." 110 | strings $reconCase.malware > $reconCase.strings 111 | 112 | ## lets run FLOSS (https://github.com/fireeye/flare-floss) against the download 113 | echo -e "Generating \033[38;5;254mfloss\033[0m ..." 114 | floss -s $reconCase.malware > $reconCase.floss 115 | 116 | ## lets run file data and record it to a properties file 117 | echo "Recording basic file details ..." 118 | echo "=======================================================================" > $reconCase.properties 119 | ### note that we start appending to the .properties file now with >> instead of > 120 | echo "Origin URL:" >> $reconCase.properties 121 | echo "--------------------" >> $reconCase.properties 122 | echo "$reconURL" >> $reconCase.properties 123 | echo "$reconURL" > $reconCase.url 124 | 125 | echo "" >> $reconCase.properties 126 | echo "File Information:" >> $reconCase.properties 127 | echo "--------------------" >> $reconCase.properties 128 | file $reconCase.malware | cut -d " " -f2- >> $reconCase.properties 129 | echo "" >> $reconCase.properties 130 | 131 | ### sprinkle in the hashes 132 | echo "MD5 & SHA256 Hashes:" >> $reconCase.properties 133 | echo "--------------------" >> $reconCase.properties 134 | cat $reconCase.md5 >> $reconCase.properties 135 | cat $reconCase.sha256 >> $reconCase.properties 136 | echo "" >> $reconCase.properties 137 | 138 | ### listen to your dentist and floss between meals... 139 | if [ -s $reconCase.floss ] 140 | then # If the .floss file isn't empty, recap the important stuff 141 | echo "FLOSS Findings:" >> $reconCase.properties 142 | echo "--------------------" >> $reconCase.properties 143 | cat $reconCase.floss | grep "FLOSS decoded" >> $reconCase.properties 144 | cat $reconCase.floss | grep "FLOSS extracted" >> $reconCase.properties 145 | else # If the .floss file is empty, delete it. 146 | rm -f $reconCase.floss 147 | fi 148 | echo "" >> $reconCase.properties 149 | 150 | ### add a few spoonfuls of od (file header) 151 | od -bc $reconCase.malware | head > $reconCase.header 152 | echo "File Header:" >> $reconCase.properties 153 | echo "--------------------" >> $reconCase.properties 154 | cat $reconCase.header >> $reconCase.properties 155 | echo "" >> $reconCase.properties 156 | echo "" >> $reconCase.properties 157 | echo "=======================================================================" >> $reconCase.properties 158 | 159 | # Set permissions 160 | echo "Setting permissions ..." 161 | chmod $reconPermissions $reconCase.* 162 | 163 | # Zip it! Zip it good! 164 | echo -e "Compressing and encrypting to \033[38;5;254m7z file\033[0m ..." 165 | 7z a $reconCase.7z * -mhe -mx9 -p$reconPass > /dev/null 2>&1 166 | 167 | # Create companion password file 168 | echo -e "Writing \033[38;5;254mpassword file\033[0m ..." 169 | echo -e "$reconPass" > $reconCase.password 170 | 171 | # That's a wrap! 172 | echo -e "\033[30;48;5;82mDone.\033[0m" 173 | echo "" 174 | echo "Probable file type:" 175 | file $reconCase.malware | cut -d " " -f2- # Echo the supposed file type 176 | echo "" 177 | if [ ! -f $reconCase.floss ] # Does the .floss file exist? 178 | then # No 179 | echo "FLOSS not installed, or empty file." 180 | else # Yes 181 | cat $reconCase.floss | grep "FLOSS decoded" 182 | cat $reconCase.floss | grep "FLOSS extracted" 183 | fi 184 | echo "" 185 | echo -e "To see output files, navigate: \e[38;5;214mcd $reconPath/$reconCase\033[0m\n" 186 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | --------------------------------------------------------------------------------