Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Dari0s

#1
Hola.!

alguien sabe puede y tiene el tiempo necesario (no creo que se lleve mucho) para pasar este codigo a Visual Basic 2008? (esta hecho en visual basic 6.0)

ojala alguien pueda aqui os dejo el code:

Private Declare Function VirtualProtectEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) 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
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) 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 FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Const PAGE_WRITECOPY = &H8&
Private Const PROCESS_ALL_ACCESS = &H1F0FFF

Private Sub Form_Load()
    Dim hWnd As Long, lngPID As Long, hProcess As Long
    Dim lngOldProt As Long
    Dim lngData As Long, lngWritten As Long
    hWnd = FindWindow(vbNullString, "Cheat Engine 5.2")
    If hWnd > 0 Then
        Call GetWindowThreadProcessId(hWnd, lngPID)
        hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, lngPID)
        If hProcess <> 0 Then
            lngData = 1092616192
            If VirtualProtectEx(hProcess, ByVal &H400000, LenB(lngData), PAGE_WRITECOPY, lngOldProt) <> 0 Then
                If WriteProcessMemory(hProcess, ByVal &H400000, lngData, LenB(lngData), lngWritten) <> 0 Then
                    Call MsgBox("Success!" & vbCrLf & lngWritten & " bytes written.")
                End If
            End If
            Call CloseHandle(hProcess)
        End If
    End If
End Sub


ese es .. ojala laguien pueda  :xD
#2
Hola.. si leiste este post es porque puede que me vallas a ayudar...   :huh:

Bueno la cosa es que si alguien me podria dar un ejemplo de como usar el WriteProcessMemory junto al VirtualProtectEx ??
necesito que los 2 editen la memoria de un proceso de la (Window List) lista por ventana (los procesos de la barra de tareas).

alguien me puede dar unos ejemplos de como usarlos?

los que he encontrado no me han servido

Cabe decir que uso el Visual Basic 2008

Gracias por su tiempo y ayuda a quien leyo esto y me valla a colaborar ayudandome.
#3
Hola.. :) soy nuevo en el foro y tengo una duda muy grande.. que tengo desde hace un tiempo.. es lo siguiente

tengo un code en visual basic de un programa que ise para editar una direccion de memoria de un proceso con una direccion un value y el nombre de el proceso a editar..

tengo el code perfecto me funciona pero solo me edita hasta 4 bytes ... tambien tengo otro que edita la memoria del proceso con el numero de bytes que desee.. pero hay un problema que de value no se pueden poner numeros sino el significado de los mismos en la memoria aver si no me entienden les dejo esta imagen



como vieron ojala me haya dado a entender.. el code edita es la parte del lado derecho del dump no la parte de los valores .. aqui les dejo el code y una demostracion de ello...

esto va en un modulo de clase:
Código (vb) [Seleccionar]


'bueno esto es para editar la memoria dandole el nombre de un proceso etc con su address y value..

Private Function WriteMemory(dwProcId As Long, dwAddress As Long,
ByVal pValue As Long, ByVal dwLength As Long) As Boolean
   
    If dwAddress = 0 Then
        WriteMemory = False
        Exit Function
    End If
   
    Dim procHandle  As Long
    procHandle = OpenProcess(PROCESS_ALL_ACCESS, False, dwProcId)
    If procHandle = 0 Then
        WriteMemory = False
        Exit Function
    End If
   
    Dim dwReturned As Long
    dwReturned = WriteProcessMemory(procHandle, ByVal dwAddress, ByVal pValue, dwLength, 0&)
   
    If dwReturned > 0 Then
        WriteMemory = True
    Else
        WriteMemory = False
    End If
   
End Function

'y pues con esto solo edito un byte MENOS ME SIRVE LO CUAL NECESITO ES PARA EDITAR ALMENOS UNOS 100 BYTES EN UN SOLO VALUE
Public Function WriteByte(dwProcId As Long, dwAddress As Long, ByVal dwValue As Byte) As Boolean

    If dwProcId = 0 Or dwAddress = 0 Then
        WriteByte = False
        Exit Function
    End If

    If WriteMemory(dwProcId, dwAddress, VarPtr(dwValue), LenB(dwValue)) = False Then
        WriteByte = False
        Exit Function
    End If

    WriteByte = True
   
