-
Автор темы
- #1
Всем привет! Буквально вчера выложили ещё один color aimbot для Валоранта, однако этот сурс интересен тем, что вместе с ним идёт спуфер и байпасс. Как сообщил автор, работает только с мышками Razer и Synapse 3. Но это не так важно, самое главное это функционал, который можно переделать и под свою мышь. Автор: Mafia4321x.
Для чего нужен spoofer (bypass) в Valorant?
Если вас уже банило по HWID, то как раз для этого он и понадобится. Ведь если зайти просто с того же компьютера снова в игру с нового аккаунта, прилетит автоматом бан. Без спуфа вашего ПК никак в валорант поиграть будет нельзя. Также спуфер юзают для того, чтобы тестить читы. Чтобы не банить свой хвид можно использовать подменный, потестить и выключить.
Байпасс же помогает обойти обнаружение вангуардом. Маскирует код, изменяет идентификаторы, чтобы было сложнее задетектить.
Что есть в хаке?
- Выбор радиуса (ФОВа). Можно выбрать размер расстояния доводки для аима.
- Кейбинды. Назначаются клавиши для функций.
- Выбор цвета для наводки: оптимизация под конкретные условия игры.
- Работает с популярными мышками, а если надо, можно адаптировать под свои.
- Есть спуфер и байпасс, которые помогают обойти бан и античит.
- Исходный код в открытом доступе, так что можно доработать под себя.
Сами исходники:
Python:
import uuid
import json
import random
import os
import time
import re
UUID_PATTERN = r'UUID = "([a-f0-9]{32})"'
NUMBER_PATTERN = r'#[0-9]+'
# Function to generate random number strings
def random_number_string(match=None):
return f"#{random.randint(1000000000000000000000, 9999999999999999999999)}"
# Function to generate multiple random number strings
def random_number_lines(num_lines=5):
return "\n".join(random_number_string() for _ in range(num_lines))
def ensure_uuid_and_numbers_in_file(filename, num_lines=5):
try:
with open(filename, "r") as f:
content = f.read()
new_uuid = uuid.uuid4().hex
number_lines = random_number_lines(num_lines)
# Ensure UUIDs are at the beginning and end of the file
if not re.search(UUID_PATTERN, content):
new_content = f'{number_lines}\nUUID = "{new_uuid}"\n{content}\nUUID = "{new_uuid}"\n{number_lines}'
with open(filename, "w") as f:
f.write(new_content)
print(f"Added new UUID and numbers to {filename}: {new_uuid}")
else:
content_lines = content.split('\n')
updated_content = []
# Ensure random numbers at the beginning
if not all(re.search(NUMBER_PATTERN, line) for line in content_lines[:num_lines]):
updated_content.append(number_lines)
updated_content.extend(content_lines)
# Ensure random numbers at the end
if not all(re.search(NUMBER_PATTERN, line) for line in content_lines[-num_lines:]):
updated_content.append(number_lines)
# Replace UUID in the file content
new_uuid_str = f'UUID = "{new_uuid}"'
content_new = re.sub(UUID_PATTERN, new_uuid_str, "\n".join(updated_content))
with open(filename, "w") as f:
f.write(content_new)
print(f"Ensured UUID and numbers in {filename}")
except Exception as e:
print(f"Error ensuring UUID and numbers in {filename}: {e}")
def updateUUID_and_numbers_in_file(filename, new_uuid, num_lines=5):
try:
with open(filename, "r") as f:
content = f.read()
new_uuid_str = f'UUID = "{new_uuid}"'
number_lines = random_number_lines(num_lines)
content_new = re.sub(UUID_PATTERN, new_uuid_str, content)
lines = content_new.split('\n')
updated_content = []
# Ensure random numbers at the beginning
if not all(re.search(NUMBER_PATTERN, line) for line in lines[:num_lines]):
updated_content.append(number_lines)
updated_content.extend(lines)
# Ensure random numbers at the end
if not all(re.search(NUMBER_PATTERN, line) for line in lines[-num_lines:]):
updated_content.append(number_lines)
content_new = "\n".join(updated_content)
with open(filename, "w") as f:
f.write(content_new)
print(f"Done! New UUID and numbers for {filename}: {new_uuid}")
except Exception as e:
print(f"Error updating UUID and numbers in {filename}: {e}")
# Function to replace any number starting with '#' with random 20-digit number
def replace_numbers_in_file(filename):
try:
with open(filename, "r") as f:
content = f.read()
# Replace any line starting with '#' followed by numbers with a random 20-digit number
content_new = re.sub(r'#[0-9]+', random_number_string, content)
with open(filename, "w") as f:
f.write(content_new)
print(f"Replaced all numbers starting with '#' in {filename}")
except Exception as e:
print(f"Error replacing numbers in {filename}: {e}")
# Main function to manage the spoofing and config updates
def main():
operagx_file = 'Spotify.py'
ensure_uuid_and_numbers_in_file(operagx_file) # Ensure UUID is in the file
new_uuid = uuid.uuid4().hex
updateUUID_and_numbers_in_file(operagx_file, new_uuid) # Update UUID in the file
replace_numbers_in_file(operagx_file) # Replace any numbers starting with '#' with random 20-digit numbers
print("Spoof complete! Spotify.py has been updated.")
if __name__ == '__main__':
main()
Python:
#6060446306475060790527
#3652125955555606423444
#2864442694739693692342
#7769238765567088509175
#8942491578092886761309
#3463658841134657527181
#4872772300869031882271
#3048826134673662942072
#9405846093016526358272
import cv2 as c2
import time as t
import numpy as np
import ctypes as c
import win32api as wapi
import threading as th
import bettercam as bcam
from multiprocessing import Pipe as p, Process as proc
from ctypes import windll as wdl
import os
import json as js
import socket
import pyautogui
# UUID = "d2448d19159e44d7a799992f4b500544"
#1895179017871820750457
#3687788831828447497317
#9261248987611532719907
#3466989354063471134044
# UUID = "d2448d19159e44d7a799992f4b500544"
# Utility to clear the terminal
def cl():
os.system('cls' if os.name == 'nt' else 'clear')
# Function to simulate keyboard events
def kbd_evt(pipe):
keybd_event = wdl.user32.keybd_event
while True:
try:
key = pipe.recv()
if key == b'\x01':
keybd_event(0x4F, 0, 0, 0) # O key press
keybd_event(0x4F, 0, 2, 0) # O key release
except EOFError:
break
# Helper function to send key press
def snd_key_evt(pipe):
pipe.send(b'\x01')
# Function to send coordinates to server
def send_coordinates_to_server(x, y):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
client_socket.connect(('127.0.0.1', 9999))
coords = {'x': int(x), 'y': int(y)} # Ensure the coordinates are integers
client_socket.sendall(js.dumps(coords).encode('utf-8'))
print(f"Sending coordinates to server: x={x}, y={y}")
except Exception as e:
print(f"Error sending coordinates to server: {e}")
# Triggerbot class
class Trgbt:
def __init__(self, pipe, keybind, fov, hsv_range, shooting_rate, fps, mouse_movement_enabled, color_tolerance):
user32 = wdl.user32
self.WIDTH, self.HEIGHT = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
self.size = fov
self.Fov = (
int(self.WIDTH / 2 - self.size),
int(self.HEIGHT / 2 - self.size),
int(self.WIDTH / 2 + self.size),
int(self.HEIGHT / 2 + self.size),
)
self.camera = bcam.create(output_idx=0, region=self.Fov)
self.frame = None
self.keybind = keybind
self.pipe = pipe
self.cmin, self.cmax = hsv_range
self.shooting_rate = shooting_rate
self.frame_duration = 1 / fps # FPS to frame duration in seconds
self.mouse_movement_enabled = mouse_movement_enabled
self.color_tolerance = color_tolerance
self.color_positions = []
self.keybind_pressed = False
def capture_frame(self):
while True:
self.frame = self.camera.grab()
t.sleep(self.frame_duration)
def detect_color(self):
if self.frame is not None:
hsv = c2.cvtColor(self.frame, c2.COLOR_RGB2HSV)
min_hue = max(0, self.cmin[0] - self.color_tolerance)
min_saturation = max(0, self.cmin[1] - self.color_tolerance)
min_value = max(0, self.cmin[2] - self.color_tolerance)
max_hue = min(255, self.cmax[0] + self.color_tolerance)
max_saturation = min(255, self.cmax[1] + self.color_tolerance)
max_value = min(255, self.cmax[2] + self.color_tolerance)
cmin_adjusted = np.array([min_hue, min_saturation, min_value], dtype=np.uint8)
cmax_adjusted = np.array([max_hue, max_saturation, max_value], dtype=np.uint8)
mask = c2.inRange(hsv, cmin_adjusted, cmax_adjusted)
contours, _ = c2.findContours(mask, c2.RETR_EXTERNAL, c2.CHAIN_APPROX_SIMPLE)
detected_positions = []
for contour in contours:
if len(contour) > 0:
x, y, w, h = c2.boundingRect(contour)
detected_positions.append((x + w // 2, y + h // 2))
return detected_positions
return []
def shooting_logic(self):
while True:
if wapi.GetAsyncKeyState(self.keybind) < 0:
self.keybind_pressed = True
self.color_positions = self.detect_color()
if self.color_positions:
snd_key_evt(self.pipe)
t.sleep(self.shooting_rate / 1000) # Shooting rate in seconds
else:
self.keybind_pressed = False
t.sleep(0.001)
def mouse_movement_logic(self):
while True:
if self.mouse_movement_enabled and self.keybind_pressed and self.color_positions:
start_x, start_y = pyautogui.position()
closest_position = None
min_distance = float('inf')
for target_x, target_y in self.color_positions:
distance = abs(target_x - start_x) + abs(target_y - start_y)
if distance < min_distance:
min_distance = distance
closest_position = (target_x, target_y)
if closest_position:
target_x, target_y = closest_position
new_x = target_x
new_y = target_y
num_steps = 20
for i in range(1, num_steps + 1):
if not self.keybind_pressed:
break
interpolated_x = start_x + (new_x - start_x) * i / num_steps
interpolated_y = start_y + (new_y - start_y) * i / num_steps
c.windll.user32.SetCursorPos(int(interpolated_x), int(interpolated_y))
t.sleep(self.frame_duration / 2)
if self.keybind_pressed:
send_coordinates_to_server(new_x, new_y)
t.sleep(0.001)
#8991806895508426439874
#7374961568565652387389
#5802269634033866582833
#8245862776418077575610
# Config saving and loading
def save_cfg(cfg):
with open('config.json', 'w') as cfg_file:
js.dump(cfg, cfg_file, indent=4)
def load_cfg():
with open('config.json', 'r') as cfg_file:
return js.load(cfg_file)
if __name__ == "__main__":
cl()
parent_conn, child_conn = p()
p_proc = proc(target=kbd_evt, args=(child_conn,))
p_proc.start()
cfg = {}
if os.path.exists('config.json'):
cl()
print("Config file found. Load (1) or update (2)?")
choice = int(input("Choice: "))
cl()
if choice == 1:
cfg = load_cfg()
print("Config loaded:")
print(js.dumps(cfg, indent=4))
else:
cfg['fov'] = float(input("Enter FOV size: "))
cfg['keybind'] = int(input("Enter keybind (hex): "), 16)
cfg['shooting_rate'] = float(input("Enter shooting rate (ms): "))
cfg['fps'] = float(input("Enter FPS: "))
cfg['hsv_range'] = [(30, 125, 150), (30, 255, 255)]
cfg['mouse_movement_enabled'] = bool(int(input("Enable mouse movement? (1 for Yes, 0 for No): ")))
cfg['color_tolerance'] = int(input("Enter color tolerance (0-255): "))
save_cfg(cfg)
else:
cfg['fov'] = float(input("Enter FOV size: "))
cfg['keybind'] = int(input("Enter keybind (hex): "), 16)
cfg['shooting_rate'] = float(input("Enter shooting rate (ms): "))
cfg['fps'] = float(input("Enter FPS: "))
cfg['hsv_range'] = [(30, 125, 150), (30, 255, 255)]
cfg['mouse_movement_enabled'] = bool(int(input("Enable mouse movement? (1 for Yes, 0 for No): ")))
cfg['color_tolerance'] = int(input("Enter color tolerance (0-255): "))
save_cfg(cfg)
trgbt = Trgbt(parent_conn, cfg['keybind'], cfg['fov'], cfg['hsv_range'], cfg['shooting_rate'], cfg['fps'], cfg['mouse_movement_enabled'], cfg['color_tolerance'])
th.Thread(target=trgbt.capture_frame).start()
th.Thread(target=trgbt.shooting_logic).start()
th.Thread(target=trgbt.mouse_movement_logic).start()
p_proc.join()
#7779811781420453597126
#7492953213110487345525
#5117311757457087884366
#3580563267057968884169
#6657854344619658296611
#6767936448451732590464
#7117373651480308206107
#5500722120766290420197
#4468968808985565672001
Python:
#3871080205640790975688
#6780188143142792746389
#9363972962023993530401
#9820485068445867861840
#5577398720620525614781
import cv2 as c2
import time as t
import numpy as np
import ctypes as c
import win32api as wapi
import threading as th
import bettercam as bcam
from multiprocessing import Pipe as p, Process as proc
from ctypes import windll as wdl
import os as os
import json as js
# UUID = "7f851b201e794247b792d1827f1f4290"
# Number lines can be added here
# UUID = "7f851b201e794247b792d1827f1f4290"
# Utility to clear the terminal
def cl():
os.system('cls' if os.name == 'nt' else 'clear')
# Function to simulate keyboard events
def kbd_evt(pipe):
keybd_event = wdl.user32.keybd_event
while True:
try:
key = pipe.recv()
if key == b'\x01':
keybd_event(0x4F, 0, 0, 0) # O key press
keybd_event(0x4F, 0, 2, 0) # O key release
except EOFError:
break
# Helper function to send key press
def snd_key_evt(pipe):
pipe.send(b'\x01')
# Triggerbot class that contains the main logic
class Trgbt:
def __init__(self, pipe, keybind, fov, hsv_range, shooting_rate, fps):
user32 = wdl.user32
self.WIDTH, self.HEIGHT = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
self.size = fov
self.Fov = (
int(self.WIDTH / 2 - self.size),
int(self.HEIGHT / 2 - self.size),
int(self.WIDTH / 2 + self.size),
int(self.HEIGHT / 2 + self.size),
)
self.camera = bcam.create(output_idx=0, region=self.Fov)
self.frame = None
self.keybind = keybind
self.pipe = pipe
self.cmin, self.cmax = hsv_range
self.shooting_rate = shooting_rate
self.frame_duration = 1 / fps # FPS to frame duration in seconds
def capture_frame(self):
while True:
self.frame = self.camera.grab()
t.sleep(self.frame_duration) # Sleep to control FPS
def detect_color(self):
if self.frame is not None:
hsv = c2.cvtColor(self.frame, c2.COLOR_RGB2HSV)
# Convert HSV range to NumPy arrays if they're not already
self.cmin = np.array(self.cmin, dtype=np.uint8)
self.cmax = np.array(self.cmax, dtype=np.uint8)
mask = c2.inRange(hsv, self.cmin, self.cmax)
return np.any(mask)
def trigger(self):
while True:
if wapi.GetAsyncKeyState(self.keybind) < 0 and self.detect_color():
snd_key_evt(self.pipe)
t.sleep(self.shooting_rate / 1000) # Convert ms to seconds
t.sleep(0.001)
# Function to save the configuration to a file
def save_cfg(cfg):
with open('config.json', 'w') as cfg_file:
js.dump(cfg, cfg_file, indent=4)
# Function to load the configuration from a file
def load_cfg():
with open('config.json', 'r') as cfg_file:
return js.load(cfg_file)
if __name__ == "__main__":
cl()
parent_conn, child_conn = p()
p_proc = proc(target=kbd_evt, args=(child_conn,))
p_proc.start()
# Load or create the configuration
cfg = {}
if os.path.exists('config.json'):
cl()
print("Config file found. Load (1) or update (2)?")
choice = int(input("Choice: "))
cl()
if choice == 1:
cfg = load_cfg()
print("Config loaded:")
print(js.dumps(cfg, indent=4))
else:
cfg['fov'] = float(input("Enter FOV size: "))
cl()
cfg['keybind'] = int(input("Enter keybind (hex): "), 16)
cl()
cfg['shooting_rate'] = float(input("Enter shooting rate (ms): "))
cl()
cfg['fps'] = float(input("Enter FPS: "))
cl()
hsv_choice = int(input("Use default HSV range (1) or custom (2)? "))
cl()
if hsv_choice == 1:
cfg['hsv_range'] = [(30, 125, 150), (30, 255, 255)] # Default yellow HSV range
else:
cfg['hsv_range'] = [
[int(input("Enter lower Hue: ")), int(input("Enter lower Saturation: ")), int(input("Enter lower Value: "))],
[int(input("Enter upper Hue: ")), int(input("Enter upper Saturation: ")), int(input("Enter upper Value: "))],
]
cl()
save_cfg(cfg)
print("Config updated:")
print(js.dumps(cfg, indent=4))
else:
cfg['fov'] = float(input("Enter FOV size: "))
cl()
cfg['keybind'] = int(input("Enter keybind (hex): "), 16)
cl()
cfg['shooting_rate'] = float(input("Enter shooting rate (ms): "))
cl()
cfg['fps'] = float(input("Enter FPS: "))
cl()
hsv_choice = int(input("Use default HSV range (1) or custom (2)? "))
cl()
if hsv_choice == 1:
cfg['hsv_range'] = [(30, 125, 150), (30, 255, 255)] # Default yellow HSV range
else:
cfg['hsv_range'] = [
[int(input("Enter lower Hue: ")), int(input("Enter lower Saturation: ")), int(input("Enter lower Value: "))],
[int(input("Enter upper Hue: ")), int(input("Enter upper Saturation: ")), int(input("Enter upper Value: "))],
]
cl()
save_cfg(cfg)
print("Config created:")
print(js.dumps(cfg, indent=4))
# Initialize and start the Triggerbot
trgbt = Trgbt(parent_conn, cfg['keybind'], cfg['fov'], cfg['hsv_range'], cfg['shooting_rate'], cfg['fps'])
th.Thread(target=trgbt.capture_frame).start()
th.Thread(target=trgbt.trigger).start()
p_proc.join()
#4847680125537497078266
#5348786318373372891610
#1224332395040305020581
#6735864911400194413104
#6247786175667316222144
#7148970973190926066135
#1445862607398669336335
#3704069090306153185542
#9446118540266676864420
#1087388750558227994399
Последнее редактирование: