Загрузка данных
import pymem
import pymem.process
import ctypes
import time
import math
import sys
# Windows API для мыши
user32 = ctypes.windll.user32
# Настройки
AIMBOT_ENABLED = True
AIM_FOV = 30 # угол поиска врага (чем меньше, тем точнее)
AIM_SMOOTH = 5 # плавность (1 - мгновенно, больше - плавнее)
AIM_KEY = 0x02 # правая кнопка мыши (0x02 = RMB, 0x04 = средняя)
AIM_HEAD = True # наводить в голову (True) или в тело (False)
def get_angle(source, destination):
"""Вычисляет углы для наведения из source в destination"""
delta_x = source[0] - destination[0]
delta_y = source[1] - destination[1]
delta_z = source[2] - destination[2]
hyp = math.sqrt(delta_x * delta_x + delta_y * delta_y)
angle_x = math.atan(delta_z / hyp) * (180.0 / math.pi)
angle_y = math.atan(delta_y / delta_x) * (180.0 / math.pi)
if delta_x >= 0.0:
angle_y += 180.0
return [angle_x, angle_y]
def normalize_angle(angle):
"""Нормализует углы"""
if angle[0] > 89.0:
angle[0] = 89.0
if angle[0] < -89.0:
angle[0] = -89.0
while angle[1] > 180.0:
angle[1] -= 360.0
while angle[1] < -180.0:
angle[1] += 360.0
return angle
def smooth_angle(current, target, smooth):
"""Плавное наведение"""
delta_x = target[0] - current[0]
delta_y = target[1] - current[1]
if smooth > 0:
return [current[0] + delta_x / smooth, current[1] + delta_y / smooth]
return target
def find_local_player(pm, client_base):
"""Автоматический поиск LocalPlayer"""
for offset in range(0, 0x200000, 4):
try:
addr = client_base + offset
health = pm.read_int(addr)
if health == 100:
team = pm.read_int(addr - 0x8)
if team in (1, 2):
return offset - 0xF8
except:
pass
return None
def find_entity_list(pm, client_base, dw_local):
"""Автоматический поиск EntityList"""
# Стандартное смещение
entity_list = dw_local + 0xC0
test = pm.read_int(client_base + entity_list)
if test:
return entity_list
# Поиск
for offset in range(0xC0, 0x100, 4):
try:
test = pm.read_int(client_base + offset)
if test and 0 < test < 0xFFFFFFFF:
return offset
except:
pass
return None
def find_view_matrix(pm, client_base):
"""Автоматический поиск ViewMatrix"""
for offset in range(0x120000, 0x130000, 16):
try:
# Проверяем, похоже ли на матрицу
good = True
for i in range(4):
val = pm.read_float(client_base + offset + i*4)
if abs(val) > 5:
good = False
break
if good:
return offset
except:
pass
return None
def main():
print("=== CS 1.6 Aimbot ===")
print("Rutube: https://rutube.ru/channel/43805541")
print("Telegram: hackeriks")
print()
# Подключаемся к игре
try:
pm = pymem.Pymem("hl.exe")
print("[+] hl.exe найден")
except:
print("[-] CS 1.6 не запущена")
return
client = pymem.process.module_from_name(pm.process_handle, "hw.dll")
client_base = client.lpBaseOfDll
print(f"[+] hw.dll base: {hex(client_base)}")
# Ищем LocalPlayer
print("[*] Поиск LocalPlayer...")
dw_local = find_local_player(pm, client_base)
if not dw_local:
print("[-] Не найден. Убедитесь, что вы в катке живым.")
return
print(f"[+] dwLocalPlayer = {hex(dw_local)}")
# Ищем EntityList
print("[*] Поиск EntityList...")
dw_entity = find_entity_list(pm, client_base, dw_local)
if not dw_entity:
print("[-] EntityList не найден. Использую стандартный.")
dw_entity = 0x1A2A78
print(f"[+] dwEntityList = {hex(dw_entity)}")
# Ищем ViewMatrix
print("[*] Поиск ViewMatrix...")
dw_view = find_view_matrix(pm, client_base)
if not dw_view:
print("[-] ViewMatrix не найден. Использую стандартный.")
dw_view = 0x12EAF0
print(f"[+] dwViewMatrix = {hex(dw_view)}")
# Получаем окно для размеров экрана
hwnd = user32.FindWindowW(None, "Counter-Strike")
rect = ctypes.wintypes.RECT()
user32.GetWindowRect(hwnd, ctypes.byref(rect))
screen_w = rect.right - rect.left
screen_h = rect.bottom - rect.top
print(f"\n[*] Aimbot запущен. Зажмите ПРАВУЮ кнопку мыши для наведения.")
print("[*] F1 - Включить/Выключить")
global AIMBOT_ENABLED
last_angles = [0, 0]
while True:
# F1 для вкл/выкл
if user32.GetAsyncKeyState(0x70) & 1:
AIMBOT_ENABLED = not AIMBOT_ENABLED
print(f"Aimbot: {'ON' if AIMBOT_ENABLED else 'OFF'}")
time.sleep(0.2)
if not AIMBOT_ENABLED:
time.sleep(0.05)
continue
# Проверка зажатой клавиши аима (правая кнопка)
if not (user32.GetAsyncKeyState(AIM_KEY) & 0x8000):
time.sleep(0.01)
continue
try:
# Получаем локального игрока
local_player = pm.read_int(client_base + dw_local)
if not local_player:
continue
# Координаты глаз игрока
origin_x = pm.read_float(local_player + 0x130)
origin_y = pm.read_float(local_player + 0x134)
origin_z = pm.read_float(local_player + 0x138)
view_offset_z = pm.read_float(local_player + 0x104 + 8)
eye_pos = [origin_x, origin_y, origin_z + view_offset_z]
# Текущие углы
current_angle_x = pm.read_float(local_player + 0x110)
current_angle_y = pm.read_float(local_player + 0x114)
current_angle = [current_angle_x, current_angle_y]
local_team = pm.read_int(local_player + 0xF0)
best_fov = AIM_FOV
best_angles = None
# Матрица вида
view_matrix = [0] * 16
for i in range(16):
view_matrix[i] = pm.read_float(client_base + dw_view + i * 4)
# Поиск врагов
for i in range(1, 32):
entity = pm.read_int(client_base + dw_entity + i * 4)
if not entity:
continue
entity_team = pm.read_int(entity + 0xF0)
if entity_team == local_team:
continue
health = pm.read_int(entity + 0xF8)
if health <= 0:
continue
# Координаты цели
target_x = pm.read_float(entity + 0x130)
target_y = pm.read_float(entity + 0x134)
target_z = pm.read_float(entity + 0x138)
if AIM_HEAD:
target_z += 60.0 # голова
else:
target_z += 30.0 # тело
target_pos = [target_x, target_y, target_z]
# Вычисляем углы до цели
angles = get_angle(eye_pos, target_pos)
angles = normalize_angle(angles)
# Разница с текущими углами
delta_x = abs(angles[0] - current_angle[0])
delta_y = abs(angles[1] - current_angle[1])
fov = math.sqrt(delta_x * delta_x + delta_y * delta_y)
if fov < best_fov:
best_fov = fov
best_angles = angles
# Наводим на цель
if best_angles:
new_angles = smooth_angle(current_angle, best_angles, AIM_SMOOTH)
new_angles = normalize_angle(new_angles)
pm.write_float(local_player + 0x110, new_angles[0])
pm.write_float(local_player + 0x114, new_angles[1])
except Exception as e:
pass
time.sleep(0.005)
if __name__ == "__main__":
main()