diff --git a/README.md b/README.md
index 3558b6729..0db36c56f 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
# ESET-KeyGen
-ESET-KeyGen - Trial-Key & Account generator for ESET Antivirus (last test was on 10.10.2024 at 03:49 UTC+3)
+ESET-KeyGen - Trial-Key & Account generator for ESET Antivirus (last test was on 10.10.2024 at 13:12 UTC+3)
# Project Preview
![](img/project_preview.png)
diff --git a/img/project_preview.png b/img/project_preview.png
index 07e578f96..4eb1d87ad 100644
Binary files a/img/project_preview.png and b/img/project_preview.png differ
diff --git a/main.py b/main.py
index d6d0cc149..b0549a865 100644
--- a/main.py
+++ b/main.py
@@ -1,7 +1,7 @@
from modules.EmailAPIs import *
# ---- Quick settings [for Developers to quickly change behavior without changing all files] ----
-VERSION = ['v1.5.1.2', 1512]
+VERSION = ['v1.5.2.0', 1520]
LOGO = f"""
███████╗███████╗███████╗████████╗ ██╗ ██╗███████╗██╗ ██╗ ██████╗ ███████╗███╗ ██╗
██╔════╝██╔════╝██╔════╝╚══██╔══╝ ██║ ██╔╝██╔════╝╚██╗ ██╔╝██╔════╝ ██╔════╝████╗ ██║
@@ -34,7 +34,7 @@
'key': True,
'small_business_key': False,
- 'endpoint_key': False,
+ 'advanced_key': False,
'vpn_codes': False,
'account': False,
'protecthub_account': False,
@@ -110,7 +110,7 @@ def RunMenu():
args,
title='Modes of operation',
action='store_true',
- args_names=['key', 'small-business-key', 'endpoint-key', 'vpn-codes', 'account', 'protecthub-account', 'only-webdriver-update', 'update'],
+ args_names=['key', 'small-business-key', 'advanced-key', 'vpn-codes', 'account', 'protecthub-account', 'only-webdriver-update', 'update'],
default_value='key')
)
SettingMenu.add_item(
@@ -213,7 +213,7 @@ def parse_argv():
args_modes = args_parser.add_mutually_exclusive_group(required=True)
args_modes.add_argument('--key', action='store_true', help='Creating a license key for ESET Smart Security Premium')
args_modes.add_argument('--small-business-key', action='store_true', help='Creating a license key for ESET Small Business Security (1 key - 5 devices)')
- args_modes.add_argument('--endpoint-key', action='store_true', help='Creating a license key for ESET Endpoint Security')
+ args_modes.add_argument('--advanced-key', action='store_true', help='Creating a license key for ESET PROTECT Advanced (1 key - 25 devices)')
args_modes.add_argument('--vpn-codes', action='store_true', help='Creating 10 codes for ESET VPN + 1 ESET Small Business Security key')
args_modes.add_argument('--account', action='store_true', help='Creating a ESET HOME Account (To activate the free trial version)')
args_modes.add_argument('--protecthub-account', action='store_true', help='Creating a ESET ProtectHub Account (To activate the free trial version)')
@@ -248,11 +248,12 @@ def main(disable_exit=False):
if not args['update']:
if platform.release() == '7' and sys.platform.startswith('win'): # fix for Windows 7
args['no_headless'] = True
- elif args['endpoint_key'] or args['protecthub_account']:
+ elif args['advanced_key'] or args['protecthub_account']:
args['no_headless'] = True
if not args['custom_email_api']:
- if args['email_api'] not in ['mailticking', 'developermail']:
- raise RuntimeError('--endpoint-key, --protecthub-account works ONLY if you use the --custom-email-api argument or the following Email APIs: mailticking, developermail!!!')
+ if args['email_api'] not in ['mailticking']:
+ raise RuntimeError('--advanced-key, --protecthub-account works ONLY if you use the --custom-email-api argument or the following Email APIs: mailticking!!!')
+
# check program updates
if args['update']:
print(f'{Fore.LIGHTMAGENTA_EX}-- Updater --{Fore.RESET}\n')
@@ -278,6 +279,7 @@ def main(disable_exit=False):
console_log('Project up to date!!!\n', OK)
except:
pass
+
# initialization and configuration of everything necessary for work
driver = None
webdriver_path = None
@@ -382,7 +384,7 @@ def main(disable_exit=False):
])
# ESET ProtectHub
- elif args['protecthub_account'] or args['endpoint_key']:
+ elif args['protecthub_account'] or args['advanced_key']:
EPHR_obj = EPHR(email_obj, eset_password, driver)
EPHR_obj.createAccount()
EPHR_obj.confirmAccount()
@@ -396,7 +398,7 @@ def main(disable_exit=False):
''
])
output_filename = 'ESET ACCOUNTS.txt'
- if args['endpoint_key']:
+ if args['advanced_key']:
output_filename = 'ESET KEYS.txt'
EPHK_obj = EPHK(email_obj, eset_password, driver)
license_name, license_key, license_out_date = EPHK_obj.getLicenseData()
@@ -455,4 +457,4 @@ def main(disable_exit=False):
else:
main(disable_exit=True)
except KeyboardInterrupt:
- continue
+ continue
\ No newline at end of file
diff --git a/modules/EsetTools.py b/modules/EsetTools.py
index b3841e670..2fde1633d 100644
--- a/modules/EsetTools.py
+++ b/modules/EsetTools.py
@@ -185,10 +185,11 @@ def createAccount(self):
console_log('\nData filling...', INFO)
exec_js(f'return {GET_EBID}("email-input")').send_keys(self.email_obj.email)
exec_js(f'return {GET_EBID}("company-name-input")').send_keys(dataGenerator(10))
- # Select Ukraine country
+ # Select country
exec_js(f"return {GET_EBID}('country-select')").click()
+ selected_country = 'Ukraine'
for country in self.driver.find_elements('xpath', '//div[starts-with(@class, "select")]'):
- if country.text == 'Ukraine':
+ if country.text == selected_country:
country.click()
break
exec_js(f'return {GET_EBID}("company-vat-input")').send_keys(dataGenerator(10, True))
@@ -241,7 +242,7 @@ def confirmAccount(self):
token = parseToken(self.email_obj, self.driver, True, max_iter=100, delay=3)
self.driver.switch_to.window(self.window_handle)
else:
- token = parseToken(self.email_obj, eset_business=True, max_iter=100, delay=3) # 1secmail, developermail
+ token = parseToken(self.email_obj, eset_business=True, max_iter=100, delay=3) # 1secmail
console_log(f'ProtectHub-Token: {token}', OK)
console_log('\nAccount confirmation is in progress...', INFO)
self.driver.get(f'https://protecthub.eset.com/public/activation/{token}/?culture=en-US')
@@ -260,7 +261,7 @@ def getLicenseData(self):
# Log in
console_log('\nLogging in to the created account...', INFO)
- self.driver.get('https://protecthub.eset.com/')
+ self.driver.get('https://protecthub.eset.com')
uCE(self.driver, f'return {GET_EBID}("username") != null')
exec_js(f'return {GET_EBID}("username")').send_keys(self.email_obj.email)
exec_js(f'return {GET_EBID}("password")').send_keys(self.eset_password)
@@ -275,13 +276,20 @@ def getLicenseData(self):
exec_js(f'return {GET_EBID}("welcome-dialog-generate-trial-license")').click()
except:
pass
+
+ # Waiting for a response from the site
license_is_being_generated = False
for _ in range(DEFAULT_MAX_ITER):
try:
- r = exec_js(f"return {GET_EBCN}('Toastify__toast-body toastBody')[0].innerText")
- if r.lower().find('a trial license is being generated') != -1:
+ r = exec_js(f"return {GET_EBCN}('Toastify__toast-body toastBody')[0].innerText").lower()
+ if r.find('is being generated') != -1:
license_is_being_generated = True
console_log('Request successfully sent!', OK)
+ try:
+ exec_js(f'return {GET_EBID}("welcome-dialog-skip-button").click()')
+ exec_js(f'return {GET_EBID}("welcome-dialog-skip-button")').click()
+ except:
+ pass
break
except Exception as E:
pass
@@ -290,14 +298,60 @@ def getLicenseData(self):
if not license_is_being_generated:
raise RuntimeError('The request has not been sent!')
+ console_log('\nWaiting for a back response...', INFO)
+ license_was_generated = False
+ for _ in range(DEFAULT_MAX_ITER*10): # 5m
+ try:
+ r = exec_js(f"return {GET_EBCN}('Toastify__toast-body toastBody')[0].innerText").lower()
+ if r.find('couldn\'t be generated') != -1:
+ break
+ elif r.find('was generated') != -1:
+ console_log('Successfully!', OK)
+ license_was_generated = True
+ break
+ except Exception as E:
+ pass
+ time.sleep(DEFAULT_DELAY)
+
+ if not license_was_generated:
+ raise RuntimeError('The license cannot be generated, try again later!')
+
+ # Obtaining license data from the site
+ console_log('\n[Site] License uploads...', INFO)
+ license_name = 'ESET PROTECT Advanced'
+ try:
+ self.driver.get('https://protecthub.eset.com/licenses')
+ uCE(self.driver, f'return {GET_EBAV}("div", "data-label", "license-list-body-cell-renderer-row-0-column-0").innerText != ""')
+ license_id = exec_js(f'{DEFINE_GET_EBAV_FUNCTION}\nreturn {GET_EBAV}("div", "data-label", "license-list-body-cell-renderer-row-0-column-0").innerText')
+ console_log(f'License ID: {license_id}', OK)
+ console_log('\nGetting information from the license...', INFO)
+ self.driver.get(f'https://protecthub.eset.com/licenses/details/2/{license_id}/overview')
+ uCE(self.driver, f'return {GET_EBAV}("div", "data-label", "license-overview-validity-value") != null')
+ license_out_date = exec_js(f'{DEFINE_GET_EBAV_FUNCTION}\nreturn {GET_EBAV}("div", "data-label", "license-overview-validity-value").children[0].children[0].innerText')
+ # Obtaining license key
+ exec_js(f'{DEFINE_GET_EBAV_FUNCTION}\n{GET_EBAV}("div", "data-label", "license-overview-key-value").children[0].children[0].click()')
+ uCE(self.driver, f'return {GET_EBID}("show-license-key-auth-modal-password-input") != null')
+ exec_js(f'return {GET_EBID}("show-license-key-auth-modal-password-input")').send_keys(self.eset_password)
+ try:
+ exec_js(f'return {GET_EBID}("show-license-key-auth-modal-authenticate").click()')
+ exec_js(f'return {GET_EBID}("show-license-key-auth-modal-authenticate")').click()
+ except:
+ pass
+ time.sleep(5)
+ uCE(self.driver, f'return {GET_EBAV}("div", "data-label", "license-overview-key-value") != null')
+ license_key = exec_js(f'return {GET_EBAV}("div", "data-label", "license-overview-key-value").children[0].textContent').split(' ')[0].strip()
+ console_log('Information successfully received!', OK)
+ return license_name, license_key, license_out_date
+ except:
+ pass
+ # Obtaining license data from the email
+ console_log('\n[Email] License uploads...', INFO)
if self.email_obj.class_name == 'custom':
console_log('\nWait for a message to your e-mail about successful key generation!!!', WARN, True)
return None, None, None
else:
- console_log('\nLicense uploads...', INFO)
- license_key, license_out_date, license_id = parseEPHKey(self.email_obj, self.driver, delay=5, max_iter=60)
+ license_key, license_out_date, license_id = parseEPHKey(self.email_obj, self.driver, delay=5, max_iter=30) # 2m
console_log(f'License ID: {license_id}', OK)
console_log('\nGetting information from the license...', INFO)
console_log('Information successfully received!', OK)
- license_name = 'ESET Endpoint Security + ESET Server Security'
- return license_name, license_key, license_out_date
+ return license_name, license_key, license_out_date
\ No newline at end of file
diff --git a/modules/SharedTools.py b/modules/SharedTools.py
index bdd65893f..05b77a93c 100644
--- a/modules/SharedTools.py
+++ b/modules/SharedTools.py
@@ -239,7 +239,7 @@ def parseToken(email_obj, driver=None, eset_business=False, delay=DEFAULT_DELAY,
inbox = email_obj.parse_inbox()
for mail in inbox:
mail_id, mail_from, mail_subject = mail
- if mail_from.find('product.eset.com') != -1 or mail_from.find('ESET HOME') or mail_subject.find('ESET PROTECT Hub') != -1:
+ if mail_from.find('product.eset.com') != -1 or mail_from.find('ESET HOME') != -1 or mail_subject.find('ESET PROTECT Hub') != -1:
email_obj.open_mail(mail_id)
if email_obj.class_name == 'mailticking':
time.sleep(1.5)
diff --git a/wiki/AccountGenerator.md b/wiki/AccountGenerator.md
index 1a32f94c4..aa70c94b3 100644
--- a/wiki/AccountGenerator.md
+++ b/wiki/AccountGenerator.md
@@ -18,7 +18,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --account
```
```
- ESET-KeyGen_v1.5.0.8_win64.exe --chrome --account
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --account
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -36,7 +36,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --business-account
```
```
- ESET-KeyGen_v1.5.0.8_win64.exe --chrome --protecthub-account
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --protecthub-account
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -60,7 +60,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --account --custom-email-api
```
```
- ESET-KeyGen_v1.5.0.8_win64.exe --chrome --account --custom-email-api
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --account --custom-email-api
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -91,7 +91,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --protecthub-account --custom-email-api
```
```
- ESET-KeyGen_v1.5.0.8_win64.exe --chrome --protecthub-account --custom-email-api
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --protecthub-account --custom-email-api
```
> File name is unique for each version! Do not copy the above command. This is an example!
diff --git a/wiki/CommandLineArguments.md b/wiki/CommandLineArguments.md
index dd2f8555e..82a0dbe0b 100644
--- a/wiki/CommandLineArguments.md
+++ b/wiki/CommandLineArguments.md
@@ -18,10 +18,10 @@
| --------------------- | ---------------------------------------------------------------------------------------------------------- |
| --key | Creating a license key for ESET Smart Security Premium |
| --small-business-key | Creating a license key for ESET Small Business Security (1 key - 5 devices) |
-| --endpoint-key | Creating a license key for ESET Endpoint Security - works only with ```--email-api developermail``` and ```--custom-email-api``` |
+| --advanced-key | Creating a license key for ESET PROTECT Advanced (1 key - 25 devices) - works only with ```--email-api mailticking``` and ```--custom-email-api``` |
| --vpn-codes | Creating 10 codes for ESET VPN + 1 ESET Small Business Security key |
| --account | Creating an ESET HOME Account (To activate the free trial version) |
-| --protecthub-account | Creating a ESET ProtectHub Account (To activate the free trial version) - works only with ```--email-api developermail``` and ```--custom-email-api``` |
+| --protecthub-account | Creating a ESET ProtectHub Account (To activate the free trial version) - works only with ```--email-api mailticking``` and ```--custom-email-api``` |
| --only-webdriver-update | Updates/installs webdrivers and browsers without generating accounts and license keys |
| --update | Switching to program update mode - **Overrides all arguments that are available** |
--------------------------------------------------------------------------------------------------------------------------------------
diff --git a/wiki/KeyGenerator.md b/wiki/KeyGenerator.md
index 549b5f2ea..1b2c69085 100644
--- a/wiki/KeyGenerator.md
+++ b/wiki/KeyGenerator.md
@@ -18,7 +18,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --key
```
```
- ESET-KeyGen_v1.5.1.0_win64.exe --chrome --key
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --key
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -36,7 +36,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --small-business-key
```
```
- ESET-KeyGen_v1.5.1.0_win64.exe --chrome --small-business-key
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --small-business-key
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -47,18 +47,18 @@ Add a command-line argument: ```--repeat {number}```
- ESET Endpoint Security + ESET Server Security
+ ESET PROTECT Advanced (ESET Endpoint Security + ESET Server Security, ESET LiveGuard Advanced for Endpoint Security + Server Security, ESET Mobile Threat Defense, ESET Full Disk Encryption)
1. Run main.py or executable file use [MBCI](https://github.com/rzc0d3r/ESET-KeyGen/blob/main/wiki/MBCI-Inferface.md):
```
- python main.py --chrome --endpoint-key
+ python main.py --chrome --advanced-key
```
```
- ESET-KeyGen_v1.5.1.0_win64.exe --chrome --endpoint-key
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --advanced-key
```
> File name is unique for each version! Do not copy the above command. This is an example!
- > **Works ONLY if you use the ```--custom-email-api``` argument or the following ```Email APIs```: ```mailticking```, ```developermail```**
+ > **Works ONLY if you use the ```--custom-email-api``` argument or the following ```Email APIs```: ```mailticking```**
2. Wait until appears you will see *"Solve the captcha on the page manually!!!"*. Next, you will see a captcha with text input in the browser window created. You solve it and then just do nothing, the algorithm will do everything for you!
@@ -76,7 +76,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --vpn-codes
```
```
- ESET-KeyGen_v1.5.1.0_win64.exe --chrome --vpn-codes
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --vpn-codes
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -97,7 +97,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --key --custom-email-api
```
```
- ESET-KeyGen_v1.5.1.0_win64.exe --chrome --key --custom-email-api
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --key --custom-email-api
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -107,7 +107,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --small-business-key --custom-email-api
```
```
- ESET-KeyGen_v1.5.1.0_win64.exe --chrome --small-business-key --custom-email-api
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --small-business-key --custom-email-api
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -135,14 +135,14 @@ Add a command-line argument: ```--repeat {number}```
- ESET Endpoint Security + ESET Server Security
+ ESET PROTECT Advanced (ESET Endpoint Security + ESET Server Security, ESET LiveGuard Advanced for Endpoint Security + Server Security, ESET Mobile Threat Defense, ESET Full Disk Encryption)
1. Run main.py or executable file use [MBCI](https://github.com/rzc0d3r/ESET-KeyGen/blob/main/wiki/MBCI-Inferface.md):
```
- python main.py --chrome --endpoint-key --custom-email-api
+ python main.py --chrome --advanced-key --custom-email-api
```
```
- ESET-KeyGen_v1.5.1.0_win64.exe --chrome --endpoint-key --custom-email-api
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --advanced-key --custom-email-api
```
> File name is unique for each version! Do not copy the above command. This is an example!
@@ -185,7 +185,7 @@ Add a command-line argument: ```--repeat {number}```
python main.py --chrome --vpn-codes --custom-email-api
```
```
- ESET-KeyGen_v1.5.1.0_win64.exe --chrome --vpn-codes --custom-email-api
+ ESET-KeyGen_v1.5.2.0_win64.exe --chrome --vpn-codes --custom-email-api
```
> File name is unique for each version! Do not copy the above command. This is an example!