24 de maio de 2026
Reverse Engineering da Proteção de Captura de Tela de um Jogo
Começou com uma frustração simples: eu e meus amigos jogamos um jogo online juntos, e não conseguimos compartilhar tela no Discord. O jogo bloqueia. Tela preta, toda vez.
Eu poderia ter aceitado isso. Mas algo em saber que um software no meu computador estava deliberadamente me impedindo de fazer algo inofensivo me deixou curioso. Passei o dia inteiro nessa toca de coelho.
A primeira pista
Antes de tocar em qualquer ferramenta, notei algo estranho: semanas atrás, por alguns minutos, todo mundo no grupo conseguiu compartilhar tela ao mesmo tempo. Depois parou de novo. Pra todo mundo, simultaneamente.
Se a proteção fosse puramente client-side, cada computador decidiria isso de forma independente. O fato de ter quebrado e voltado em sincronia apontava pra algo server-side.
Encontrando o mecanismo
Uma busca rápida confirmou a API usada: SetWindowDisplayAffinity, do user32.dll. Com a flag WDA_EXCLUDEFROMCAPTURE, qualquer captura de tela (Discord, OBS, navegador) enxerga a janela como preta.
Abrindo a caixa preta com Ghidra
Nunca tinha feito engenharia reversa antes. Instalei o Ghidra, carreguei o executável do jogo, e busquei no import table por SetWindowDisplayAffinity. Um único resultado: um único lugar no código inteiro onde essa função era chamada.
void FUN_00be4080(int param_1, char param_2) {
DWORD dwAffinity = 0x11;
if (param_2 == '\0')
{
dwAffinity = 0;
}
SetWindowDisplayAffinity(*(HWND *)(param_1 + 4), dwAffinity);
}
Testei patchar o binário diretamente, trocando a instrução que passava a flag de bloqueio por uma que sempre passava zero. Funcionou. E ver o decompilador atualizar em tempo real, refletindo a mudança, foi o momento em que entendi visceralmente o que é engenharia reversa.
A camada de rede
Capturando tráfego com Wireshark, descobri que a decisão não vinha dos servidores do próprio jogo, mas de um SDK de terceiros (otimização de rede) embutido no cliente. Isso explicava a sincronização: quando o servidor deles caía, o sinal de bloqueio sumia pra todo mundo ao mesmo tempo.
O que ficou
Não resolvi o problema original: meus amigos ainda não conseguem ver minha stream do jogo. Mas saí entendendo, na prática, como Windows controla captura de tela a nível de API, como anti-cheats protegem memória de processo, e como hooks funcionam a nível de byte.
A parte melhor não foi nenhuma descoberta específica. Foi tratar algo opaco e aparentemente fixo como um sistema que podia ser entendido.