Bueno estaba probando para cambiar el nombre del jugador en el CS (Counter Strike) 1.6 y bueno lo logre con el CE (Cheat Engine) y quise hacerlo con VB6 hice lo siguiente pero no me da resultado pareciera que no escribe...
Option Explicit
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Declare Function GetAsyncKeyState Lib "user32.dll" ( _
ByVal vKey As Long) As Integer
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByRef lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As Long, _
ByRef lpBaseAddress As Any, _
ByRef lpBuffer As Any, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" ( _
ByVal hObject As Long) As Long
Private Sub CambiarNombre(Nombre As String)
Dim wHandle As Long
Dim pId As Long
Dim pHandle As Long
wHandle = FindWindow(vbNullString, "Counter-Strike")
If wHandle = 0 Then Exit Sub
GetWindowThreadProcessId wHandle, pId
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pId)
If pHandle = 0 Then Exit Sub
WriteProcessMemory pHandle, &H2F4DC28, StrPtr(Nombre), LenB(Nombre), 0&
CloseHandle pHandle
End Sub
Private Sub Form_Load()
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
If GetAsyncKeyState(vbKeyF5) Then CambiarNombre ("NADER")
End Sub
Con solamente WriteProcessMemory no te va a funcionar...necesitas reservar memoria para poder escribir...
Fijate en este post que hice, este reserva una región de memoria en un proceso remoto y leugo escribe en el.
http://foro.elhacker.net/index.php/topic,168272.0.html
Intenta extraer lo que necesites del codigo.
Un Saludo :)
Muchas gracias ya me pongo a verlo.
Amigo pero deberia funcionar como yo lo puse porque fijate yo saque el codigo de un Trainer de el juego GTA: San Andreas con WriteProcessMemory y de ahi fue de donde me guie yo...
Este es parte del codigo del trainer:
Private Sub FreezeTime()
Dim hwnd As Long
Dim pid As Long
Dim pHandle As Long
Dim x As Integer
hwnd = FindWindow(vbNullString, "GTA: San Andreas")
If (hwnd = 0) Then hwnd = FindWindow(vbNullString, "GTA: San Andreas")
If (hwnd = 0) Then
lblState.Caption = "State: Jeu non Lancer."
Timer1.Enabled = False
Exit Sub
End If
GetWindowThreadProcessId hwnd, pid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
lblState.Caption = "State: Couldn't get a process handle."
Timer1.Enabled = False
Exit Sub
End If
WriteProcessMemory pHandle, Hex2Dec("52CF53"), Hex2ASCII("90 90 90 90 90 90"), Len(Hex2ASCII("90 90 90 90 90 90")), 0&
CloseHandle pHandle
End Sub
De la manera que te indico yo tiene que funcionar al 100%, prueba usando mi codigo :-\
Sino no se porque no funciona.
Hendrix, no siempre hay k reservar espacio en memoria. Pero si hay k revisar los permisos. naderST, has visto se hay permisos para escribir? Intenta usar el VirtualProtectEx. Ah, y mira nuevamente se los offsets estan correctos ^^
Saludos