elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
12 Octubre 2008, 05:07  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderadores: Hendrix, E0N)
| | |-+  como enviar struct con control winsock de vb ???
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: como enviar struct con control winsock de vb ???  (Leído 603 veces)
al3

Desconectado Desconectado

Mensajes: 104


Ver Perfil
como enviar struct con control winsock de vb ???
« en: 22 Abril 2005, 18:14 »

Como envia una estrcutura con control Winsock de VB ????
En línea
Slasher-K

Desconectado Desconectado

Mensajes: 1.480


Ver Perfil
Re: como enviar struct con control winsock de vb ???
« Respuesta #1 en: 24 Abril 2005, 00:52 »

Crea una cadena a partir de la estructura leyendo la memoria de la estructura. Por ejemplo:

Código:
Function PackStr(lpStruct As MyStruct) As String
             Dim sData$, r&

  sData = String$(Len(lpStruct), 0)

  r = ReadProcessMemory(GetCurrentProcess(), VarPtr(lpStruct), ByVal sData, Len(sData))

  PackStr = sData
End Function

Saludos.
En línea



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
al3

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: como enviar struct con control winsock de vb ???
« Respuesta #2 en: 24 Abril 2005, 18:20 »

Gracias pero no funciono:
Código:
'Modulo
Public Type T_Struct
    nombre As String
    x As Long
    y As Long
End Type

Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function GetCurrentProcess Lib "kernel32" () As Long
Declare Function VarPtrAny Lib "vb40032.dll" Alias "VarPtr" (lpObject As Any) As Long

'Form
Private Sub Form_Load()
Dim strA As T_Struct
strA.nombre = "XXXX"
strA.x = 100
strA.y = 200

tmpA = PackStr(strA)
MsgBox tmpA

End Sub

Private Function PackStr(lpStruct As T_Struct) As String
Dim sData$, r&

  sData = String$(Len(lpStruct), 0)

'Aca aparece un Error, porque le falta el utlimo parametro
'Yo probe con varios numeros y siempre da el mismo resultado
  r = ReadProcessMemory(GetCurrentProcess(), VarPtr(lpStruct), ByVal sData, Len(sData), 1)

  PackStr = sData
End Function
En línea
Slasher-K

Desconectado Desconectado

Mensajes: 1.480


Ver Perfil
Re: como enviar struct con control winsock de vb ???
« Respuesta #3 en: 25 Abril 2005, 03:13 »

Está mal la declaración de ReadProcessMemory, tiene que estar como sigue:


Código:
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, Optional lpNumberOfBytesWritten As Long = 0) As Long

El problema está en el argumento lpBaseAddress, si no lo pasamos como ByVal entonces lo que va a pasar es la dirección de retorno de la función VarPtr y no el valor que devuelve. Lo que interesa es el valor que devuelve ya que es el puntero a la estructura.

Saludos.
En línea



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
al3

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: como enviar struct con control winsock de vb ???
« Respuesta #4 en: 28 Abril 2005, 02:20 »

Me sigue sin funcionar. ¿no tenes el codigo completo?
En línea
Slasher-K

Desconectado Desconectado

Mensajes: 1.480


Ver Perfil
Re: como enviar struct con control winsock de vb ???
« Respuesta #5 en: 28 Abril 2005, 07:54 »

Código:
Public Type T_Struct
    nombre As String
    x As Long
    y As Long
End Type

Si funciona pero te copia la dirección del string y no la cadena, vas a tener que modificar un poco la función y crear otra que te vuelva a rearmar la estructura. Te dejo un ejemplo de código:


Código:
Public Type T_Struct
    nombre As String
    x As Long
    y As Long
End Type

Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, Optional lpNumberOfBytesWritten As Long = 0) As Long

Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, Optional lpNumberOfBytesWritten As Long = 0) As Long

Declare Function GetCurrentProcess Lib "kernel32" () As Long

Function PackStr(lpStruct As T_Struct) As String
             Dim sData$, r&

  sData = String$(Len(lpStruct) - 4, 0)

  'Lee a partir del registro x.
  '
  r = ReadProcessMemory(GetCurrentProcess(), VarPtr(lpStruct) + 4, ByVal sData, Len(sData))

  sData = lpStruct.nombre & vbNullChar & sData
  PackStr = sData
End Function

Function UnpackStr(StrSpec As String) As T_Struct
             Dim sData$, r&
             Dim iPos%, lpData As T_Struct

  With lpData
    iPos = InStr(1, StrSpec, vbNullChar)
   
    If iPos = 0 Then Exit Function
   
    .nombre = Left$(StrSpec, iPos - 1)
 
    sData = Mid$(StrSpec, iPos + 1, Len(lpData) - 4)
   
    r = WriteProcessMemory(GetCurrentProcess(), VarPtr(lpData) + 4, ByVal sData, Len(sData))
 
    UnpackStr = lpData
  End With
End Function
« Última modificación: 28 Abril 2005, 07:57 por Slasher Keeper » En línea



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats