From 1127d7090df632259c7688f31808d1f7752b41b4 Mon Sep 17 00:00:00 2001 From: BarsTiger Date: Thu, 2 Dec 2021 21:23:31 +0200 Subject: [PATCH] 1 --- .../build_calc_and_dlls.py | 38 + .../requirements.txt | 3 + .../source/1.py | 5 + .../source/Calculimetr.py | 728 ++++++++++++++++++ .../source/gethash.py | 5 + .../source/icos/localhost_kalorimetr.ico | Bin 0 -> 39362 bytes .../source/launcher.py | 19 + .../source/offline_check_license.py | 8 + .../source/offline_check_license_cracked.py | 8 + 9 files changed, 814 insertions(+) create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/build_calc_and_dlls.py create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/requirements.txt create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/source/1.py create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/source/Calculimetr.py create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/source/gethash.py create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/source/icos/localhost_kalorimetr.ico create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/source/launcher.py create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/source/offline_check_license.py create mode 100644 x64-calculimetr_final_CRACK-by-BarsTiger/source/offline_check_license_cracked.py diff --git a/x64-calculimetr_final_CRACK-by-BarsTiger/build_calc_and_dlls.py b/x64-calculimetr_final_CRACK-by-BarsTiger/build_calc_and_dlls.py new file mode 100644 index 0000000..3360b60 --- /dev/null +++ b/x64-calculimetr_final_CRACK-by-BarsTiger/build_calc_and_dlls.py @@ -0,0 +1,38 @@ +import os +import shutil +from distutils.dir_util import copy_tree +try: + from shiboken6 import __version__ + from PySide6 import __all__ + from PyInstaller import __all__ + from easygui import __all__ +except: + os.system('pip install -r requirements.txt') + +shutil.rmtree('dist') + +os.system('pyinstaller --noconfirm --onedir --windowed "source/Calculimetr.py"') +os.rename('dist/Calculimetr', 'dist/Calculimetr_build') +os.rename('dist/Calculimetr_build/Calculimetr.exe', 'dist/Calculimetr_build/calculimetrBase64.dll') + +os.system('pyinstaller --noconfirm --onefile --windowed "source/offline_check_license.py"') +try: + os.mkdir('dist/dll') +except: + pass +shutil.move('dist/offline_check_license.exe', 'dist/dll/calcLib64.dll') + +os.system('pyinstaller --noconfirm --onefile --windowed "source/offline_check_license_cracked.py"') +try: + os.mkdir('dist/dll_cracked') +except: + pass +shutil.move('dist/offline_check_license_cracked.exe', 'dist/dll_cracked/calcLib64.dll') + +os.system('pyinstaller --noconfirm --onefile --windowed --icon "source/icos/localhost_kalorimetr.ico" "source/launcher.py"') + +os.mkdir('dist/app_orig') +os.mkdir('dist/app_orig/libs') +copy_tree('dist/Calculimetr_build', 'dist/app_orig/libs') +shutil.copy('dist/dll/calcLib64.dll', 'dist/app_orig/libs') +shutil.copy('dist/launcher.exe', 'dist/app_orig/Calculimetr.exe') diff --git a/x64-calculimetr_final_CRACK-by-BarsTiger/requirements.txt b/x64-calculimetr_final_CRACK-by-BarsTiger/requirements.txt new file mode 100644 index 0000000..a19cabf --- /dev/null +++ b/x64-calculimetr_final_CRACK-by-BarsTiger/requirements.txt @@ -0,0 +1,3 @@ +PySide6 +shiboken6 +PyInstaller \ No newline at end of file diff --git a/x64-calculimetr_final_CRACK-by-BarsTiger/source/1.py b/x64-calculimetr_final_CRACK-by-BarsTiger/source/1.py new file mode 100644 index 0000000..4caed7e --- /dev/null +++ b/x64-calculimetr_final_CRACK-by-BarsTiger/source/1.py @@ -0,0 +1,5 @@ +import subprocess + +proc = subprocess.Popen("python offline_check_license.py --license {0}".format('LIdgsfhlashrpo9yep8923y4u2p93wuryu5p34iyur9834y5934y8934yht9fy3ht89ur34tcu549m83tm4390tyv8934vty53m948typ5894ty7895yt934yrt89y34qht8yw35tu340tu0tyugu90t43utohto'), stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, shell=True) +print(str(proc.communicate()[0])) \ No newline at end of file diff --git a/x64-calculimetr_final_CRACK-by-BarsTiger/source/Calculimetr.py b/x64-calculimetr_final_CRACK-by-BarsTiger/source/Calculimetr.py new file mode 100644 index 0000000..03d93a7 --- /dev/null +++ b/x64-calculimetr_final_CRACK-by-BarsTiger/source/Calculimetr.py @@ -0,0 +1,728 @@ +import sys +from typing import Union, Optional +from operator import add, sub, mul, truediv + +from PySide6.QtWidgets import QApplication, QMainWindow +from PySide6.QtGui import QFontDatabase + +from PySide6.QtCore import (QCoreApplication, QMetaObject, QSize, Qt) +from PySide6.QtGui import (QCursor, QIcon, QShortcut) +from PySide6.QtWidgets import (QGridLayout, QLabel, QLineEdit, QWidget, + QPushButton, QSizePolicy, QVBoxLayout) +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00\x00\xae\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x18\x00\x00\x00\x18\x08\x04\x00\x00\x00J~\xf5s\ +\x00\x00\x00uIDAT8\x8dc`\x18\xcc\xe0\x7f\ +\xe8\x7f\x22\x00B\xb9\xe8\xff\x97\xa4iXE\x8cr\xb8\ +\x06\xe2\x9c\x03\xd7\x80\xe6\x9c\xcb\xff\x1d\x91\xf8/\x81\xbc\ +\xcb\xe8\x1aP\x9d\xe3\x08\x14\xd1\x81jy\xf9_\x07\xc8\ +sD\xd1\x80\xe1\x1c\x88\x22\x90\x16\x04\x0b\xa1\x01k\xe8\ +\xc0\x14b(\x07i\xc0\x1e:`-\x98\xca\xc9\xd2@\ +\xaa\x93H\xf64\x19\xc1JF\xc4\x91\x9c4\xc8H|\ +d$o\x923\xd0\xe0\x01\x00T\xe3\xc0\xc1\xb4*\x16\ +r\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x00\xb7\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x18\x00\x00\x00\x18\x08\x04\x00\x00\x00J~\xf5s\ +\x00\x00\x00~IDAT8\xcbc`\x18\xb4\xe0?\ +\x11p\x10h\x98\xca\x90\xc5\xf0\x17\x88\xa7\xe2\xd6p\x9e\ +a?\x14\xbe\x07\xf2\xca\x81\xe2Z@\x5c\x8e[\x83\x03\ +\x9c\xbf\x1f\xc8\xfb\xc7`\x08d\x19\x02i\x22m\xc8\x03\ +\x8a\x9b\x01q\x0e\xb1~X\xc8P\x01$\xab\x18\x16Q\ +9\x94\xea\xc1\xee'A\x03\x03P\x0b,\x08`\x10\xa7\ +\x86z d\x00*\x80\xd8B\x84\x06\x04\x00\xd9\xb2\x1f\ +\x0e\x89t\x12n\xe3ph \xd2\x86A\x93\xbc\x07\x11\ +\x00\x00\xd2\xa9\x0f\xf8\xc4\xfe\x01\xba\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +" + +qt_resource_name = b"\ +\x00\x05\ +\x00o\xa6S\ +\x00i\ +\x00c\x00o\x00n\x00s\ +\x00\x0d\ +\x07d\x02'\ +\x00b\ +\x00a\x00c\x00k\x00s\x00p\x00a\x00c\x00e\x00.\x00p\x00n\x00g\ +\x00\x0e\ +\x0b0\xc8'\ +\x00c\ +\x00a\x00l\x00c\x00u\x00l\x00a\x00t\x00o\x00r\x00.\x00p\x00n\x00g\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01{\x96\x06\xe7@\ +\x00\x00\x000\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb2\ +\x00\x00\x01{\x96\x227p\ +" + + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + + +qInitResources() + + + + + + + + + + + + + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(300, 500) + MainWindow.setMinimumSize(QSize(300, 500)) + icon = QIcon() + icon.addFile(u":/icons/icons/calculator.png", QSize(), QIcon.Normal, QIcon.Off) + MainWindow.setWindowIcon(icon) + MainWindow.setStyleSheet(u"QWidget {\n" + " color: white;\n" + " background-color: #121212;\n" + " font-family: Rubik;\n" + " font-size: 16pt;\n" + " font-weight: 600;\n" + "}\n" + "\n" + "QPushButton {\n" + " background-color: transparent;\n" + " border: none;\n" + "}\n" + "\n" + "QPushButton:hover {\n" + " background-color: #666;\n" + "}\n" + "\n" + "QPushButton:pressed {\n" + " background-color: #888;\n" + "}") + self.centralwidget = QWidget(MainWindow) + self.centralwidget.setObjectName(u"centralwidget") + self.verticalLayout = QVBoxLayout(self.centralwidget) + self.verticalLayout.setObjectName(u"verticalLayout") + self.lbl_temp = QLabel(self.centralwidget) + self.lbl_temp.setObjectName(u"lbl_temp") + sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.lbl_temp.sizePolicy().hasHeightForWidth()) + self.lbl_temp.setSizePolicy(sizePolicy) + self.lbl_temp.setStyleSheet(u"color: #888;") + self.lbl_temp.setAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) + + self.verticalLayout.addWidget(self.lbl_temp) + + self.le_entry = QLineEdit(self.centralwidget) + self.le_entry.setObjectName(u"le_entry") + sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.le_entry.sizePolicy().hasHeightForWidth()) + self.le_entry.setSizePolicy(sizePolicy1) + self.le_entry.setStyleSheet(u"font-size: 40pt;\n" + "border: none;") + self.le_entry.setMaxLength(16) + self.le_entry.setAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) + self.le_entry.setReadOnly(True) + + self.verticalLayout.addWidget(self.le_entry) + + self.layout_buttons = QGridLayout() + self.layout_buttons.setObjectName(u"layout_buttons") + self.btn_1 = QPushButton(self.centralwidget) + self.btn_1.setObjectName(u"btn_1") + sizePolicy2 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.btn_1.sizePolicy().hasHeightForWidth()) + self.btn_1.setSizePolicy(sizePolicy2) + self.btn_1.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_1, 3, 0, 1, 1) + + self.btn_7 = QPushButton(self.centralwidget) + self.btn_7.setObjectName(u"btn_7") + sizePolicy2.setHeightForWidth(self.btn_7.sizePolicy().hasHeightForWidth()) + self.btn_7.setSizePolicy(sizePolicy2) + self.btn_7.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_7, 1, 0, 1, 1) + + self.btn_4 = QPushButton(self.centralwidget) + self.btn_4.setObjectName(u"btn_4") + sizePolicy2.setHeightForWidth(self.btn_4.sizePolicy().hasHeightForWidth()) + self.btn_4.setSizePolicy(sizePolicy2) + self.btn_4.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_4, 2, 0, 1, 1) + + self.btn_neg = QPushButton(self.centralwidget) + self.btn_neg.setObjectName(u"btn_neg") + sizePolicy2.setHeightForWidth(self.btn_neg.sizePolicy().hasHeightForWidth()) + self.btn_neg.setSizePolicy(sizePolicy2) + self.btn_neg.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_neg, 4, 0, 1, 1) + + self.btn_0 = QPushButton(self.centralwidget) + self.btn_0.setObjectName(u"btn_0") + sizePolicy2.setHeightForWidth(self.btn_0.sizePolicy().hasHeightForWidth()) + self.btn_0.setSizePolicy(sizePolicy2) + self.btn_0.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_0, 4, 1, 1, 1) + + self.btn_clear = QPushButton(self.centralwidget) + self.btn_clear.setObjectName(u"btn_clear") + sizePolicy2.setHeightForWidth(self.btn_clear.sizePolicy().hasHeightForWidth()) + self.btn_clear.setSizePolicy(sizePolicy2) + self.btn_clear.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_clear, 0, 0, 1, 1) + + self.btn_point = QPushButton(self.centralwidget) + self.btn_point.setObjectName(u"btn_point") + sizePolicy2.setHeightForWidth(self.btn_point.sizePolicy().hasHeightForWidth()) + self.btn_point.setSizePolicy(sizePolicy2) + self.btn_point.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_point, 4, 2, 1, 1) + + self.btn_calc = QPushButton(self.centralwidget) + self.btn_calc.setObjectName(u"btn_calc") + sizePolicy2.setHeightForWidth(self.btn_calc.sizePolicy().hasHeightForWidth()) + self.btn_calc.setSizePolicy(sizePolicy2) + self.btn_calc.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_calc, 4, 3, 1, 1) + + self.btn_add = QPushButton(self.centralwidget) + self.btn_add.setObjectName(u"btn_add") + sizePolicy2.setHeightForWidth(self.btn_add.sizePolicy().hasHeightForWidth()) + self.btn_add.setSizePolicy(sizePolicy2) + self.btn_add.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_add, 3, 3, 1, 1) + + self.btn_sub = QPushButton(self.centralwidget) + self.btn_sub.setObjectName(u"btn_sub") + sizePolicy2.setHeightForWidth(self.btn_sub.sizePolicy().hasHeightForWidth()) + self.btn_sub.setSizePolicy(sizePolicy2) + self.btn_sub.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_sub, 2, 3, 1, 1) + + self.btn_mul = QPushButton(self.centralwidget) + self.btn_mul.setObjectName(u"btn_mul") + sizePolicy2.setHeightForWidth(self.btn_mul.sizePolicy().hasHeightForWidth()) + self.btn_mul.setSizePolicy(sizePolicy2) + self.btn_mul.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_mul, 1, 3, 1, 1) + + self.btn_div = QPushButton(self.centralwidget) + self.btn_div.setObjectName(u"btn_div") + sizePolicy2.setHeightForWidth(self.btn_div.sizePolicy().hasHeightForWidth()) + self.btn_div.setSizePolicy(sizePolicy2) + self.btn_div.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_div, 0, 3, 1, 1) + + self.btn_backspace = QPushButton(self.centralwidget) + self.btn_backspace.setObjectName(u"btn_backspace") + sizePolicy2.setHeightForWidth(self.btn_backspace.sizePolicy().hasHeightForWidth()) + self.btn_backspace.setSizePolicy(sizePolicy2) + self.btn_backspace.setCursor(QCursor(Qt.PointingHandCursor)) + icon1 = QIcon() + icon1.addFile(u":/icons/icons/backspace.png", QSize(), QIcon.Normal, QIcon.Off) + self.btn_backspace.setIcon(icon1) + self.btn_backspace.setIconSize(QSize(24, 24)) + + self.layout_buttons.addWidget(self.btn_backspace, 0, 2, 1, 1) + + self.btn_ce = QPushButton(self.centralwidget) + self.btn_ce.setObjectName(u"btn_ce") + sizePolicy2.setHeightForWidth(self.btn_ce.sizePolicy().hasHeightForWidth()) + self.btn_ce.setSizePolicy(sizePolicy2) + self.btn_ce.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_ce, 0, 1, 1, 1) + + self.btn_8 = QPushButton(self.centralwidget) + self.btn_8.setObjectName(u"btn_8") + sizePolicy2.setHeightForWidth(self.btn_8.sizePolicy().hasHeightForWidth()) + self.btn_8.setSizePolicy(sizePolicy2) + self.btn_8.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_8, 1, 1, 1, 1) + + self.btn_9 = QPushButton(self.centralwidget) + self.btn_9.setObjectName(u"btn_9") + sizePolicy2.setHeightForWidth(self.btn_9.sizePolicy().hasHeightForWidth()) + self.btn_9.setSizePolicy(sizePolicy2) + self.btn_9.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_9, 1, 2, 1, 1) + + self.btn_6 = QPushButton(self.centralwidget) + self.btn_6.setObjectName(u"btn_6") + sizePolicy2.setHeightForWidth(self.btn_6.sizePolicy().hasHeightForWidth()) + self.btn_6.setSizePolicy(sizePolicy2) + self.btn_6.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_6, 2, 2, 1, 1) + + self.btn_5 = QPushButton(self.centralwidget) + self.btn_5.setObjectName(u"btn_5") + sizePolicy2.setHeightForWidth(self.btn_5.sizePolicy().hasHeightForWidth()) + self.btn_5.setSizePolicy(sizePolicy2) + self.btn_5.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_5, 2, 1, 1, 1) + + self.btn_2 = QPushButton(self.centralwidget) + self.btn_2.setObjectName(u"btn_2") + sizePolicy2.setHeightForWidth(self.btn_2.sizePolicy().hasHeightForWidth()) + self.btn_2.setSizePolicy(sizePolicy2) + self.btn_2.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_2, 3, 1, 1, 1) + + self.btn_3 = QPushButton(self.centralwidget) + self.btn_3.setObjectName(u"btn_3") + sizePolicy2.setHeightForWidth(self.btn_3.sizePolicy().hasHeightForWidth()) + self.btn_3.setSizePolicy(sizePolicy2) + self.btn_3.setCursor(QCursor(Qt.PointingHandCursor)) + + self.layout_buttons.addWidget(self.btn_3, 3, 2, 1, 1) + + self.verticalLayout.addLayout(self.layout_buttons) + + MainWindow.setCentralWidget(self.centralwidget) + + self.retranslateUi(MainWindow) + + QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Calculimetr", None)) + self.le_entry.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.btn_1.setText(QCoreApplication.translate("MainWindow", u"1", None)) + + self.btn_1.setShortcut(QCoreApplication.translate("MainWindow", u"1", None)) + + self.btn_7.setText(QCoreApplication.translate("MainWindow", u"7", None)) + + self.btn_7.setShortcut(QCoreApplication.translate("MainWindow", u"7", None)) + + self.btn_4.setText(QCoreApplication.translate("MainWindow", u"4", None)) + + self.btn_4.setShortcut(QCoreApplication.translate("MainWindow", u"4", None)) + + self.btn_neg.setText(QCoreApplication.translate("MainWindow", u"+/-", None)) + self.btn_0.setText(QCoreApplication.translate("MainWindow", u"0", None)) + + self.btn_0.setShortcut(QCoreApplication.translate("MainWindow", u"0", None)) + + self.btn_clear.setText(QCoreApplication.translate("MainWindow", u"C", None)) + self.btn_point.setText(QCoreApplication.translate("MainWindow", u".", None)) + + for sc in (',', '.'): + QShortcut(sc, self.btn_point).activated.connect(self.btn_point.animateClick) + + self.btn_calc.setText(QCoreApplication.translate("MainWindow", u"=", None)) + + for sc in ('=', 'Enter', 'Return'): + QShortcut(sc, self.btn_calc).activated.connect(self.btn_calc.animateClick) + + self.btn_add.setText(QCoreApplication.translate("MainWindow", u"+", None)) + + self.btn_add.setShortcut(QCoreApplication.translate("MainWindow", u"+", None)) + + self.btn_sub.setText(QCoreApplication.translate("MainWindow", u"\u2212", None)) + + self.btn_sub.setShortcut(QCoreApplication.translate("MainWindow", u"-", None)) + + self.btn_mul.setText(QCoreApplication.translate("MainWindow", u"\u00d7", None)) + + self.btn_mul.setShortcut(QCoreApplication.translate("MainWindow", u"*", None)) + + self.btn_div.setText(QCoreApplication.translate("MainWindow", u"/", None)) + + self.btn_div.setShortcut(QCoreApplication.translate("MainWindow", u"/", None)) + + self.btn_backspace.setShortcut(QCoreApplication.translate("MainWindow", u"Backspace", None)) + + self.btn_ce.setText(QCoreApplication.translate("MainWindow", u"CE", None)) + + self.btn_ce.setShortcut(QCoreApplication.translate("MainWindow", u"Del", None)) + + self.btn_8.setText(QCoreApplication.translate("MainWindow", u"8", None)) + + self.btn_8.setShortcut(QCoreApplication.translate("MainWindow", u"8", None)) + + self.btn_9.setText(QCoreApplication.translate("MainWindow", u"9", None)) + + self.btn_9.setShortcut(QCoreApplication.translate("MainWindow", u"9", None)) + + self.btn_6.setText(QCoreApplication.translate("MainWindow", u"6", None)) + + self.btn_6.setShortcut(QCoreApplication.translate("MainWindow", u"6", None)) + + self.btn_5.setText(QCoreApplication.translate("MainWindow", u"5", None)) + + self.btn_5.setShortcut(QCoreApplication.translate("MainWindow", u"5", None)) + + self.btn_2.setText(QCoreApplication.translate("MainWindow", u"2", None)) + + self.btn_2.setShortcut(QCoreApplication.translate("MainWindow", u"2", None)) + + self.btn_3.setText(QCoreApplication.translate("MainWindow", u"3", None)) + + self.btn_3.setShortcut(QCoreApplication.translate("MainWindow", u"3", None)) + + + + + + + + + + + + + +operations = { + '+': add, + '−': sub, + '×': mul, + '/': truediv +} + +error_zero_div = 'Division by zero' +error_undefined = 'Result is undefined' + +default_font_size = 16 +default_entry_font_size = 40 + + +class Calculator(QMainWindow): + def __init__(self): + super(Calculator, self).__init__() + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + + self.entry = self.ui.le_entry + self.temp = self.ui.lbl_temp + self.entry_max_len = self.entry.maxLength() + + QFontDatabase.addApplicationFont("fonts/Rubik-Regular.ttf") + + # digits + self.ui.btn_0.clicked.connect(self.add_digit) + self.ui.btn_1.clicked.connect(self.add_digit) + self.ui.btn_2.clicked.connect(self.add_digit) + self.ui.btn_3.clicked.connect(self.add_digit) + self.ui.btn_4.clicked.connect(self.add_digit) + self.ui.btn_5.clicked.connect(self.add_digit) + self.ui.btn_6.clicked.connect(self.add_digit) + self.ui.btn_7.clicked.connect(self.add_digit) + self.ui.btn_8.clicked.connect(self.add_digit) + self.ui.btn_9.clicked.connect(self.add_digit) + + # actions + self.ui.btn_clear.clicked.connect(self.clear_all) + self.ui.btn_ce.clicked.connect(self.clear_entry) + self.ui.btn_point.clicked.connect(self.add_point) + self.ui.btn_neg.clicked.connect(self.negate) + self.ui.btn_backspace.clicked.connect(self.backspace) + + # math + self.ui.btn_calc.clicked.connect(self.calculate) + self.ui.btn_add.clicked.connect(self.math_operation) + self.ui.btn_sub.clicked.connect(self.math_operation) + self.ui.btn_mul.clicked.connect(self.math_operation) + self.ui.btn_div.clicked.connect(self.math_operation) + + def add_digit(self) -> None: + self.remove_error() + self.clear_temp_if_equality() + btn = self.sender() + + digit_buttons = ('btn_0', 'btn_1', 'btn_2', 'btn_3', 'btn_4', + 'btn_5', 'btn_6', 'btn_7', 'btn_8', 'btn_9') + + if btn.objectName() in digit_buttons: + if self.entry.text() == '0': + self.entry.setText(btn.text()) + else: + self.entry.setText(self.entry.text() + btn.text()) + + self.adjust_entry_font_size() + + def add_point(self) -> None: + self.clear_temp_if_equality() + if '.' not in self.entry.text(): + self.entry.setText(self.entry.text() + '.') + self.adjust_entry_font_size() + + def negate(self) -> None: + self.clear_temp_if_equality() + entry = self.entry.text() + + if '-' not in entry: + if entry != '0': + entry = '-' + entry + else: + entry = entry[1:] + + if len(entry) == self.entry_max_len + 1 and '-' in entry: + self.entry.setMaxLength(self.entry_max_len + 1) + else: + self.entry.setMaxLength(self.entry_max_len) + + self.entry.setText(entry) + self.adjust_entry_font_size() + + def backspace(self) -> None: + self.remove_error() + self.clear_temp_if_equality() + entry = self.entry.text() + + if len(entry) != 1: + if len(entry) == 2 and '-' in entry: + self.entry.setText('0') + else: + self.entry.setText(entry[:-1]) + else: + self.entry.setText('0') + + self.adjust_entry_font_size() + + def clear_all(self) -> None: + self.remove_error() + self.entry.setText('0') + self.adjust_entry_font_size() + self.temp.clear() + self.adjust_temp_font_size() + + def clear_entry(self) -> None: + self.remove_error() + self.clear_temp_if_equality() + self.entry.setText('0') + self.adjust_entry_font_size() + + def clear_temp_if_equality(self) -> None: + if self.get_math_sign() == '=': + self.temp.clear() + self.adjust_temp_font_size() + + @staticmethod + def remove_trailing_zeros(num: str) -> str: + n = str(float(num)) + return n[:-2] if n[-2:] == '.0' else n + + def add_temp(self) -> None: + btn = self.sender() + entry = self.remove_trailing_zeros(self.entry.text()) + + if not self.temp.text() or self.get_math_sign() == '=': + self.temp.setText(entry + f' {btn.text()} ') + self.adjust_temp_font_size() + self.entry.setText('0') + self.adjust_entry_font_size() + + def get_entry_num(self) -> Union[int, float]: + entry = self.entry.text().strip('.') + return float(entry) if '.' in entry else int(entry) + + def get_temp_num(self) -> Union[int, float, None]: + if self.temp.text(): + temp = self.temp.text().strip('.').split()[0] + return float(temp) if '.' in temp else int(temp) + + def get_math_sign(self) -> Optional[str]: + if self.temp.text(): + return self.temp.text().strip('.').split()[-1] + + def get_entry_text_width(self) -> int: + return self.entry.fontMetrics().boundingRect(self.entry.text()).width() + + def get_temp_text_width(self) -> int: + return self.temp.fontMetrics().boundingRect(self.temp.text()).width() + + def calculate(self) -> Optional[str]: + entry = self.entry.text() + temp = self.temp.text() + + if temp: + try: + if self.get_math_sign() == '−' and self.get_temp_num() == 16 and self.get_entry_num() == 9: + result = self.remove_trailing_zeros( + str(5) + ) + self.temp.setText(temp + self.remove_trailing_zeros(entry) + ' =') + self.adjust_temp_font_size() + self.entry.setText(result) + self.adjust_entry_font_size() + return result + else: + result = self.remove_trailing_zeros( + str(operations[self.get_math_sign()](self.get_temp_num(), self.get_entry_num())) + ) + self.temp.setText(temp + self.remove_trailing_zeros(entry) + ' =') + self.adjust_temp_font_size() + self.entry.setText(result) + self.adjust_entry_font_size() + return result + + + except KeyError: + pass + + except ZeroDivisionError: + if self.get_temp_num() == 0: + self.show_error(error_undefined) + else: + self.show_error(error_zero_div) + + def math_operation(self) -> None: + temp = self.temp.text() + btn = self.sender() + + if not temp: + self.add_temp() + else: + if self.get_math_sign() != btn.text(): + if self.get_math_sign() == '=': + self.add_temp() + else: + self.temp.setText(temp[:-2] + f'{btn.text()} ') + else: + try: + self.temp.setText(self.calculate() + f' {btn.text()} ') + except TypeError: + pass + + self.adjust_temp_font_size() + + def show_error(self, text: str) -> None: + self.entry.setMaxLength(len(text)) + self.entry.setText(text) + self.adjust_entry_font_size() + self.disable_buttons(True) + + def remove_error(self) -> None: + if self.entry.text() in (error_undefined, error_zero_div): + self.entry.setMaxLength(self.entry_max_len) + self.entry.setText('0') + self.adjust_entry_font_size() + self.disable_buttons(False) + + def disable_buttons(self, disable: bool) -> None: + self.ui.btn_calc.setDisabled(disable) + self.ui.btn_add.setDisabled(disable) + self.ui.btn_sub.setDisabled(disable) + self.ui.btn_mul.setDisabled(disable) + self.ui.btn_div.setDisabled(disable) + self.ui.btn_neg.setDisabled(disable) + self.ui.btn_point.setDisabled(disable) + + color = 'color: #888;' if disable else 'color: white;' + self.change_buttons_color(color) + + def change_buttons_color(self, css_color: str) -> None: + self.ui.btn_calc.setStyleSheet(css_color) + self.ui.btn_add.setStyleSheet(css_color) + self.ui.btn_sub.setStyleSheet(css_color) + self.ui.btn_mul.setStyleSheet(css_color) + self.ui.btn_div.setStyleSheet(css_color) + self.ui.btn_neg.setStyleSheet(css_color) + self.ui.btn_point.setStyleSheet(css_color) + + def adjust_entry_font_size(self) -> None: + font_size = default_entry_font_size + while self.get_entry_text_width() > self.entry.width() - 15: + font_size -= 1 + self.entry.setStyleSheet('font-size: ' + str(font_size) + 'pt; border: none;') + + font_size = 1 + while self.get_entry_text_width() < self.entry.width() - 60: + font_size += 1 + + if font_size > default_entry_font_size: + break + + self.entry.setStyleSheet('font-size: ' + str(font_size) + 'pt; border: none;') + + def adjust_temp_font_size(self) -> None: + font_size = default_font_size + while self.get_temp_text_width() > self.temp.width() - 10: + font_size -= 1 + self.temp.setStyleSheet('font-size: ' + str(font_size) + 'pt; color: #888;') + + font_size = 1 + while self.get_temp_text_width() < self.temp.width() - 60: + font_size += 1 + + if font_size > default_font_size: + break + + self.temp.setStyleSheet('font-size: ' + str(font_size) + 'pt; color: #888;') + + def resizeEvent(self, event) -> None: + self.adjust_entry_font_size() + self.adjust_temp_font_size() + +import argparse +import urllib.request +import hashlib +import subprocess +parser = argparse.ArgumentParser(description='Get license') +parser.add_argument('--license', dest='license') +args = parser.parse_args() +arglicensehash = hashlib.md5(args.license.encode()).hexdigest() + +try: + licensefile = urllib.request.urlopen("https://datasites.kotikotprojects.gq/calculimetr/l.l").read().decode('utf-8') + print("Online mode") +except: + proc = subprocess.Popen("calcLib64.dll --license {0}".format(args.license), stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, shell=True) + licensefile = str(proc.communicate()[0])[2:34:1] + print("Offline mode") + +if __name__ == "__main__" and licensefile == arglicensehash: + app = QApplication(sys.argv) + + window = Calculator() + window.show() + + sys.exit(app.exec()) diff --git a/x64-calculimetr_final_CRACK-by-BarsTiger/source/gethash.py b/x64-calculimetr_final_CRACK-by-BarsTiger/source/gethash.py new file mode 100644 index 0000000..129e7cd --- /dev/null +++ b/x64-calculimetr_final_CRACK-by-BarsTiger/source/gethash.py @@ -0,0 +1,5 @@ +import hashlib + +mystring = input('Enter String to hash: ') +hash_object = hashlib.md5(mystring.encode()) +print(hash_object.hexdigest()) diff --git a/x64-calculimetr_final_CRACK-by-BarsTiger/source/icos/localhost_kalorimetr.ico b/x64-calculimetr_final_CRACK-by-BarsTiger/source/icos/localhost_kalorimetr.ico new file mode 100644 index 0000000000000000000000000000000000000000..5bbbfa02fb919273a798e961cadf3f71a77041f5 GIT binary patch literal 39362 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