Manipulação de memória.

Jadiael Juvino
15 de novembro de 2025
8 min de leitura
GTA San Andreas
Cheat Engine
Automação
Memória
Games
Teleporte
Rockstar Games Launcher
Portfólio

Praticando ponteiros e offsets revisitando GTA San Andreas v1.0.1.32 (Rockstar Games Launcher).

Revisitação ao GTA San Andreas (RGL 1.0.1.32) e exploração de memória com Cheat Engine


Depois de muitos anos sem encostar em GTA San Andreas, decidi revisitar o jogo — agora em um ambiente bem mais moderno, rodando no Windows 11 com a versão distribuída pelo Rockstar Games Launcher (RGL), 1.0.1.32.

Como jogador, a motivação inicial foi pura nostalgia.
Como desenvolvedor, a motivação real foi outra: entender como essa build se comporta hoje, quais são suas limitações técnicas e o que dá pra fazer em termos de automação e manipulação de memória.

Logo de início, levantei alguns pontos importantes:
  • A versão 1.0.1.32 (RGL) roda de forma estável em sistemas atuais, sem crash aleatório ou necessidade de patch da comunidade.
  • É possível jogar o jogo base puro, sem qualquer mod de terceiros.
  • Por outro lado, essa build praticamente não é suportada pela comunidade modder.

A partir disso, o caminho ficou bem claro: em vez de fazer downgrade e usar mods clássicos, resolvi abraçar essa versão específica e usá-la como laboratório de estudo de memória.


Por que não fiz downgrade (e por que isso importa)


Se você pesquisa hoje sobre mods de GTA San Andreas, a recomendação padrão é:
  • fazer downgrade para versões antigas, e só depois
  • aplicar mods, plugins, CLEO, etc.

O problema é que essa recomendação ignora completamente a versão do Rockstar Games Launcher.

No meu caso, eu queria:
  • manter o jogo original, sem mexer no executável;
  • não entrar em zona cinzenta de EULA com exe modificado;
  • e, ao mesmo tempo, explorar o jogo com um olhar técnico.

Por isso, optei por não fazer downgrade e jogar exatamente a versão 1.0.1.32 RGL, como ela vem.

Isso cria um cenário interessante:
  • a engine original está estável;
  • o conteúdo de jogo e o progresso são os mesmos que já estão totalmente documentados há anos;
  • mas não existem tabelas públicas confiáveis de Cheat Engine para essa build específica (fiz uma pesquisa caprichada em toda internet e não achei nada que funcione!).

Ou seja: campo aberto para exploração técnica.


Jogando como jogador… e como engenheiro de software


Jogando “normalmente”, uma coisa salta aos olhos: GTA San Andreas te obriga a andar muito pelo mapa.

Do ponto de vista de design de game, isso faz sentido:
  • o mapa é enorme;
  • sistemas importantes (missões, colecionáveis, escolas, namoradas, propriedades) estão espalhados;
  • o jogo quer que o jogador descubra o mundo na marra.

Do ponto de vista de desenvolvedor, fica bem claro que:
  • muito tempo é gasto em deslocamento repetitivo;
  • várias ações são altamente mecânicas e previsíveis;
  • a lógica de progresso do jogo já está detalhadamente documentada hoje.

Como é um jogo single-player offline, minha ideia foi simples:

> Respeitar a história e o conteúdo do jogo, mas dar bypass em atritos repetitivos usando técnicas que eu já uso no dia a dia, como manipulação de memória e automação.

É aqui que entra o velho amigo: Cheat Engine.


Usando Cheat Engine como ferramenta de estudo


Como não encontrei tabelas confiáveis para a versão 1.0.1.32 RGL, decidi montar a minha própria.

O processo foi basicamente:
  • abrir o processo gta_sa.exe;
  • analisar o módulo base;
  • seguir cadeias de ponteiros;
  • procurar endereços estáveis relativos ao módulo.

O objetivo era encontrar endereços fixos para itens que me interessam em termos de automação de progresso, como:
  • coordenadas do jogador (a pé e dentro de veículo);
  • atributos do CJ (Muscle, Stamina, Fat, Sex Appeal, etc.);
  • progresso com as namoradas;
  • proficiência em armas e veículos;
  • vida, colete, dinheiro;
  • níveis de sorte;
  • flags de física e estado do veículo/jogador;
  • hora e minuto internos do jogo;
  • slots de arma + quantidade de munição.

