@echo off
setlocal enabledelayedexpansion
title Capturar trafego do jogo pela REDE

rem  Grava o trafego de um client que o injector nao consegue tocar (Themida,
rem  XIGNCODE, XTrap). Essas proteccoes defendem a MEMORIA do processo; nao
rem  escondem os bytes que saem pela placa de rede.
rem
rem  Faz tudo: liga o pktmon, espera por ti, para, converte e ja mostra os
rem  opcodes encontrados. Basta clicar duas vezes.

rem ---- precisa de administrador: se nao for, pede e relanca -------------------
net session >nul 2>&1
if errorlevel 1 (
    echo A pedir permissao de administrador...
    powershell -NoProfile -Command "Start-Process -Verb RunAs -FilePath '%~f0'"
    exit /b
)

cd /d "%~dp0"

rem ---- onde esta o python ----------------------------------------------------
set "PY=python"
where python >nul 2>&1 || set "PY=C:\Python314\python.exe"
if not exist "%PY%" if "%PY%" neq "python" (
    echo.
    echo NAO ACHEI O PYTHON. Instala-o ou edita a linha PY= deste ficheiro.
    pause
    exit /b 1
)

rem ---- nome com carimbo, para nao entornar em cima da captura anterior --------
for /f %%t in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmm"') do set "CARIMBO=%%t"
set "ETL=captura_%CARIMBO%.etl"
set "PCAP=captura_%CARIMBO%.pcapng"

echo.
echo ============================================================
echo   CAPTURA DE REDE  --  %CARIMBO%
echo ============================================================
echo.

rem ---- se ficou alguma sessao pendurada de uma corrida anterior ---------------
pktmon stop >nul 2>&1

echo [1/4] a comecar a gravacao...
pktmon start --capture --pkt-size 0 -f "%ETL%" >nul
if errorlevel 1 (
    echo    FALHOU ao arrancar o pktmon.
    pause
    exit /b 1
)
echo    a gravar para %ETL%
echo.
echo ------------------------------------------------------------
echo   ABRE O JOGO E FAZ O QUE QUERES MEDIR.
echo.
echo   Grava so o tempo necessario: o pktmon apanha TUDO o que
echo   passa na placa, incluindo a tua propria ligacao remota.
echo   Dois minutos ja dao muito material.
echo ------------------------------------------------------------
echo.
pause

echo.
echo [2/4] a parar...
pktmon stop >nul

echo [3/4] a converter para pcapng...
pktmon etl2pcap "%ETL%" -o "%PCAP%" >nul
if not exist "%PCAP%" (
    echo    A CONVERSAO FALHOU. O %ETL% ficou guardado; converte a mao com:
    echo       pktmon etl2pcap "%ETL%" -o "%PCAP%"
    pause
    exit /b 1
)

echo [4/4] a ler os pacotes...
echo.
"%PY%" ler_pcap.py "%PCAP%"

echo.
echo ============================================================
echo   ficheiros:  %ETL%
echo               %PCAP%
echo.
echo   Se os opcodes acima fizerem sentido (02 00 no login, 04 01
echo   a cada passo, 0b 00 de handshake), o protocolo vai em claro.
echo   Se sair tudo lixo, ha cifra por cima.
echo.
echo   Se a porta sair errada, corre a mao:
echo       %PY% ler_pcap.py %PCAP% --porta NUMERO
echo ============================================================
echo.
pause
