Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Gerenciador de Memória


DelpheroMn

Pergunta

Olá galera.

Então, eu estou estudando memória e seus conceitos para alcançar meu objetivo.

Estou desenvolvendo um sistema de proteção para um jogo, logicamente para fazer o mesmo é necessário saber como funciona o hacker(programa malicioso).

No caso ele da um readprocessmemory no processo do jogo a ser "hackiado" após ler o valor do offset determinado ele edita o valor do mesmo.

Ou seja, ele pega o offset de vida por exemplo, ai ele ve o valor: 1000 ele da um writeprocessmemory nesse mesmo offset e edita o valor de 1000 para 100000000 ou quantos ele quizer.

Então minha função nisso é Não deixar que o certo processo seja editado qualquer valor na memória, caso for editado ele detectaria e finalizaria o mesmo.

Eu pensei em carregar todos os valores de todos os offsets e verificar um por um , mas isso ocuparia muito uso do cpu e não seria muito viável pois preciso de algo que de jogabilidade.

Então eu pensei em bloquear que o writeprocessmemory seja usado em um determinado processo, queri saber se é possível eu fazer uma verificação de quando o processo está sendo usado com essa função.

Se for possivel preciso de algum material para estudo do mesmo.

Então recapitulando - Preciso detectar quando um processo está usando writeprocessmemory sobre outro, (não uma verificação no pc inteiro, e sim só em um determinado processo)

Exemplo:

Tibia.exe - está sendo editado um valor na memória pelo Hacker.exe

Quero que detecte que o Tibia.exe foi alterado algum valor na memória pelo Hacker.exe e assim tomar as devidas funções.

Espero ter sido claro, qualquer dúvida é só postar.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

exemplo:

'Enable/Disable Task Manager with WriteProcessMemory Coded by stoopid'

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, lProcessID As Long) As Long
    Const TH32CS_SNAPPROCESS As Long = &H2
    Const PROCESS_ALL_ACCESS = &H1F0FFF
    
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long

Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
    
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long

Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Type PROCESSENTRY32
    dwSize As Long
    cntUseage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    swFlags As Long
    szExeFile As String * 1024
End Type

Public Function DisableTaskManager(Disable As Boolean) As Boolean
    Dim hSnapShot As Long, hAddress As Long, hProcess As Long, hWrite As Long
    Dim pe32 As PROCESSENTRY32
    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) 'create snapshot of process
    pe32.dwSize = Len(pe32) 'get size of processentry32
    Process32First hSnapShot, pe32 'get info about first process
    Do While Process32Next(hSnapShot, pe32) <> 0 'loop through next processes until process found
        If InStr(1, LCase(pe32.szExeFile), LCase("TASKMGR.EXE")) > 0 Then 'process found
            hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pe32.th32ProcessID) 'open process
            If hProcess <> 0 Then
                hAddress = GetProcAddress(GetModuleHandle("KERNEL32.DLL"), "TerminateProcess") 'get base address
                If hAddress <> 0 Then
                    If Disable = True Then
                        hWrite = WriteProcessMemory(hProcess, ByVal hAddress, 195, 1, 0) 'disable
                    Else
                        hWrite = WriteProcessMemory(hProcess, ByVal hAddress, 0, 1, 0) 'enable
                    End If
                    If hWrite <> 0 Then
                        DisableTaskManager = True
                    End If
                    Call CloseHandle(hWrite)
                End If
                Call CloseHandle(hAddress)  'close base address
            End If
            Call CloseHandle(hProcess)  'close process
        End If
    Loop
    Call CloseHandle(hSnapShot)  'close snapshot
End Function


Sub Main()
    If DisableTaskManager(True) = True Then
        MsgBox "Enabled/disabled Task Manager"
    Else
        MsgBox "Could Not enable/disable Task Manager"
    End If
End Sub

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jhonas ,

Pelo que vi é isso mesmo que eu precisava, porém eu não sei nada de vb

pelo que vejo o code está em vb.net certo?

Você não teria um em pascal para mim tomar de base, ou alguém que convertesse pra mim?

É muito importante pra mim eu terminar esse sistema e preciso de tal forma de estudo, e não me cabe nesse momento estudar vb.

Abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,8k
×
×
  • Criar Novo...