Mapa mental
Memória
Contenido del mapa
Memória
Ponteiros
- É uma variável que armazena um endereço de memória
- Em um navegador o ponteiro seria o link que nos leva a um site
- Através desses endereços podemos manipular os seus valores
- É uma variável que armazena um endereço de memória
Para que serve?
- Para armazenar informações que serão utilizadas por um software
Hierarquia
- Como funciona
- O programa está armazenado no disco rígido Ao executarmos o SO cria um processo deste programa E ele é carregado na memória RAM E é lá que os conceitos de ponteiros e endereços de memórias são observados É na RAM que os conceitos de cheat se aplicam
- Como funciona
Memória RAM
- Estrutura
- A estrutura da memória remete a um trem com vários vagões
- Número de endereços da memória
- 1 Bytes = 8 Bits
- Até(2^8) 0xFF
- De(0): 0x00
- 4 Bytes = 32 Bits
- De(0): 0x00000000
- Até(2^32): 0xFFFFFFFF
- 1 Bytes = 8 Bits
- Formato de endereços
- Hexadecimal
- Endereços
- Se você quiser acessar o vagão 0x00040E3C, somente o byte ou 2 bits referente a este endereço será acessado
- 1 endereço = 1 Byte = 8 Bits
- Alocação de Memória
- Memória não alocada
- É a região entre dois endereços que contém nenhuma informação
- Métodos de alocação de memória
- https://docs.microsoft.com/en-us/windows/win32/memory/comparing-memory-allocation-methods
- VirtualAlloc
- https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalalloc
- Usada no cheat
- HeapAlloc
- https://docs.microsoft.com/en-us/windows/win32/api/heapapi/nf-heapapi-heapalloc
- LocalAlloc
- https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-localalloc
- GlobalAlloc
- https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalalloc
- Allocation Protect
- Proteção da região da memória quando ela foi alocada.
- PAGE_NOACCESS (0x01)
- Desabilita todo o acesso da página de memória. Qualquer tentativa de ler, escrever ou executar resulta em violação de acesso (access violation).
- PAGE_READONLY (0x02)
- Habilita permissão de leitura da página de memória.
- PAGE_READWRITE (0x04)
- Habilita permissão de leitura e escrita da página de memória.
- PAGE_WRITECOPY (0x08)
- Habilita permissão de leitura e cópia-em-execução para a mapped-view um objeto de mapeamento de arquivo (file mapping object).VirtualAlloc e VirtualAllocEx não suportam essa constante.
- PAGE_EXECUTE (0x10)
- Habilita permissão de execução (dos opcodes) na página de memória.
- PAGE_EXECUTE_READ (0x20)
- Habilita permissão de execução e leitura da página de memória.
- PAGE_EXECUTE_READWRITE (0x40)
- Habilita permissão de execução, leitura e escrita da página de memória.
- PAGE_EXECUTE_WRITECOPY (0x80)
- Habilita permissão de execução, leitura e cópia-em-execução para a mapped view um objeto de mapeamento de arquivo (file mapping object).VirtualAlloc e VirtualAllocEx não suportam essa constante.
- State
- Estado da página de memória.
- MEM_COMMIT (0x1000)
- Indica página confirmada para a qual armazenamento físico foi alocado, seja na memória ou arquivo de paginação.
- MEM_RESERVE (0x2000)
- Indica página livre, não acessíveis no processo e disponível para alocação.
- MEM_FREE (0x10000)
- Indica página reservada onde uma extensão do espaço de endereços virtuais (Virtual Address) do processo é reservada, sem que nenhuma alocação física seja feita.
- Type
- Tipo da página de memória.
- MEM_PRIVATE (0x20000)
- Indica que a região de memória é privada, i.e., não compartilhada por outros processos.
- MEM_MAPPED (0x40000)
- Indica que a região de memória é mapeada na exibição de uma seção.
- MEM_IMAGE (0x1000000)
- Indica que a região de memória é mapeada na exibição de uma seção de imagem.
- Size
- Tamanho em bytes da página de memória.
- OllyDbg
- Exemplo prático
- Ao executar mem1.exe
- Temos que o valor 10346309 está no endereço 00451BD4
- Como sabemos que este dado é do tipo INTEGER 4 bytes, estará alocado nos endereços de memória
- 00451BD4
- 00451BD5
- 00451BD6
- 00451BD7
- Ao abrirmos o processo pelo OllyDbg vemos
- 00451BD4
- 45
- 00451BD5
- DF
- 00451BD6
- 9D
- 00451BD7
- 00
- Como sabemos o valor está invertido, portanto o valor correto em hexadecimal será 00 9D DF 45
- 00451BD4
- Como sabemos que este dado é do tipo INTEGER 4 bytes, estará alocado nos endereços de memória
- Temos que o valor 10346309 está no endereço 00451BD4
- Ao executar mem1.exe
- Obs1
- minhastring := 'Isaque'; esse endereço de memória terá 6 bytes pois há 6 caracteres Se eu fizer addr(minhastring) irá retornar apenas 1 endereço de memória, mas sabemos que serão 6, pois essa string ocupa 6 bytes. Além disso cabe ressaltar que as letras na memória estarão ordenadas em ordem crescente dos endereços de memória pois se trata de uma string E no sétimo endereço terá 00, para indicar tratar-se do encerramento da string
- Exemplo prático
- Memória não alocada
- Tipos de Dados
- https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
- DWORD
- Se quiser acessar acessar DWORD em 0x00040E3C Serão acessados os seguintes endereços: 0x00040E3C 0x00040E3D 0x00040E3E0x00040E3F
- Possui 4 Bytes = 32 Bits
- Nesse exemplo o ponteiro da DWORD será o 0x00040E3C
- E os 4 endereços farão parte da DWORD
- Perceba que o valor armazenado em 0x00040E3C é 0xFFFEF7E8
- Mas a DWORD é armazenada em ordem inversa: 0xE8 -> 0xF7 -> 0xFE -> 0xFF
- Strings
- São armazenados em ordem normal
- Tabela ASCII e Hexadecimal
- 84 = 0x54 = T 79 = 0x4F = O 67 = 0x43 = C Ex Javascript String.fromCharCode(0x43)
- Cada caractere = 1 byte
- TOC = 3 caracteres = 3 Bytes
- Todo final tem 0x00
- Integer
- 4 bytes
- Short
- 2 Bytes
- Estrutura
Imágenes y archivos del mapa
Información
- Descripción
- Mapa Mental sobre Memória, creado por Isaque Paulo el 06/12/2021.
- Creado por
- Isaque Paulo
- Visitas
- 0
- Valoración