Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Cromatico en 5 Enero 2011, 08:09 am



Título: Pregunta readprocessmemory
Publicado por: Cromatico en 5 Enero 2011, 08:09 am
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:
Código:
http://home2.paulschou.net/tools/xlate/

*Funcion Hex2ASCII
Código:
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


Título: Re: Pregunta readprocessmemory
Publicado por: BlackZeroX en 5 Enero 2011, 10:22 am
.
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
  1.  
  2. Dim Byt_ARR_Data() as byte
  3. Redim Byt_ARR_Data(1 to longituddeBytes)
  4.  
  5.  

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

Código
  1.  
  2. byval varptr(Byt_ARR_Data(1))
  3.  
  4.  

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!¡.


Título: Re: Pregunta readprocessmemory
Publicado por: Cromatico en 5 Enero 2011, 18:33 pm
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:
Código:
Dim hBuffer As String * 50000
Dim readLen As Long

Y en la funcion read puse:
Código:
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
Código:
byval varptr(Byt_ARR_Data(CANTIDAD))
que vos me pasaste :P

Gracias!


Título: Re: Pregunta readprocessmemory
Publicado por: BlackZeroX en 5 Enero 2011, 21:11 pm
.
Como que donde... Pues donde tienes hBuffer... que no sabes donde sale?

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

Dulces Lunas!¡.


Título: Re: Pregunta readprocessmemory
Publicado por: Cromatico en 5 Enero 2011, 21:34 pm
Disculpa mi ignorancia pero no logro comprender donde tengo que cambiar :S
Código:
If Offset = "&H16846C" Then  '
ReadProcessMemory ProcessHandle, Offset, hBuffer, 50000, readLen
Datos = hBuffer
End If

si yo pongo
Código:
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