Alguns exemplos (relativos ao módulo gta_sa.exe da versão 1.0.1.32 RGL):
  • Health / Armor (via cadeia de ponteiro principal):
  • Health: [gta_sa.exe+80F18C-0xBC] + 0x540
  • Armor: [gta_sa.exe+80F18C-0xBC] + 0x548
  • Atributos (Max 1000) em torno de gta_sa.exe+80B600 / gta_sa.exe+80B604:
  • Stamina, Fat, Muscle, Sex Appeal.
  • Dinheiro:
  • gta_sa.exe+80F188
  • Proficiência em armas (offsets sequenciais a partir de um mesmo bloco):
  • Pistol, Silenced Pistol, Desert Eagle, Shotgun, Rifle, etc.

A ideia não é só “trapacear”, mas entender como o jogo se organiza em memória e transformar isso em algo reutilizável, seguro e documentado.


Coordenadas, teleporte e presets


Um dos focos principais foi encontrar cadeias de ponteiro confiáveis para a posição:
  • Posição do jogador a pé
  • X: [[gta_sa.exe+80F18C-0xBC] + 0x14] + 0x30
  • Y: [[gta_sa.exe+80F18C-0xBC] + 0x14] + 0x34
  • Z: [[gta_sa.exe+80F18C-0xBC] + 0x14] + 0x38
  • Posição do veículo (quando o jogador está dentro)
  • X: [[[gta_sa.exe+80F18C-0xBC] + 0x58C] + 0x14] + 0x30
  • Y: [[[gta_sa.exe+80F18C-0xBC] + 0x58C] + 0x14] + 0x34
  • Z: [[[gta_sa.exe+80F18C-0xBC] + 0x58C] + 0x14] + 0x38

Além disso, uso um byte de estado do jogador que indica o contexto:
  • [[0x00C0F0D0] + 0x46C]
  • 0 = ar/água
  • 1 = dentro de carro
  • 2 = entrando em interior
  • 3 = a pé
  • 4 = nadando

Com isso em mãos, construí uma camada em Lua dentro do Cheat Engine que:
  • detecta se o CJ está a pé ou dentro de um veículo;
  • escolhe a cadeia de ponteiro correta (player ou vehicle);
  • ajusta a física temporariamente para evitar comportamentos estranhos;
  • aplica presets de coordenadas de forma segura.

Na prática, isso me permite:
  • teleportar o CJ para qualquer lugar do mapa;
  • tanto a pé quanto dentro de carro/avião/barco;
  • usar grupos de presets como:
  • locais de import/export de veículos;
  • todas as casas que podem ser compradas;
  • pontos de colecionáveis;
  • escolas (moto, carro, barco, avião);
  • áreas específicas de missões com muito deslocamento.


Estruturando a tabela do Cheat Engine como “mini toolkit”


Organizei a tabela em uma estrutura clara, como uma ferramenta interna:
  • Grupos principais:
  • Player
  • Vehicle
  • Modify Position
  • Houses
  • Snapshots
  • grupos de escolas/missões
  • Entradas bem nomeadas:
  • Health, Armor, Money
  • Car/Moto/Boat/Air Proficiency
  • Luck
  • Flags de física
  • Estado do motor:
  • [[gta_sa.exe+80F18C-0xBC] + 0x58C] + 0x428
  • [[gta_sa.exe+80F18C-0xBC] + 0x58C] + 0x40
  • Scripts em Lua + Auto Assembler para:
  • polling seguro;
  • timers;
  • teleporte seguro;
  • prevenção de escrita prematura (canRead()).

Também incluí:
  • endereço que indica se o jogador está no jogo ou em menu;
  • endereço que indica o ID do menu (útil para automação contextual).


Lista de missões trabalhadas



Destaques dos saves

  • desconstrucao: todas as namoradas no nível 100 naquele ponto.
  • voltando_para_a_escola: escola de motorista 100% ouro.
  • oportunidade_de_fotografar: 50 snapshots concluídos.
  • rastreio_de_carro: lista de import/export finalizada.
  • perfuracoes: escolas de moto e barco 100% ouro.


Downloads e referência cruzada

  • Save zerado:
https://gtasnp.com/IuqLon
  • Tabela Cheat Engine (.CT):
gta_sa_v1_0_1_32_RGL.CT


O que isso diz sobre meu trabalho como engenheiro de software


Documentar esse processo faz parte do meu portfólio técnico.

Esse estudo mostra que:
  • investigo sistemas legados e fechados;
  • extraio informação direto da memória;
  • crio ferramentas internas organizadas;
  • reduzo atrito e automatizo tarefas repetitivas;
  • trabalho com consciência de contexto e impacto.

A mesma disciplina que aplico em integrações reais e soluções corporativas é a que aplico aqui para criar experiências personalizadas, eficientes e bem documentadas.


J

Jadiael Juvino

Engenheiro de Software especializado em desenvolvimento backend e frontend, com experiência em C#, JavaScript, NestJS, PHP e bancos de dados. Apaixonado por compartilhar conhecimento e criar soluções inovadoras.

    Manipulação de memória. | Jadiael Juvino