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
'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
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
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!!
Gracias De Antemano Hasta Luego