Pregunta readprocessmemory

Iniciado por Cromatico, 5 Enero 2011, 08:09 AM

0 Miembros y 1 Visitante están viendo este tema.

Cromatico

Holaaa  ;-) ;-) ;-) ;-) ;-) ;-)

Primero que nada felices fiestas a todos, un poquitin tarde pero seguro :P

Queria consultar algo... Estoy tratando de leer en memoria el "textbox" de donde se pone el email en el msn... (Digo "textbox" porque no se que es ya que no tiene hwnd propio)

Entonces que hice fue usar un convertidor, y por ejemplo escribi "hola@hola.com" lo converti en array de bytes con el convertidor* y quedo esto:
"68 6f 6c 61 40 68 6f 6c 61 2e 63 6f 6d"

Lo que hice fue agregarles nops o "00" entre cada uno y me quedo asi:
"68 00 6f 00 6c 00 61 00 40 00 68 00 6f 00 6c 00 61 00 2e 00 63 00 6f 00 6d"
Despues, lo busque con el ce, y encontre el address dinamica (tranquilamente puedo buscar el pointer pero por ahora primero quiero ver si es posible lo que quiero hacer)

Entonces eso lo puedo transformar en texto con la funcion Hex2ASCII*...

Hasta ahi vamos bien, mi problema es que no logro leer, desde visual basic, en el formato array of bytes que lee el cheat engine... Si puedo leer por ejemplo en 4 bytes tranquilamente, pero no es lo mismo no me da cada caracter en hex como para que lo pueda convertir...
Alguien tiene alguna idea sobre como leer al igual que el cheat engine en array of bytes?

Muchisimas gracias y ahora explico los asteriscos :P Saludos!!!



*Convertidor online: http://home2.paulschou.net/tools/xlate/

*Funcion Hex2ASCII
Public Function Hex2ASCII(sText As String) As String
On Error Resume Next
Dim sBuff() As String, A As Long
sBuff() = Split(sText, Space$(1))
For A = 0 To UBound(sBuff)
Hex2ASCII = Hex2ASCII & Chr$("&h" & sBuff(A))
DoEvents
Next A
End Function

BlackZeroX

#1
.
Me imagino que se puede hacer asi... aun que si tuviera Nops ( 00 ) pues usaria un string pero mejor un array de Bytes.

Código (Vb) [Seleccionar]


Dim Byt_ARR_Data() as byte
Redim Byt_ARR_Data(1 to longituddeBytes)



y en el ReadProcessMemory en lugar de poner el puntero a un long o el long mismo pones

Código (Vb) [Seleccionar]


byval varptr(Byt_ARR_Data(1))



y le pones la longitud del array sin pasarte OJO con eso...

P.D.: en los enlaces pegados en rtinas o algo asi hay un programa que hizo MadAntraX que Dumpea la memoria al Disco Duro de un Proceso X quisas te sirva... aun es casi lo mismo viene con el Codigo Fuente en VB6.

Dulces Lunas!¡.
The Dark Shadow is my passion.

Cromatico

Hola blackzerox, gracias por contestar, busque ese programita que dijiste y lo encontre, es el Mem Dumper v.1.3, lo probe y si encontro mi string... Ahora me fije como hacia e intente ponerlo en mi programa...
Declare:
Dim hBuffer As String * 50000
Dim readLen As Long


Y en la funcion read puse:
If Offset = "&H2CBB114" Then  '
ReadProcessMemory ProcessHandle, Offset, hBuffer, 50000, readLen
Datos = hBuffer
End If


Lo que logre ahi es leer el primer caracter del "textbox"
Y ya me lo manda como texto automaticamente pero solo el primer caracter...
No se donde ubicar byval varptr(Byt_ARR_Data(CANTIDAD))
que vos me pasaste :P

Gracias!

BlackZeroX

#3
.
Como que donde... Pues donde tienes hBuffer... que no sabes donde sale?

P.D.: Declara lpBuffer para que te resiva el puntero...

Dulces Lunas!¡.
The Dark Shadow is my passion.

Cromatico

Disculpa mi ignorancia pero no logro comprender donde tengo que cambiar :S
If Offset = "&H16846C" Then  '
ReadProcessMemory ProcessHandle, Offset, hBuffer, 50000, readLen
Datos = hBuffer
End If


si yo pongo
If Offset = "&H16846C" Then  '
ReadProcessMemory ProcessHandle, Offset, byval varptr(Byt_ARR_Data(10)), 50000, readLen
Datos = hBuffer
End If


Como se supone que obtengo los bytes para asignarlos en "Datos" ?

Gracias y perdona mi ignorancia xD