End Function

'pues como ven este edita solo 2 bytes si pongo un value mas grande sale error desbordamiento..

Public Function Write2Bytes(dwProcId As Long, dwAddress As Long, ByVal dwValue As Integer) As Boolean

    If dwProcId = 0 Or dwAddress = 0 Then
        Write2Bytes = False
        Exit Function
    End If

    If WriteMemory(dwProcId, dwAddress, VarPtr(dwValue), LenB(dwValue)) = False Then
        Write2Bytes = False
        Exit Function
    End If

    Write2Bytes = True
   
End Function

'Ven Este es el que edita 4 bytes.. pero no edita mas de alli si lo hago me sale error de desbordamiento..

Public Function Write4Bytes(dwProcId As Long, dwAddress As Long, ByVal dwValue As Long) As Boolean

    If dwProcId = 0 Or dwAddress = 0 Then
        Write4Bytes = False
        Exit Function
    End If

    If WriteMemory(dwProcId, dwAddress, VarPtr(dwValue), LenB(dwValue)) = False Then
        Write4Bytes = False
        Exit Function
    End If

    Write4Bytes = True
   
End Function

'Aver Este Es La Parte De La Cual Les menciono Arriba.... Si Pongo Este Code Me Edita El Otro Lado de la memoria ven :p como en la imagen de arriba..
'Y no se como editarlo o arreglarlo para que edite pero con values.. si me pueden ayudar seria estupendo!! :D

Public Function WriteArray(dwProcId As Long, dwAddress As Long, ByVal dwValue As String) As Boolean

    If dwProcId = 0 Or dwAddress = 0 Then
        WriteArray = False
        Exit Function
    End If
   
    Dim szByteArray() As Byte
    ReDim szByteArray(Len(dwValue))
   
    Dim x As Long
    For x = 1 To UBound(szByteArray)
        szByteArray(x - 1) = CByte(Asc(Mid$(dwValue, x, 1)))
    Next x

    If WriteMemory(dwProcId, dwAddress, VarPtr(szByteArray(0)), Len(dwValue)) = False Then
        WriteArray = False
        Exit Function
    End If
   
    WriteArray = True
   
End Function


ahora miren el code de el editor como es...

Código (vb) [Seleccionar]
Private Poke As New Edicion_Memoria 'esto es un modulo de clase
Private Proc As New Procesos ' esto es un modulo de clase. esta perfecto es para cojer el pid correcto del proceso

Private Sub Form_Activate()

Dim Address1 As Long

Address1 = &H400000

GetProcessID ("AlgunProceso.exe")
dwProcId = ProgID

if checkbox1.value = 1 then
    Poke.WriteArray dwProcId, Address1, "ËÌÈÉ×ÏÈÍÎÛØÚÙÊÜÝÞßàáãäå@Error‹ÀRuntime error     at 00000000‹À0123456789ABCDEF"
end if

Unload Me
End Sub


Ajam Asi Seria El Code Para Poder Editar Un Array Pero Resulta Que yo quiero es poner un value con numeros no eso.. porque si pongo los numeros en la memoria como señale arriba en el dump se mostraran numeros en ves de lo que se debe mostrar..

espero me hayan entendido y porsiacaso se enrredo quien sea que me pueda ayudar aqui esta como yo quiero que sea :)

Código (vb) [Seleccionar]
if checkbox1.value = 1 then
    Poke.WriteArray dwProcId, Address1, "11 CB CC C8 C9 D7 CF C8 CD CE DB D8 DA D9 CA DC DD DE DF E0 E1 E3 11 E4 E5 8D 40 11 45 72 72 6F 72 11 8B C0 52 75 6E 74 69 6D 65 20 65 72 72 6F 72 20 20 20 20 20 61 74 20 30 30 30 30 30 30 30 30 11 8B C0 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 11 11 11 11 11 11 11 11 11 11 11 11"
end if


Bueno Eso Es Todo.. ya intente cambiando los valores y aun asi me da error de desbordamiento en 1, 2, 4, y no se como si me pueden ayudar seria Genial!!  ;D

Gracias De Antemano Hasta Luego  :P