├── .gitattributes
├── .gitignore
├── Loader.py
├── Overlay.py
├── README.md
├── Recoil.py
├── dist
└── Recoil-V1.exe
└── requirements.txt
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | *.pyc
3 |
--------------------------------------------------------------------------------
/Loader.py:
--------------------------------------------------------------------------------
1 | from PyQt5 import QtCore, QtGui, QtWidgets
2 | from cryptography.fernet import Fernet
3 | import mysql.connector, threading, Recoil, os, subprocess, time, Overlay
4 |
5 | class Ui_MainWindow(object):
6 | def __login(self):
7 | encH = b'' #SQL Conn Host Encrypted
8 | encU = b'' #SQL Conn Username Encrypted
9 | encPW = b'' #SQL Conn Password Encrypted
10 | encDB = b'' #SQL Conn DB IP Encrypted
11 |
12 | UlXJn8jT = b'' #Encryption Key
13 | naviFer = Fernet(UlXJn8jT) #Encryption Class Init
14 |
15 | __hwid = str(subprocess.check_output('wmic csproduct get uuid')).split('\\r\\n')[1].strip('\\r').strip() #Get HWID from users PC
16 | __u = self.txtUser.text()
17 | __p = self.txtPass.text()
18 | #__u = naviFer.encrypt(self.txtUser.text().encode())
19 | #__p = naviFer.encrypt(self.txtPass.text().encode())
20 |
21 | if __u and __p:
22 | __mydb = mysql.connector.connect(
23 | host = str(naviFer.decrypt(encH))[2:-1], #SQL Conn Host Decrypted
24 | user = str(naviFer.decrypt(encU))[2:-1], #SQL Username Decrypted
25 | password = str(naviFer.decrypt(encPW))[2:-1], #SQL password Decrypted
26 | database = str(naviFer.decrypt(encDB))[2:-1] #SQL DB ip Decrypted
27 | )
28 |
29 | __mycursor = __mydb.cursor()
30 | __mycursor.execute("SELECT `id` FROM `LoginList` WHERE `user` = '"+ __u +"' AND `key` = '"+ __p +"'") #Get id from user and pass
31 | __id = __mycursor.fetchall()
32 |
33 | if (__id == []): #If id was not found
34 | self.lblStatus.setText("Login Failed")
35 | else: #If id exists in db
36 | __mycursor.execute("SELECT `id` FROM `LoginList` WHERE `user` = '"+ __u +"' AND `key` = '"+ __p +"' AND `hwid` = '"+ __hwid +"'") # Grab id if HWID exists from db from user and pass
37 | __idHWID = __mycursor.fetchall()
38 | if (__idHWID == []): # If no id found with that hwid
39 | __mycursor.execute("UPDATE `LoginList` SET HWID = '"+ __hwid +"', reg_date = current_timestamp() WHERE id = '"+ str(__id[0][0]) +"';") # Update the hwid
40 | else: # If HWID is set
41 | __mycursor.execute("SELECT `hwid` FROM `LoginList` WHERE `user` = '"+ __u +"' AND `key` = '"+ __p +"' AND '"+ __hwid +"'") # HWID
42 | __HWID = __mycursor.fetchall()
43 | if (__HWID[0][0] != __hwid): #Check user hwid vs stored hwid
44 | self.lblStatus.setText("Login Failed")
45 | time.sleep(2)
46 | sys.exit()
47 | #overlayThread = threading.Thread(target=Overlay.draw)
48 | #overlayThread.start()
49 | scriptThread = threading.Thread(target=Recoil.run) #Start Script
50 | self.lblStatus.setText("Logged In")
51 | self.hide()
52 | scriptThread.start()
53 | scriptThread.join()
54 | #overlayThread.join()
55 | threading.Timer(2.5, sys.exit()).start()
56 |
57 | def __register(self):
58 | encH = b'' #SQL Conn Host
59 | encU = b'' #SQL Conn Username
60 | encPW = b'' #SQL Conn Password
61 | encDB = b'' #SQL Conn DB IP
62 |
63 | UlXJn8jT = b'' #Encryption Key
64 | naviFer = Fernet(UlXJn8jT) #Encryption Class Init
65 |
66 | __hwid = str(subprocess.check_output('wmic csproduct get uuid')).split('\\r\\n')[1].strip('\\r').strip()
67 | __u = self.txtUser.text()
68 | __p = self.txtPass.text()
69 |
70 | if __u and __p:
71 | __mydb = mysql.connector.connect(
72 | host = str(naviFer.decrypt(encH))[2:-1], #SQL Conn Host Decrypted
73 | user = str(naviFer.decrypt(encU))[2:-1], #SQL Username Decrypted
74 | password = str(naviFer.decrypt(encPW))[2:-1], #SQL password Decrypted
75 | database = str(naviFer.decrypt(encDB))[2:-1] #SQL DB ip Decrypted
76 | )
77 |
78 | __mycursor = __mydb.cursor()
79 | __mycursor.execute("SELECT `key` FROM `LoginList` WHERE `key` = '"+ __p +"'") #Check key is valid
80 | __id = __mycursor.fetchall()
81 |
82 | if (__id == []): #If key was not found
83 | self.lblStatus.setText("Invalid Key")
84 | else: #If key exists
85 | __mycursor.execute("UPDATE `LoginList` SET `hwid` = '"+ __hwid +"', `user` = '"+ __u +"' , `reg_date` = current_timestamp() WHERE `key` = '"+ __p +"';")
86 | self.lblStatus.setText("Registered")
87 | threading.Timer(2.5, sys.exit()).start()
88 |
89 | def setupUi(self, MainWindow):
90 | MainWindow.setObjectName("MainWindow")
91 | MainWindow.resize(600, 250)
92 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
93 | sizePolicy.setHorizontalStretch(0)
94 | sizePolicy.setVerticalStretch(0)
95 | sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
96 | MainWindow.setSizePolicy(sizePolicy)
97 | MainWindow.setMinimumSize(QtCore.QSize(600, 250))
98 | MainWindow.setMaximumSize(QtCore.QSize(600, 250))
99 | MainWindow.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
100 | MainWindow.setAutoFillBackground(False)
101 | MainWindow.setStyleSheet("QMainWindow{\n"
102 | " background-color:rgb(56, 56, 56)\n"
103 | "}")
104 | MainWindow.setAnimated(False)
105 | MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded)
106 | self.centralwidget = QtWidgets.QWidget(MainWindow)
107 | self.centralwidget.setObjectName("centralwidget")
108 | self.btnRegister = QtWidgets.QPushButton(self.centralwidget)
109 | self.btnRegister.setGeometry(QtCore.QRect(260, 202, 81, 21))
110 | font = QtGui.QFont()
111 | font.setFamily("Pixel Font7")
112 | font.setPointSize(10)
113 | self.btnRegister.setFont(font)
114 | self.btnRegister.setStyleSheet("background-color:Transparent;\n"
115 | "border:1px solid white;\n"
116 | "color:white;")
117 | self.btnRegister.setObjectName("btnRegister")
118 | self.btnLogin = QtWidgets.QPushButton(self.centralwidget)
119 | self.btnLogin.setGeometry(QtCore.QRect(260, 162, 81, 21))
120 | font = QtGui.QFont()
121 | font.setFamily("Pixel Font7")
122 | font.setPointSize(10)
123 | self.btnLogin.setFont(font)
124 | self.btnLogin.setStyleSheet("background-color:Transparent;\n"
125 | "border:1px solid white;\n"
126 | "color:white;")
127 | self.btnLogin.setCheckable(False)
128 | self.btnLogin.setObjectName("btnLogin")
129 | self.lblMain = QtWidgets.QLabel(self.centralwidget)
130 | self.lblMain.setGeometry(QtCore.QRect(160, 0, 281, 81))
131 | font = QtGui.QFont()
132 | font.setFamily("Akira Expanded")
133 | font.setPointSize(26)
134 | font.setBold(True)
135 | font.setWeight(75)
136 | self.lblMain.setFont(font)
137 | self.lblMain.setAutoFillBackground(False)
138 | self.lblMain.setStyleSheet("color:white;")
139 | self.lblMain.setAlignment(QtCore.Qt.AlignCenter)
140 | self.lblMain.setObjectName("lblMain")
141 | self.txtPass = QtWidgets.QLineEdit(self.centralwidget)
142 | self.txtPass.setGeometry(QtCore.QRect(240, 121, 121, 21))
143 | font = QtGui.QFont()
144 | font.setFamily("Pixel Font7")
145 | font.setPointSize(10)
146 | self.txtPass.setFont(font)
147 | self.txtPass.setStyleSheet("background-color:Transparent;\n"
148 | "border:1px solid white;\n"
149 | "color:white;")
150 | self.txtPass.setText("")
151 | self.txtPass.setFrame(True)
152 | self.txtPass.setEchoMode(QtWidgets.QLineEdit.Password)
153 | self.txtPass.setAlignment(QtCore.Qt.AlignCenter)
154 | self.txtPass.setClearButtonEnabled(False)
155 | self.txtPass.setObjectName("txtPass")
156 | self.txtUser = QtWidgets.QLineEdit(self.centralwidget)
157 | self.txtUser.setGeometry(QtCore.QRect(240, 80, 121, 21))
158 | font = QtGui.QFont()
159 | font.setFamily("Pixel Font7")
160 | font.setPointSize(10)
161 | self.txtUser.setFont(font)
162 | self.txtUser.setStyleSheet("background-color:Transparent;\n"
163 | "border:1px solid white;\n"
164 | "color:white;")
165 | self.txtUser.setText("")
166 | self.txtUser.setAlignment(QtCore.Qt.AlignCenter)
167 | self.txtUser.setObjectName("txtUser")
168 | self.lblStatus = QtWidgets.QLabel(self.centralwidget)
169 | self.lblStatus.setGeometry(QtCore.QRect(3, 210, 171, 51))
170 | font = QtGui.QFont()
171 | font.setFamily("Pixel Font7")
172 | font.setPointSize(10)
173 | self.lblStatus.setFont(font)
174 | self.lblStatus.setStyleSheet("color:white;")
175 | self.lblStatus.setFrameShape(QtWidgets.QFrame.NoFrame)
176 | self.lblStatus.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
177 | self.lblStatus.setObjectName("lblStatus")
178 | self.frame = QtWidgets.QFrame(self.centralwidget)
179 | self.frame.setGeometry(QtCore.QRect(0, 0, 600, 6))
180 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
181 | sizePolicy.setHorizontalStretch(0)
182 | sizePolicy.setVerticalStretch(0)
183 | sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
184 | self.frame.setSizePolicy(sizePolicy)
185 | self.frame.setMinimumSize(QtCore.QSize(0, 0))
186 | self.frame.setMaximumSize(QtCore.QSize(600, 10))
187 | self.frame.setStyleSheet("background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(231, 60, 126, 255), stop:1 rgba(35, 166, 213, 255))")
188 | self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
189 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
190 | self.frame.setObjectName("frame")
191 | self.frame2 = QtWidgets.QFrame(self.centralwidget)
192 | self.frame2.setGeometry(QtCore.QRect(0, 244, 600, 8))
193 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
194 | sizePolicy.setHorizontalStretch(0)
195 | sizePolicy.setVerticalStretch(0)
196 | sizePolicy.setHeightForWidth(self.frame2.sizePolicy().hasHeightForWidth())
197 | self.frame2.setSizePolicy(sizePolicy)
198 | self.frame2.setMinimumSize(QtCore.QSize(0, 0))
199 | self.frame2.setMaximumSize(QtCore.QSize(600, 10))
200 | self.frame2.setStyleSheet("background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(231, 60, 126, 255), stop:1 rgba(35, 166, 213, 255))")
201 | self.frame2.setFrameShape(QtWidgets.QFrame.StyledPanel)
202 | self.frame2.setFrameShadow(QtWidgets.QFrame.Raised)
203 | self.frame2.setObjectName("frame2")
204 | self.btnExit = QtWidgets.QPushButton(self.centralwidget)
205 | self.btnExit.setGeometry(QtCore.QRect(581, 2, 20, 31))
206 | font = QtGui.QFont()
207 | font.setFamily("Pixel Font7")
208 | font.setPointSize(12)
209 | self.btnExit.setFont(font)
210 | self.btnExit.setStyleSheet("background-color:Transparent;\n"
211 | "color:White;")
212 | self.btnExit.setObjectName("btnExit")
213 | MainWindow.setCentralWidget(self.centralwidget)
214 |
215 | self.retranslateUi(MainWindow)
216 | QtCore.QMetaObject.connectSlotsByName(MainWindow)
217 | MainWindow.setTabOrder(self.txtUser, self.txtPass)
218 | MainWindow.setTabOrder(self.txtPass, self.btnLogin)
219 | MainWindow.setTabOrder(self.btnLogin, self.btnRegister)
220 |
221 | def retranslateUi(self, MainWindow):
222 | _translate = QtCore.QCoreApplication.translate
223 | MainWindow.setWindowTitle(_translate("MainWindow", "Easy4.me"))
224 | self.btnRegister.setText(_translate("MainWindow", "Register"))
225 | self.btnLogin.setText(_translate("MainWindow", "Login"))
226 | self.lblMain.setText(_translate("MainWindow", "Easy4.me"))
227 | self.txtPass.setPlaceholderText(_translate("MainWindow", "Key"))
228 | self.txtUser.setPlaceholderText(_translate("MainWindow", "Username"))
229 | self.lblStatus.setText(_translate("MainWindow", "Status"))
230 | self.btnExit.setText(_translate("MainWindow", "X"))
231 |
232 | #Button Event
233 | self.btnLogin.clicked.connect(self.__login)
234 | self.btnRegister.clicked.connect(self.__register)
235 | self.btnExit.clicked.connect(self.close)
236 | MainWindow.setWindowFlags(QtCore.Qt.FramelessWindowHint)
237 |
238 | class MyWin(QtWidgets.QMainWindow, Ui_MainWindow):
239 | def __init__(self):
240 | super().__init__()
241 | self.setupUi(self)
242 | self.dragPos = QtCore.QPoint()
243 |
244 | def mousePressEvent(self, event):
245 | self.dragPos = event.globalPos()
246 |
247 | def mouseMoveEvent(self, event):
248 | if event.buttons() == QtCore.Qt.LeftButton:
249 | self.move(self.pos() + event.globalPos() - self.dragPos)
250 | self.dragPos = event.globalPos()
251 | event.accept()
252 |
253 | if __name__ == "__main__":
254 | import sys
255 | app = QtWidgets.QApplication(sys.argv)
256 | w = MyWin()
257 | w.show()
258 | sys.exit(app.exec_())
259 |
--------------------------------------------------------------------------------
/Overlay.py:
--------------------------------------------------------------------------------
1 | import sys
2 | from PyQt5 import QtCore, QtGui, QtWidgets
3 |
4 | class Crosshair(QtWidgets.QWidget):
5 | def __init__(self, parent=None, windowSize=24, penWidth=2, w=" AK", scope="Nil"):
6 | QtWidgets.QWidget.__init__(self, parent)
7 | self.weapon = w
8 | self.scope = scope
9 | self.ws = windowSize
10 | self.resize(24+1, 60+1)
11 | self.pen = QtGui.QPen(QtGui.QColor(231, 60, 126, 255))
12 | self.pen.setWidth(penWidth)
13 | self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.WindowTransparentForInput)
14 | self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
15 | self.move(QtWidgets.QApplication.desktop().screen().rect().center() - self.rect().center() + QtCore.QPoint(1,1))
16 | self.setWindowFlag(QtCore.Qt.Tool)
17 | self.setWindowTitle("Easy4.me")
18 |
19 | def paintEvent(self, event):
20 | ws = self.ws
21 | d = 5
22 | painter = QtGui.QPainter(self)
23 | painter.setPen(self.pen)
24 | painter.drawLine(int(ws/2), 0 + 13, int(ws/2), int(ws/2) - int(ws/d) + 13) # Top
25 | painter.drawLine(int(ws/2), int(ws/2) + int(ws/d) + 13, int(ws/2), int(ws) + 13) # Bottom
26 | painter.drawLine(0, int(ws/2) + 13, int(ws/2) - int(ws/d), int(ws/2) + 13) # Left
27 | painter.drawLine(int(ws/2) + int(ws/d), int(ws/2) + 13, int(ws), int(ws/2) + 13) # Right
28 |
29 | painter.drawText(3, 50, self.weapon)
30 | painter.drawText(3, 60, self.scope)
31 |
32 | def draw(weapon, scope):
33 | global overlay
34 | app1 = QtWidgets.QApplication(sys.argv)
35 |
36 | overlay = Crosshair(windowSize=24, penWidth=1, w=weapon, scope=scope)
37 | overlay.show()
38 |
39 | app1.exec_()
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Recoil-Script
2 |   
3 |
4 |