├── setup.bat
├── examples
├── unobfuscated.py
└── obfuscated.py
├── README.md
├── kramer.py
└── LICENSE
/setup.bat:
--------------------------------------------------------------------------------
1 | python -m pip install pystyle==0.6
--------------------------------------------------------------------------------
/examples/unobfuscated.py:
--------------------------------------------------------------------------------
1 | input("Hello there!")
--------------------------------------------------------------------------------
/examples/obfuscated.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/billythegoat356/Kramer/HEAD/examples/obfuscated.py
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | -----
2 |
3 |
4 |
5 |
6 |
7 | -----
8 |
9 | ### 🐸 Kramer 🐸
10 |
11 |
12 |
13 |
14 | First of all, if you're looking for the BEST fully Python obfuscator, you should check Hyperion!
15 |
16 | Kramer is a next level obfuscation tool written in Python3 allowing you to obfuscate
17 |
18 | your Python3 code easily and securely. It uses Berserker's obfuscation but in a more advanced way
19 |
20 | making your code really hard to be deobfuscated.
21 |
22 |
23 |
24 |
25 | -----
26 |
27 | ### 📋 Examples 📋
28 |
29 |
30 | **Unobfuscated**:
31 | ```python3
32 | input("Hello world!")
33 | ```
34 |
35 | **Obfuscated**:
36 | ```python3
37 | �������������������������������������������������������������
38 | ```
39 |
40 |
41 |
42 |
43 |
44 |
45 | -----
46 |
47 | ### ⭐ Features ⭐
48 |
49 |
50 | + This time you can be sure skids won't be able to get your code
51 |
52 | + Very fast execution
53 |
54 | + Easy to use
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | - The result file is not a python file (.PY) but a compiled python file (.PYC) renamed to .PY
63 |
64 | - Can't compile the file to exe (since it's basically a PYC file) but you can compile the PY file in the logs folder
65 |
66 | - Can be deobfuscated using a PYC decompilator then some Python algorithmic, but it requires a certain knowledge
67 |
68 |
69 | -----
70 |
71 | ### 🎯 Levels 🎯
72 |
73 | This section shows the "levels" of this project, from 0/5 ⚪ to 5/5 ⚫!
74 |
⚪🟢🔵🔴🟣⚫
75 |
76 |
77 | * Time: 🔴
78 | * Complexity: 🟣
79 | * Service: 🔴
80 |
81 |
82 | -----
83 |
84 | ###
💡 Ideas 💡
85 |
86 | Feel free to make a pull request on this repository to submit any idea!
87 |
88 |
89 | * Complexify the obfuscation
90 |
91 |
92 | -----
93 |
94 | ###
📌 Disclaimer 📌
95 |
96 |
97 | * ***Please use this program only for educational purposes.***
98 | * ***It is not meant to be used in any malicious way, and I decline any responsibility for what you do with it.***
99 |
100 |
101 | -----
102 |
103 | ### billythegoat356
104 |
--------------------------------------------------------------------------------
/kramer.py:
--------------------------------------------------------------------------------
1 | # by billythegoat356
2 |
3 | # https://github.com/billythegoat356/Kramer
4 |
5 |
6 |
7 | from random import choice, randint, shuffle
8 | from pystyle import Add, Center, Anime, Colors, Colorate, Write, System
9 | from os.path import isfile, isdir
10 | from py_compile import compile
11 | from os import listdir, mkdir, remove, rmdir, rename, chdir, name
12 | from shutil import move, copy, rmtree
13 | from time import sleep
14 | from binascii import hexlify
15 |
16 |
17 |
18 |
19 | strings = "abcdefghijklmnopqrstuvwxyz0123456789" # ne pas changer svp
20 |
21 |
22 | class Kyrie():
23 |
24 | def encrypt(e: str):
25 | e = Kyrie._ekyrie(e)
26 | return Kyrie._encrypt(e)
27 |
28 | def decrypt(e: str):
29 | text = Kyrie._decrypt(e)
30 | return Kyrie._dkyrie(text)
31 |
32 | def _ekyrie(text: str):
33 |
34 | r = ""
35 | for a in text:
36 | if a in strings:
37 | a = strings[strings.index(a)-1]
38 | r += a
39 | return r
40 |
41 | def _dkyrie(text: str):
42 | r = ""
43 | for a in text:
44 | if a in strings:
45 | i = strings.index(a)+1
46 | if i >= len(strings):
47 | i = 0
48 | a = strings[i]
49 | r += a
50 | return r
51 |
52 | def _encrypt(text: str, key: str = None):
53 | if type(key) == str:
54 | key = sum(ord(i) for i in key)
55 | t = [chr(ord(t)+key)if t != "\n" else "ζ" for t in text]
56 | return "".join(t)
57 |
58 | def _decrypt(text: str, key: str = None):
59 | if type(key) == str:
60 | key = sum(ord(i) for i in key)
61 | return "".join(chr(ord(t)-key) if t != "ζ" else "\n" for t in text)
62 |
63 |
64 | class Key:
65 |
66 | def encrypt(e: str, key: str):
67 | e1 = Kyrie._ekyrie(e)
68 | return Kyrie._encrypt(e1, key=key)
69 |
70 | def decrypt(e: str, key: str):
71 | text = Kyrie._decrypt(e, key=key)
72 | return Kyrie._dkyrie(text)
73 |
74 |
75 |
76 | def ran_int(min: int = 3, max: int = 1000000):
77 | return randint(min, max+1)
78 |
79 |
80 | def kramer(content: str, key: int) -> str:
81 |
82 | _content_ = Key.encrypt(content, key=key)
83 |
84 | _lines_sep_ = '/'
85 |
86 |
87 | content = _lines_sep_.join(hexlify(x.encode()).decode() for x in _content_)
88 |
89 | _names_ = ["_eval", "_exec", "_byte", "_bytes", "_bit", "_bits", "_system", "_encode", "_decode", "_delete", "_exit", "_rasputin", "_kramer"]
90 | _names_ = ["self." + name for name in _names_]
91 | shuffle(_names_)
92 |
93 | for k in range(12):
94 | globals()[f'n_{str(k+1)}'] = _names_[k]
95 |
96 |
97 | _types_ = ("str","float","bool","int")
98 |
99 | def _find(chars: str): return "+".join(f"_n7_[{list('abcdefghijklmnopqrstuvwxyz0123456789').index(c)}]" for c in chars)
100 |
101 | _1_ = fr"""_n5_""",fr"""lambda _n9_:"".join(__import__(_n7_[1]+_n7_[8]+_n7_[13]+_n7_[0]+_n7_[18]+_n7_[2]+_n7_[8]+_n7_[8]).unhexlify(str(_n10_)).decode()for _n10_ in str(_n9_).split('{_lines_sep_}'))"""
102 | _2_ = fr"""_n6_""",r"""lambda _n1_:str(_n4_[_n2_](f"{_n7_[4]+_n7_[-13]+_n7_[4]+_n7_[2]}(''.join(%s),{_n7_[6]+_n7_[11]+_n7_[14]+_n7_[1]+_n7_[0]+_n7_[11]+_n7_[18]}())"%list(_n1_))).encode(_n7_[20]+_n7_[19]+_n7_[5]+_n7_[34])if _n4_[_n2_]==eval else exit()"""
103 | _3_ = fr"""_n4_[_n2_]""",fr"""eval"""
104 | _4_ = fr"""_n1_""",fr"""lambda _n1_:exit()if _n7_[15]+_n7_[17]+_n7_[8]+_n7_[13]+_n7_[19] in open(__file__, errors=_n7_[8]+_n7_[6]+_n7_[13]+_n7_[14]+_n7_[17]+_n7_[4]).read() or _n7_[8]+_n7_[13]+_n7_[15]+_n7_[20]+_n7_[19] in open(__file__, errors=_n7_[8]+_n7_[6]+_n7_[13]+_n7_[14]+_n7_[17]+_n7_[4]).read()else"".join(_n1_ if _n1_ not in _n7_ else _n7_[_n7_.index(_n1_)+1 if _n7_.index(_n1_)+1exec:return(None,_n8_(_execute))[0]
116 | def __init__(self:object,_n1_:{choice(_types_)}=False,_n2_:{choice(_types_)}=0,*_n3_:{choice(_types_)},**_n4_:{choice(_types_)})->exec:
117 | {_vars_}
118 | return self.__decode__(_n4_[(_n7_[-1]+'_')[-1]+_n7_[18]+_n7_[15]+_n7_[0]+_n7_[17]+_n7_[10]+_n7_[11]+_n7_[4]])
119 | Kramer(_n1_=False,_n2_=False,_sparkle='''{content}''')""".strip().replace("_n1_",n_1.removeprefix("self.")).replace("_n2_",n_2.removeprefix("self.")).replace("_n3_",n_3.removeprefix("self.")).replace("_n4_",n_4.removeprefix("self.")).replace("_n5_",n_5).replace("_n6_",n_6).replace("_n7_",n_7).replace("_n8_",n_8).replace("_n9_",n_9.removeprefix("self.")).replace("_n10_",n_10.removeprefix("self.")).replace("_n12_",n_12.removeprefix("self."))
120 | return _final_content_
121 |
122 |
123 |
124 | System.Clear()
125 | System.Title("Kramer")
126 | System.Size(140, 45)
127 |
128 |
129 | text = '''
130 | <█> <█>
131 | <█> <█> <█><█><█><█> <█><█><█> <█><█><█><█>
132 | <█> <█> <█> <█> <█> <█> <█> <█> <█> <█><█><█>
133 | <█><█> <█> <█> <█> <█> <█> <█> <█> <█> <█> <█>
134 | <█><█> <█> <█> <█><█><█><█><█> <█> <█> <█> <█> <█>
135 | <█> <█> <█><█><█> <█> <█> <█> <█> <█><█><█> <█><█><█>
136 | <█> <█> <█> <█> <█> <█> <█> <█> <█> <█> <█>
137 | <█> <█> <█> <█> <█> <█> <█> <█> <█> <█> <█>
138 | <█> <█> <█> <█> <█> <█> <█>
139 | <█> <█> <█><█><█><█> <█>
140 | '''[1:]
141 |
142 |
143 | banner = r"""
144 | xXXXXXXXXXXx
145 | xX Xx
146 | X X
147 | X XxXXxX X
148 | X x x X
149 | X XX X
150 | XX X /~~\ /~~\ X XX
151 | XX X X | o \ / o | X X XX
152 | XX X X \____/ \____/ X X XX
153 | XXXXX XX \ /\ ,/ XX XXXXX
154 | X XX%;;@ \ / \ ,/ @%%;XX X
155 | X X @%%;;@ X X @%%;;@ X X
156 | X X @%%;;@ X ; ; ; ; X @%%;;@ X X
157 | X X @%%;;@ @%%;;@ X X
158 | X X @%%;;@ @%%;;@ X X
159 | X X @%%;;@ @%%;;@ X X
160 | XX X @%%;;@ @%%;;@ X XX
161 | XXX @%%;;@ @%%;;@ XXX
162 | @%%;;%%;;@
163 | @%%;;@
164 | @%%;;@..@@
165 | @@@ @@@
166 | """[1:]
167 |
168 |
169 |
170 |
171 |
172 | Anime.Fade(Center.Center(banner), Colors.red_to_yellow, Colorate.Vertical, enter=True)
173 |
174 | def main():
175 | System.Clear()
176 |
177 | print("\n"*2)
178 | print(Colorate.Diagonal(Colors.red_to_yellow, Center.XCenter(text)))
179 | print("\n"*5)
180 |
181 |
182 | _file = Write.Input("Drag your Python file -> ", Colors.red_to_yellow, interval=0.005)
183 |
184 |
185 |
186 | if not _file.strip() or not isfile(_file):
187 | Colorate.Error("This file does not exist!")
188 | return
189 |
190 | if '\\' in _file:
191 | file = _file.split('\\')[-1]
192 | elif '/' in _file:
193 | file = _file.split('/')[-1]
194 | else:
195 | file = _file
196 |
197 | with open(_file, 'r', encoding='utf-8', errors='ignore') as f:
198 | content = f.read()
199 |
200 | with open(file, 'w', encoding='utf-8', errors='ignore') as f:
201 | f.write(content)
202 |
203 | # print()
204 | # key = Write.Input("Enter your encryption key (3 - 1000000) -> ", Colors.red_to_yellow, interval=0.005)
205 | key = ran_int(max=1000000)
206 |
207 | try:
208 | key = int(key)
209 | except ValueError:
210 | Colorate.Error("Invalid key!")
211 | return
212 |
213 | if key < 3 or key > 1000000:
214 | Colorate.Error("Invalid key!")
215 | return
216 |
217 |
218 | file = file.removesuffix(".py") + "-obf.py" # hello hideaki
219 |
220 | content = kramer(content=content, key=key)
221 | with open(file, 'w', encoding='utf-8') as f:
222 | f.write(content)
223 |
224 | print('\n')
225 |
226 | print(Colorate.Diagonal(Colors.red_to_yellow, f"""Crypting with Kyrie Eleison...
227 | Using key {key}...
228 | Separating lines and spaces...
229 | Encoding in ASCII...
230 | Generating random variables names...
231 | Generating two random numbers...
232 | Creating the vars...
233 | Shuffling the vars...
234 | Adding the vars...
235 | Making the final content..."""))
236 |
237 | print()
238 |
239 | compile(file)
240 |
241 | logsfolder = "logs"
242 |
243 | if isdir(logsfolder):
244 | rmtree(logsfolder)
245 |
246 | mkdir(logsfolder)
247 |
248 | copy(file, logsfolder)
249 |
250 |
251 | for _file in listdir("__pycache__"):
252 | move(f"__pycache__/{_file}", ".")
253 | break
254 |
255 | sleep(0.025)
256 | rmdir("__pycache__")
257 |
258 | if isfile(file):
259 | remove(file)
260 |
261 | copy(_file, logsfolder)
262 |
263 | rename(logsfolder+ '/' + _file, logsfolder+ '/' + file + 'c')
264 |
265 | rename(_file, file)
266 |
267 |
268 | print(Colorate.Diagonal(Colors.red_to_yellow, """Creating PYC file...
269 | Moving the PYC file...
270 | Deleting '__pycache__' folder...
271 | Renaming PYC file..."""))
272 |
273 | print('\n')
274 |
275 | Write.Input("Built!", Colors.red_to_yellow, interval=0.005)
276 | return exit()
277 |
278 | if __name__ == '__main__':
279 | while True:
280 | main()
281 |
282 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Eclipse Public License - v 2.0
2 |
3 | THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
4 | PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
5 | OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
6 |
7 | 1. DEFINITIONS
8 |
9 | "Contribution" means:
10 |
11 | a) in the case of the initial Contributor, the initial content
12 | Distributed under this Agreement, and
13 |
14 | b) in the case of each subsequent Contributor:
15 | i) changes to the Program, and
16 | ii) additions to the Program;
17 | where such changes and/or additions to the Program originate from
18 | and are Distributed by that particular Contributor. A Contribution
19 | "originates" from a Contributor if it was added to the Program by
20 | such Contributor itself or anyone acting on such Contributor's behalf.
21 | Contributions do not include changes or additions to the Program that
22 | are not Modified Works.
23 |
24 | "Contributor" means any person or entity that Distributes the Program.
25 |
26 | "Licensed Patents" mean patent claims licensable by a Contributor which
27 | are necessarily infringed by the use or sale of its Contribution alone
28 | or when combined with the Program.
29 |
30 | "Program" means the Contributions Distributed in accordance with this
31 | Agreement.
32 |
33 | "Recipient" means anyone who receives the Program under this Agreement
34 | or any Secondary License (as applicable), including Contributors.
35 |
36 | "Derivative Works" shall mean any work, whether in Source Code or other
37 | form, that is based on (or derived from) the Program and for which the
38 | editorial revisions, annotations, elaborations, or other modifications
39 | represent, as a whole, an original work of authorship.
40 |
41 | "Modified Works" shall mean any work in Source Code or other form that
42 | results from an addition to, deletion from, or modification of the
43 | contents of the Program, including, for purposes of clarity any new file
44 | in Source Code form that contains any contents of the Program. Modified
45 | Works shall not include works that contain only declarations,
46 | interfaces, types, classes, structures, or files of the Program solely
47 | in each case in order to link to, bind by name, or subclass the Program
48 | or Modified Works thereof.
49 |
50 | "Distribute" means the acts of a) distributing or b) making available
51 | in any manner that enables the transfer of a copy.
52 |
53 | "Source Code" means the form of a Program preferred for making
54 | modifications, including but not limited to software source code,
55 | documentation source, and configuration files.
56 |
57 | "Secondary License" means either the GNU General Public License,
58 | Version 2.0, or any later versions of that license, including any
59 | exceptions or additional permissions as identified by the initial
60 | Contributor.
61 |
62 | 2. GRANT OF RIGHTS
63 |
64 | a) Subject to the terms of this Agreement, each Contributor hereby
65 | grants Recipient a non-exclusive, worldwide, royalty-free copyright
66 | license to reproduce, prepare Derivative Works of, publicly display,
67 | publicly perform, Distribute and sublicense the Contribution of such
68 | Contributor, if any, and such Derivative Works.
69 |
70 | b) Subject to the terms of this Agreement, each Contributor hereby
71 | grants Recipient a non-exclusive, worldwide, royalty-free patent
72 | license under Licensed Patents to make, use, sell, offer to sell,
73 | import and otherwise transfer the Contribution of such Contributor,
74 | if any, in Source Code or other form. This patent license shall
75 | apply to the combination of the Contribution and the Program if, at
76 | the time the Contribution is added by the Contributor, such addition
77 | of the Contribution causes such combination to be covered by the
78 | Licensed Patents. The patent license shall not apply to any other
79 | combinations which include the Contribution. No hardware per se is
80 | licensed hereunder.
81 |
82 | c) Recipient understands that although each Contributor grants the
83 | licenses to its Contributions set forth herein, no assurances are
84 | provided by any Contributor that the Program does not infringe the
85 | patent or other intellectual property rights of any other entity.
86 | Each Contributor disclaims any liability to Recipient for claims
87 | brought by any other entity based on infringement of intellectual
88 | property rights or otherwise. As a condition to exercising the
89 | rights and licenses granted hereunder, each Recipient hereby
90 | assumes sole responsibility to secure any other intellectual
91 | property rights needed, if any. For example, if a third party
92 | patent license is required to allow Recipient to Distribute the
93 | Program, it is Recipient's responsibility to acquire that license
94 | before distributing the Program.
95 |
96 | d) Each Contributor represents that to its knowledge it has
97 | sufficient copyright rights in its Contribution, if any, to grant
98 | the copyright license set forth in this Agreement.
99 |
100 | e) Notwithstanding the terms of any Secondary License, no
101 | Contributor makes additional grants to any Recipient (other than
102 | those set forth in this Agreement) as a result of such Recipient's
103 | receipt of the Program under the terms of a Secondary License
104 | (if permitted under the terms of Section 3).
105 |
106 | 3. REQUIREMENTS
107 |
108 | 3.1 If a Contributor Distributes the Program in any form, then:
109 |
110 | a) the Program must also be made available as Source Code, in
111 | accordance with section 3.2, and the Contributor must accompany
112 | the Program with a statement that the Source Code for the Program
113 | is available under this Agreement, and informs Recipients how to
114 | obtain it in a reasonable manner on or through a medium customarily
115 | used for software exchange; and
116 |
117 | b) the Contributor may Distribute the Program under a license
118 | different than this Agreement, provided that such license:
119 | i) effectively disclaims on behalf of all other Contributors all
120 | warranties and conditions, express and implied, including
121 | warranties or conditions of title and non-infringement, and
122 | implied warranties or conditions of merchantability and fitness
123 | for a particular purpose;
124 |
125 | ii) effectively excludes on behalf of all other Contributors all
126 | liability for damages, including direct, indirect, special,
127 | incidental and consequential damages, such as lost profits;
128 |
129 | iii) does not attempt to limit or alter the recipients' rights
130 | in the Source Code under section 3.2; and
131 |
132 | iv) requires any subsequent distribution of the Program by any
133 | party to be under a license that satisfies the requirements
134 | of this section 3.
135 |
136 | 3.2 When the Program is Distributed as Source Code:
137 |
138 | a) it must be made available under this Agreement, or if the
139 | Program (i) is combined with other material in a separate file or
140 | files made available under a Secondary License, and (ii) the initial
141 | Contributor attached to the Source Code the notice described in
142 | Exhibit A of this Agreement, then the Program may be made available
143 | under the terms of such Secondary Licenses, and
144 |
145 | b) a copy of this Agreement must be included with each copy of
146 | the Program.
147 |
148 | 3.3 Contributors may not remove or alter any copyright, patent,
149 | trademark, attribution notices, disclaimers of warranty, or limitations
150 | of liability ("notices") contained within the Program from any copy of
151 | the Program which they Distribute, provided that Contributors may add
152 | their own appropriate notices.
153 |
154 | 4. COMMERCIAL DISTRIBUTION
155 |
156 | Commercial distributors of software may accept certain responsibilities
157 | with respect to end users, business partners and the like. While this
158 | license is intended to facilitate the commercial use of the Program,
159 | the Contributor who includes the Program in a commercial product
160 | offering should do so in a manner which does not create potential
161 | liability for other Contributors. Therefore, if a Contributor includes
162 | the Program in a commercial product offering, such Contributor
163 | ("Commercial Contributor") hereby agrees to defend and indemnify every
164 | other Contributor ("Indemnified Contributor") against any losses,
165 | damages and costs (collectively "Losses") arising from claims, lawsuits
166 | and other legal actions brought by a third party against the Indemnified
167 | Contributor to the extent caused by the acts or omissions of such
168 | Commercial Contributor in connection with its distribution of the Program
169 | in a commercial product offering. The obligations in this section do not
170 | apply to any claims or Losses relating to any actual or alleged
171 | intellectual property infringement. In order to qualify, an Indemnified
172 | Contributor must: a) promptly notify the Commercial Contributor in
173 | writing of such claim, and b) allow the Commercial Contributor to control,
174 | and cooperate with the Commercial Contributor in, the defense and any
175 | related settlement negotiations. The Indemnified Contributor may
176 | participate in any such claim at its own expense.
177 |
178 | For example, a Contributor might include the Program in a commercial
179 | product offering, Product X. That Contributor is then a Commercial
180 | Contributor. If that Commercial Contributor then makes performance
181 | claims, or offers warranties related to Product X, those performance
182 | claims and warranties are such Commercial Contributor's responsibility
183 | alone. Under this section, the Commercial Contributor would have to
184 | defend claims against the other Contributors related to those performance
185 | claims and warranties, and if a court requires any other Contributor to
186 | pay any damages as a result, the Commercial Contributor must pay
187 | those damages.
188 |
189 | 5. NO WARRANTY
190 |
191 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
192 | PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
193 | BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
194 | IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
195 | TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
196 | PURPOSE. Each Recipient is solely responsible for determining the
197 | appropriateness of using and distributing the Program and assumes all
198 | risks associated with its exercise of rights under this Agreement,
199 | including but not limited to the risks and costs of program errors,
200 | compliance with applicable laws, damage to or loss of data, programs
201 | or equipment, and unavailability or interruption of operations.
202 |
203 | 6. DISCLAIMER OF LIABILITY
204 |
205 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
206 | PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
207 | SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
208 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
209 | PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
210 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
211 | ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
212 | EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
213 | POSSIBILITY OF SUCH DAMAGES.
214 |
215 | 7. GENERAL
216 |
217 | If any provision of this Agreement is invalid or unenforceable under
218 | applicable law, it shall not affect the validity or enforceability of
219 | the remainder of the terms of this Agreement, and without further
220 | action by the parties hereto, such provision shall be reformed to the
221 | minimum extent necessary to make such provision valid and enforceable.
222 |
223 | If Recipient institutes patent litigation against any entity
224 | (including a cross-claim or counterclaim in a lawsuit) alleging that the
225 | Program itself (excluding combinations of the Program with other software
226 | or hardware) infringes such Recipient's patent(s), then such Recipient's
227 | rights granted under Section 2(b) shall terminate as of the date such
228 | litigation is filed.
229 |
230 | All Recipient's rights under this Agreement shall terminate if it
231 | fails to comply with any of the material terms or conditions of this
232 | Agreement and does not cure such failure in a reasonable period of
233 | time after becoming aware of such noncompliance. If all Recipient's
234 | rights under this Agreement terminate, Recipient agrees to cease use
235 | and distribution of the Program as soon as reasonably practicable.
236 | However, Recipient's obligations under this Agreement and any licenses
237 | granted by Recipient relating to the Program shall continue and survive.
238 |
239 | Everyone is permitted to copy and distribute copies of this Agreement,
240 | but in order to avoid inconsistency the Agreement is copyrighted and
241 | may only be modified in the following manner. The Agreement Steward
242 | reserves the right to publish new versions (including revisions) of
243 | this Agreement from time to time. No one other than the Agreement
244 | Steward has the right to modify this Agreement. The Eclipse Foundation
245 | is the initial Agreement Steward. The Eclipse Foundation may assign the
246 | responsibility to serve as the Agreement Steward to a suitable separate
247 | entity. Each new version of the Agreement will be given a distinguishing
248 | version number. The Program (including Contributions) may always be
249 | Distributed subject to the version of the Agreement under which it was
250 | received. In addition, after a new version of the Agreement is published,
251 | Contributor may elect to Distribute the Program (including its
252 | Contributions) under the new version.
253 |
254 | Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
255 | receives no rights or licenses to the intellectual property of any
256 | Contributor under this Agreement, whether expressly, by implication,
257 | estoppel or otherwise. All rights in the Program not expressly granted
258 | under this Agreement are reserved. Nothing in this Agreement is intended
259 | to be enforceable by any entity that is not a Contributor or Recipient.
260 | No third-party beneficiary rights are created under this Agreement.
261 |
262 | Exhibit A - Form of Secondary Licenses Notice
263 |
264 | "This Source Code may also be made available under the following
265 | Secondary Licenses when the conditions for such availability set forth
266 | in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
267 | version(s), and exceptions or additional permissions here}."
268 |
269 | Simply including a copy of this Agreement, including this Exhibit A
270 | is not sufficient to license the Source Code under Secondary Licenses.
271 |
272 | If it is not possible or desirable to put the notice in a particular
273 | file, then You may include the notice in a location (such as a LICENSE
274 | file in a relevant directory) where a recipient would be likely to
275 | look for such a notice.
276 |
277 | You may add additional accurate notices of copyright ownership.
278 |
--------------------------------------------------------------------------------