Zikagames - Início Ir para conteúdo
keyboard_arrow_down
account_circle Entrar

Entrar



  • Não recomendado para computadores públicos


  • Esqueceu sua senha?

person_add Cadastre-se

Pesquisar na Comunidade

Mostrando resultados para as tags ''dinâmico''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • Anúncios e novidades
    • Regras
    • Anúncios
    • Entre para a equipe Zikagames!
  • Eventos Exclusivos - Zikagames
    • Bolão do Brasileirão!
    • Sorteios Zikagames!
    • Membro do mês - Zikagames!
    • Outros eventos
  • Parceiros da Zikagames!
    • TZN SHOW!
    • Athens Graphics - Discord
    • Autism - Discord
  • Espaço do usuário
    • Apresente-se para a Zikagames!
    • Tutoriais Zikagames
    • Suporte ao usuário
    • Sugestões/Reclamações
  • FPS Zone
    • Fortnite
    • PUBG
    • CS:GO
    • Apex Legends
    • CrossFire
    • Rainbow Six
    • Outros FPS games
    • Lixeira
  • RPG/MOBA zone
    • League of Legends
    • Tibia
    • World of Warcraft
    • WYD
    • Ragnarok
    • Grand Theft Auto - GTA
    • Red Dead Redemption 2
    • Outros RPGs/MOBA em geral
    • Lixeira
  • Plataformas
    • Xbox
    • Playstation
    • iOS/Android/Portáteis
    • Retrô/Emuladores
    • Lixeira
  • Design Zone
    • Galeria DesignZone
    • Tutoriais DesignZone
    • Recursos DesignZone
    • Pedidos DesignZone
    • Suporte DesignZone
    • Bate-papo DesignZone
    • Lixeira
  • Info ZONE
    • Softwares
    • Hardwares
    • Delphi
    • Visual Basic
    • C / C++
    • JAVA
    • Javascript
    • Desenvolvimento web
    • Criações InfoZone
    • Lixeira
  • Comércio ZikaGames
    • Promoções
    • Cupons
    • Doação/Venda/Troca entre usuários
    • Bate-papo (COMÉRCIO ZG)
    • Lixeira
  • Diversos
    • Bate-papo geral
    • Entrevistas
    • Trackers
    • Análises e Reviews
    • Notícias e Novidades
    • Músicas/Vídeos
    • Lixeira

Encontrar resultados em...

Encontrar resultados que...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sobre


Discord


Instagram


Facebook


Twitter


Youtube

Encontrado 1 registro

  1. Pra começar minha atividade no fórum, resolvi começar com o primeiro tópico de C/C++. ● Lembrando que este tutorial é válido apenas para Windows utilizando a Win32 API. Algo parecido pode ser feito no Linux através das system calls utilizando as funções read e write (veja). ● Um outro ponto importante a ser recordado é que este tutorial se restringe SOMENTE a PROCESSOS EXTERNOS, o que NÃO inclui DLLs injetadas no processo, afinal, injetar uma DLL nada mais é do que você manualmente carregar um módulo executável novo no processo, desta forma, você acaba sendo parte do processo, podendo ter acesso direto à memória do processo sem a necessidade da Win32 API como intermediadora. ● As funções de manipulação de memória requerem Permissões de Administrador, portanto, quando for rodar o programa que acessa a memória de uma "vítima", rode-o como Administrador. Se estiver utilizando Visual Studio, rode a própria IDE em Modo Administrador. ● Neste tutorial, será abordada somente o acesso à um endereço direto, DINÂMICO, acessar a partir de endereços bases somando offsets fica para uma outra hora. ● É extremamente recomendado que você saiba C/C++ e tenha noções de PONTEIROS, pois eu simplesmente os uso, inclusive nas chamadas das funções, e não os explico, pois já assumo que vocês os conheça e saiba usá-los. Começaremos com o programa que será "invadido", muito simples: #include <iostream> #include <Windows.h> // Apenas incluí a API para ter acesso à constante TRUE, a função Sleep e a função SetConsoleTitle. int main() { SetConsoleTitle(L"Memory Victim"); // Muda o nome da janela para 'Memory Victim'. int VictimVar = 64; // Variável que será mudada. while (TRUE) // Loop infinito. { // Printa a variável a cada 1 segundo. std::cout << VictimVar << std::endl; Sleep(1000); } } Note que usei majoritariamente recursos da Win32 API (Windows.h), mas por opção própria, a memória de QUALQUER processo em modo usuário pode ser acessada. Documentação: SetConsoleTitle, Sleep. Uma vez escrito o programa "alvo", podemos escrever e aprofundar com detalhes o programa "invasor". #include <iostream> #include <Windows.h> int main() { DWORD Address = 0x00EFF990; // Endereço que será lido e escrito no programa alvo. DWORD ValueRead = 0x0, NewValue = 0x0; DWORD PID; // Retornará um handle para a janela caso suceda, e nulo caso não encontre. HWND hWindow = FindWindow(NULL, L"Memory Victim"); // Verifica o sucesso da chamada FindWindow if (hWindow == NULL) { std::cout << "Não foi possível encontrar a janela."; exit(EXIT_FAILURE); } // Pega o PID do processo que criou a thread da Janela através do handle da janela. GetWindowThreadProcessId(hWindow, &PID); HANDLE pHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, PID); // Verifica o sucesso da chamada OpenProcess if (pHandle == NULL) { std::cout << "Não foi possível pegar o handle do processo."; exit(EXIT_FAILURE); } // Lê o endereço presente na variável Address e guarda na variável ValueRead. ReadProcessMemory(pHandle, (void*)Address, &ValueRead, sizeof(ValueRead), 0); std::cout << "Valor Lido: " << ValueRead << std::endl; NewValue = ValueRead * 2; // Duplica o valor que estava no endereço de memória. WriteProcessMemory(pHandle, (void*)Address, &NewValue, sizeof(NewValue), 0); // Re-lê o a posição de memória para verificar se realmente mudou o valor. ReadProcessMemory(pHandle, (void*)Address, &ValueRead, sizeof(ValueRead), 0); std::cout << "Novo Valor Lido: " << ValueRead << std::endl; system("PAUSE"); return EXIT_SUCCESS; } Aqui a coisa complica um pouco mais complicado, mas vamos lá: Precisamos ler e escrever no processo desejado, para tal, precisamos de um identificador deste processo, que é o PID, obtido pela função GetWindowThreadProcessId . Para utilizar esta função necessita-se de um handler da janela, um jeito comum é pegá-lo através da função FindWindowW (Expandida por FindWindow), procurando pelo título da janela. Uma vez com o PID em mãos, abrimos o processo utilizando a função OpenProcess com a flag PROCESS_ALL_ACCESS (leia), que nos dará permissão de escrita e leitura na memória virtual do processo. A partir daí, basta simplesmente ler e/ou escrever na memória do processo, utilizando as funções ReadProcessMemory e WriteProcessMemory. Rodando o programa "vítima", temos: E, rodando o programa "invasor": O programa "vítima" após ser "invadido": E é isso, maiores detalhes sobre os argumentos das funções e etc se encontram na documentação da Win32 API que deixei linkadas no artigo.




×