Bypass proteção "anti-tampering" ou "anti-cheat"
Página 1 de 1
Bypass proteção "anti-tampering" ou "anti-cheat"
O jogo trava quando você tenta alterar um valor de um endereço no Cheat Engine porque o jogo está usando uma técnica de proteção chamada "anti-tampering" ou "anti-cheat". Essa técnica detecta quando alguém está tentando modificar o estado do jogo de forma não autorizada e trava o jogo para evitar que o jogador continue a trapacear.
Existem algumas formas de contornar essa proteção, mas é importante notar que elas podem ser complexas e requerem conhecimento avançado de programação e engenharia reversa. Aqui vão algumas sugestões:
Aqui vai um exemplo de código em C++ que cria um hook para a função
Existem algumas formas de contornar essa proteção, mas é importante notar que elas podem ser complexas e requerem conhecimento avançado de programação e engenharia reversa. Aqui vão algumas sugestões:
- Encontre o endereço correto: Certifique-se de que você está alterando o endereço correto. Use o Cheat Engine para encontrar o endereço que você deseja alterar e certifique-se de que ele é o correto.
- Use uma técnica de escrita mais segura: Em vez de usar a função
- Código:
WriteProcessMemory
- Código:
VirtualProtect
- Use um hook: Em vez de alterar o valor diretamente, tente criar um hook para a função que acessa o valor. Isso permite que você altere o valor sem que o jogo detecte a alteração.
- Use uma técnica de obfuscação: Tente obfuscar o código que altera o valor para que o jogo não possa detectar a alteração.
Aqui vai um exemplo de código em C++ que cria um hook para a função
- Código:
ReadProcessMemory
- Código:
#include <Windows.h>
#include <iostream>
// Função original que vamos hookar
DWORD WINAPI ReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead);
// Função hookada que vamos criar
DWORD WINAPI MyReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead)
{
// Verificar se o endereço é o que queremos alterar
if (lpBaseAddress == (LPCVOID)0x12345678) // Endereço que queremos alterar
{
// Alterar o valor
*(DWORD*)lpBuffer = 0x12345678; // Valor que queremos alterar
return 1; // Retornar sucesso
}
else
{
// Chamar a função original
return ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead);
}
}
int main()
{
// Criar um hook para a função ReadProcessMemory
HANDLE hModule = GetModuleHandle("kernel32.dll");
FARPROC pOriginalFunction = GetProcAddress(hModule, "ReadProcessMemory");
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pOriginalFunction, MyReadProcessMemory);
DetourTransactionCommit();
// Fechar o hook quando terminar
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)pOriginalFunction, MyReadProcessMemory);
DetourTransactionCommit();
return 0;
}
uNreal- ADM
uNreal gosta desta mensagem
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos