
Overlay de jogo externo somente leitura para Linux. Offsets derivados, esqueletos compostos, módulo de kernel opcional para leituras de memória independentes de ptrace e entrada em nível de ponteiro.
Um overlay externo para THE FINALS no Linux.
Ele lê a memória do jogo a partir de um processo separado, desenha uma janela transparente que ignora cliques por cima do jogo, e fornece um aim assist e um triggerbot. Nada é injetado no jogo e nada é jamais gravado de volta; a ferramenta lê memória e move o mouse, e só.
Construído do zero no Linux: cada offset de jogo neste repositório foi derivado observando o processo em execução, não copiado de um dump de SDK publicado.
https://github.com/user-attachments/assets/674baa52-3006-4767-a263-29178bed3a31
Arch / CachyOS
sudo pacman -S --needed base-devel cmake sfml libx11 libxext
paru -S imgui-sfml
Ubuntu 24.04+ / Debian 13+
sudo apt install build-essential cmake libsfml-dev libx11-dev libxext-dev
pkg-config --modversion sfml-graphics # deve ser 3.x
ImGui-SFML não está empacotado lá e precisa ser compilado a partir do código-fonte.
REQUIREMENTS.md cobre o restante: compilar SFML 3 e
ImGui-SFML a partir do código-fonte, headers do kernel para o módulo, Secure Boot,
ptrace_scope, e como verificar uma configuração funcional.
CachyOS kernel 7.1.2-3-cachyos, compilado com clang 22.1.6
KDE Plasma 6.7.2 sessão Wayland, overlay rodando via XWayland
SFML 3.1.0 CMake 4.3.4, GCC 16.1.1
Intel UHD + RTX 4060 jogo sob Proton, modo Janela
Duas partes disso merecem destaque, porque são os casos complicados:
Esta é a máquina de desenvolvimento, então é a única configuração realmente verificada. Espera-se que outras distribuições, desktops e kernels compilados com GCC funcionem, mas não foram testados.
chmod +x build.sh run.sh # um download zip remove o bit de execução
./build.sh # configurar e compilar
./build.sh clean # a partir de um diretório de build limpo
O binário é gravado em build/TheFinals.
O CMake armazena o caminho absoluto do código-fonte em seu cache, então um diretório
de build movido ou renomeado para de funcionar. build.sh percebe isso e
reconfigura sozinho, então mover o projeto não é algo com que você precise se preocupar.
kmod/ compila um pequeno módulo que torna a ferramenta consideravelmente mais silenciosa no
sistema. É totalmente opcional: sem ele tudo ainda funciona, usando os
fallbacks em userspace indicados abaixo.
access_process_vm() no espaço do kernel, então
ptrace_scope não se aplica. A ferramenta não precisa de sudo, nada precisa se anexar
ao jogo, e o yama não precisa ser afrouxado para o sistema inteiro./proc/bus/input/devices para qualquer um
que queira olhar. Com o módulo não há dispositivo extra algum.cd kmod && make
sudo insmod suite_kmod.ko
Um módulo deve ser compilado com o mesmo compilador do kernel no qual ele é carregado. O
Makefile lê isso da própria configuração do kernel e define a toolchain por conta própria,
então make simples está correto tanto em um kernel GCC quanto em um clang:
kernel 7.1.2-3-cachyos
toolchain clang (LLVM=1)
Substitua com make LLVM=0 ou make LLVM=1 se ele errar a suposição. Se os
headers do kernel estiverem ausentes, ele avisa e imprime o comando de instalação para a sua
distribuição.
Com Secure Boot habilitado, um módulo não assinado não será carregado: assine-o, desabilite o Secure Boot, ou simplesmente pule o módulo.
Carregue-o antes de iniciar a ferramenta; o backend é escolhido uma única vez, na inicialização.
Confirme qual backend está ativo no menu, ou no log:
[mem] kernel backend: /dev/suite_kmod
[vmouse] kernel injection into the real pointer
Descarregue com sudo rmmod suite_kmod.
Coloque o jogo no modo Janela primeiro. Em Tela Cheia o jogo é dono do display por completo e nada pode desenhar por cima dele, então o overlay estará rodando corretamente e ainda assim invisível.
O overlay encontra a janela do jogo e acompanha sua posição e tamanho, reverificando conforme você se move, então ele segue a janela se você a mover ou redimensionar, e se adapta a qualquer resolução.
./run.sh # encontra o PID do jogo sozinho
./run.sh 12345 # ou forneça um
./run.sh -q # silencioso: apenas algumas linhas de status
Inicie quando quiser, inclusive no menu. Ele re-resolve seus objetos quando uma partida começa ou termina, então não precisa ser reiniciado entre rodadas.
| Tecla | Ação |
|---|---|
INSERT | Alterna o menu de configurações. Enquanto aberto, o overlay captura cliques do mouse; enquanto fechado, os cliques passam para o jogo. |
HOME | Alterna o aim assist. |
End | Sair, com o overlay em foco. no terminal também funciona. |
As configurações são editadas no menu e salvas em settings.cfg quando a ferramenta sai,
então ela volta do jeito que você deixou.
Caixas, esqueletos, nomes, barras de vida, distância e linhas de mira. Cores de esquadrão distinguem times, e um controle deslizante mestre de opacidade governa tudo o que é desenhado.
O esqueleto é composto a partir da própria hierarquia de ossos da malha, então ele acompanha a animação em vez de aproximar a partir de uma cápsula.
Puxa em direção a um alvo enquanto o botão do mouse escolhido estiver pressionado.
Atira quando a mira está sobre o alvo.
Jogadores que não estão sendo desenhados pelo jogo no momento são riscados e esmaecidos, e o aim assist e o triggerbot podem, cada um, ser configurados para ignorá-los.
Isso é derivado do próprio timestamp de renderização do motor, então é conservador por natureza: o jogo faz culling em uma caixa delimitadora, que é maior que o jogador, e as consultas de oclusão ficam um frame ou dois atrasadas. Espere que um inimigo seja marcado como visível ligeiramente antes de ele limpar completamente um canto. O controle deslizante de tolerância controla com que rapidez alguém sai do estado visível após perder a linha de visão.
Todo endereço específico do jogo vive em offsets.cfg, lido na inicialização a partir do
diretório de trabalho ou um nível acima dele.
A ferramenta se recusa a iniciar sem ele e nomeia qualquer coisa ausente. Isso é deliberado: um offset que é silenciosamente zero produz uma tela vazia sem explicação, o que é muito pior de diagnosticar do que uma falha clara.
Uma atualização do jogo move esses valores. Quando isso acontece, a ferramenta inicia mas não encontra
nada. Re-derive os offsets e copie o novo offsets.cfg aqui. Nenhuma recompilação é necessária.
README.md este arquivo
REQUIREMENTS.md dependências e como instalá-las
LICENSE GPL-2.0
build.sh script de build
run.sh lançador
banner.txt banner de inicialização
offsets.cfg offsets do jogo (obrigatório)
CMakeLists.txt
src/
main.cpp ponto de entrada, janela do overlay, loop de renderização
mem.hpp leituras de memória do processo
cheat.hpp thread de leitura, lista de entidades
render.hpp desenho do ESP, aim assist, triggerbot, menu
global.hpp estado compartilhado entre as threads de leitura e renderização
structs.hpp tipos do motor e projeção mundo-para-tela
skeleton.hpp composição da hierarquia de ossos
settings.hpp carregamento e salvamento de settings.cfg
vmouse.hpp saída do mouse
offsets.hpp constantes fixas do layout do motor
runtime_offsets.hpp carregador de offsets.cfg
gobjects_direct.hpp decodificação do array de objetos
kmod/
suite_kmod.c módulo do kernel: leituras de memória e injeção de mouse
suite_kmod.h contrato ioctl compartilhado
Makefile
settings.cfg é criado na primeira vez que a ferramenta sai.
offsets.cfg not found: execute a partir do diretório do projeto, ou mantenha o arquivo
ao lado do binário.
offsets.cfg is present but incomplete: os offsets que ele nomeia são zero. O
jogo provavelmente foi atualizado; re-derive-os.
Nada aparece na tela, mas o log parece saudável: o jogo provavelmente está em
Tela Cheia, que não permite que nada desenhe por cima dele. Mude para o modo Janela. A
linha de log game window at X,Y WxH - overlay will match confirma que o
overlay encontrou e acompanhou a janela.
O overlay engole seus cliques do mouse: libXext estava ausente quando você compilou, então
o clique-transparente foi compilado para fora. A etapa de configuração avisa sobre isso; procure por
XShape click-through: enabled. Instale libxext/libxext-dev e recompile.
Overlay no lugar errado, ou cliques não passando: o overlay precisa de X11. Sob Wayland, force o XWayland:
DISPLAY=:0 WAYLAND_DISPLAY= ./run.sh
Jogo não encontrado: passe o PID diretamente. Sob Proton o processo é
Discovery-d.exe e a thread correta é GameThread.
Nada desenhado durante uma partida: os offsets estão desatualizados após uma atualização do jogo.
Aim assist não faz nada: verifique se o menu reporta um backend de mouse. Se "visible only" está habilitado e todo inimigo está atrás de cobertura, deliberadamente não há alvo.
Módulo do kernel não compila: ele deve ser compilado com a mesma toolchain do seu
kernel em execução. Em um kernel compilado com clang: make LLVM=1.
Isto lê a memória de outro processo e injeta entrada de mouse. Não modifica o jogo, mas usá-lo em uma partida online viola os termos de serviço do jogo e pode custar a sua conta. Essa é uma decisão sua; tome-a conscientemente.
GNU General Public License, versão 2. Veja LICENSE.
Você pode usar, estudar, modificar e redistribuir isto. Se você distribuir uma versão modificada, deve acompanhá-la com seu código-fonte sob a mesma licença, para que todos que a receberem mantenham as mesmas liberdades. Não há garantia.
GPLv2 em vez de v3 deliberadamente: o módulo do kernel em kmod/ é um módulo
de kernel Linux, o kernel é GPL-2.0-only, e MODULE_LICENSE("GPL") significa
versão 2. Licenciar todo o projeto da mesma forma mantém a ferramenta em userspace e o
módulo compatíveis entre si e com o kernel, sem divisão para se preocupar.
Copyright © 2026 Ymsniper.
Ctrl-C