#!/bin/bash # Путь к скомпилированной библиотеке LIB_NAME="libahc_rs.so" LIB_PATH="$(pwd)/target/i686-unknown-linux-gnu/release/$LIB_NAME" if [ ! -f "$LIB_PATH" ]; then echo "[-] Ошибка: Файл $LIB_PATH не найден." echo "[!] Сначала скомпилируйте проект: cargo build --release --target i686-unknown-linux-gnu" exit 1 fi # Поиск процесса игры GAME_PID=$(pidof hl_linux) if [ -z "$GAME_PID" ]; then echo "[+] Игра не запущена. Запуск через LD_PRELOAD..." echo "[!] Убедитесь, что вы находитесь в папке с игрой или укажите полный путь." # Пример запуска (путь может отличаться в зависимости от установки Steam) # LD_PRELOAD="$LIB_PATH" ./hl.sh -game cstrike echo "Введите команду для запуска CS 1.6 (например, ./hl.sh -game cstrike):" read -r RUN_CMD LD_PRELOAD="$LIB_PATH" eval "$RUN_CMD" else # Копируем библиотеку в /tmp с уникальным именем для форсированной перезагрузки TIMESTAMP=$(date +%s) TMP_LIB="/tmp/libahc_rs_$TIMESTAMP.so" cp "$LIB_PATH" "$TMP_LIB" chmod 777 "$TMP_LIB" echo "[+] Инъекция: $TMP_LIB" # Создаем временный файл команд для gdb GDB_CMD=$(mktemp) echo "attach $GAME_PID" > "$GDB_CMD" echo "call (void*)dlopen(\"$TMP_LIB\", 2)" >> "$GDB_CMD" echo "detach" >> "$GDB_CMD" echo "quit" >> "$GDB_CMD" # Запускаем gdb sudo gdb -batch -x "$GDB_CMD" rm "$GDB_CMD" if [ $? -eq 0 ]; then echo "[+] Sucsess injected" else echo "[-] Ошибка при инъекции. Проверьте, установлен ли gdb и есть ли права sudo." fi fi