elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Invoke WININET y CopyMemory
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Invoke WININET y CopyMemory  (Leído 2,845 veces)
STARZ

Desconectado Desconectado

Mensajes: 34



Ver Perfil
Invoke WININET y CopyMemory
« en: 29 Enero 2012, 00:17 am »

Hola, seguí investigando un poco con el Invoke que ustedes me explicaron como usar  ;-) (gracias por eso).

Me han surgido dos dudas y me gustaría que me enseñaran a resolverlas tras estar probando y probando posibles soluciones.

1 - (tratando con hooks):
Código
  1. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  2.  
  3. Public Type ESTRUCTURADELHOOK
  4. VkCode As Long
  5. ScanCode As Long
  6. Flags As Long
  7. Time As Long
  8. DwExtraInfo As Long
  9. End Type
  10. ____________________________________________________________________
  11. Uso:
  12.  
  13. Dim KbHook As ESTRUCTURADELHOOK
  14. CopyMemory kbHook, Parameters, Len(kbHook)
  15.  

¿Cómo hago Invoke CopyMemory teniendo declarado un type ahi arriba?

2 - Tratando con WININET (Ejemplo de FreeVBCode)
Estoy usando este code para ver el source de una web y lo único que no pude transformar con Invoke fue lo siguiente:

Código
  1. bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)

Me leí TODO este thread, pero no me solucionó la duda


« Última modificación: 29 Enero 2012, 00:21 am por STARZ » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Invoke WININET y CopyMemory
« Respuesta #1 en: 29 Enero 2012, 00:51 am »

.
Estos parametros son los que debes pasar en el API CopyMemory (en la liga que se supone que te leiste TODO hay ejemplos):

Código
  1. ...
  2. void CopyMemory(
  3.  __in  PVOID Destination,
  4.  __in  const VOID *Source,
  5.  __in  SIZE_T Length
  6. );
  7. ...
  8.  

Más info: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366535%28v=vs.85%29.aspx



Creo que no te lo leiste todo como has mencionado...

http://foro.elhacker.net/programacion_visual_basic/help_invoke_internetreadfile_api-t343917.0.html;msg1681569#msg1681569

mas explicitamente...

Código
  1. ...
  2. Call lCallApiByName("wininet", "InternetReadFile", hFile, VarPtr(bBuffer(0)), 1, VarPtr(Ret))
  3. ...
  4.  

Código
  1.  
  2. BOOL InternetReadFile(
  3.  __in   HINTERNET hFile,
  4.  __out  LPVOID lpBuffer,
  5.  __in   DWORD dwNumberOfBytesToRead,
  6.  __out  LPDWORD lpdwNumberOfBytesRead
  7. );
  8.  
  9.  

Más info de la api: http://msdn.microsoft.com/en-us/library/windows/desktop/aa385103%28v=vs.85%29.aspx

NOTA: no es necesario que sepas C/C++ solo necesitas leer la MSDN y saber que pasar en dichos parametros...



Te dejo un ejemplo más:

GetCursorPos

Código
  1.  
  2. BOOL WINAPI GetCursorPos(
  3.  __out  LPPOINT lpPoint
  4. );
  5.  
  6.  

lee la descripcion aqui en la MSDN http://msdn.microsoft.com/en-us/library/windows/desktop/ms648390%28v=vs.85%29.aspx

para saber que invocar te vas al recuadro Requirements hay revisas la libreria... en este caso es User32.dll y no presenta nombre como GetCursosPosW o GetCursosPosA (), asi que llamamos por GetCursosPos...

Código
  1.  
  2. Option Explicit
  3.  
  4. Private Type PointAPI
  5.  x As Long
  6.  y As Long
  7. End Type
  8.  
  9. Private Sub Form_Load()
  10.    Dim udtCursorPos As PointAPI
  11.  
  12.    MsgBox Invoke("User32", "GetCursorPos", VarPtr(udtCursorPos))
  13.    MsgBox udtCursorPos.x & vbCrLf & udtCursorPos.y
  14. End Sub
  15.  
  16.  

Con esto ya podras crear los invoques del CopyMemory y de cualquier API...

Dulces Lunas!¡.


« Última modificación: 29 Enero 2012, 01:10 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
STARZ

Desconectado Desconectado

Mensajes: 34



Ver Perfil
Re: Invoke WININET y CopyMemory
« Respuesta #2 en: 29 Enero 2012, 02:26 am »

¿Se supone?, no, lo leí todo.
Quizás mi error esté en otro lado. Está marcada la línea que me falla:

Código
  1. Option Explicit
  2.  
  3. Public Function OpenURL(ByVal sUrl As String) As String
  4.  
  5.    Dim hOpen               As Long
  6.    Dim hOpenUrl            As Long
  7.    Dim bDoLoop             As Boolean
  8.    Dim bRet                As Boolean
  9.    Dim sReadBuffer         As String * 2048
  10.    Dim lNumberOfBytesRead  As Long
  11.    Dim sBuffer             As String
  12.  
  13. hOpen = Invoke("WININET", "InternetOpenW", StrPtr("Hola, soy un navegador WEB"), 0, _
  14.    0, 0, 0)
  15.  
  16. hOpenUrl = Invoke("WININET", "InternetOpenUrlW", hOpen, StrPtr(sUrl), 0, 0, &H80000000, 0)
  17.  
  18.    bDoLoop = True
  19.    While bDoLoop
  20.        sReadBuffer = 0
  21.        'bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead) 'LÍNEA ORIGINAL QUE ANDA
  22.        bRet = Invoke("wininet", "InternetReadFile", hOpenUrl, VarPtr(sReadBuffer), Len(sReadBuffer), VarPtr(lNumberOfBytesRead)) 'ESTA LINEA FALLA
  23.        sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
  24.        If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
  25.    Wend
  26.  
  27.    If hOpenUrl <> 0 Then Invoke "WININET", "InternetCloseHandle", hOpenUrl
  28.    If hOpen <> 0 Then Invoke "WININET", "InternetCloseHandle", hOpen
  29.    OpenURL = sBuffer
  30.  
  31. End Function
Gracias por los ejemplo, en serio, pero ya se (o por lo menos eso creo yo) arreglármelas con los Invokes. Lo único en lo que le pifio es en crear strings al vuelo, strptr() o los varptr(), etc. Todavía no me queda claro cuando ponerlos, estoy seguro que me salta error por eso
[Estoy leyendo lo que me pusiste del retlCopyMemory y edito]

Edito: Sí, creo que mi code del RtlCopymem ocurre porque yo no pongo nunca varPtr(). ¿Cuándo  debo poner VarPtr(), StrPtr(), (no se si hay más) ?
el StrPtr() lo pongo o lo saco, pruebo cuando anda y cuando no, y así se si dejarlo o no.
Gracias por responder.  :)
« Última modificación: 29 Enero 2012, 02:37 am por STARZ » En línea

STARZ

Desconectado Desconectado

Mensajes: 34



Ver Perfil
Re: Invoke WININET y CopyMemory
« Respuesta #3 en: 29 Enero 2012, 23:30 pm »

Hola.
Solucioné el invoke con rtlmovememory, pero no el de InternetReadFile
Código:
       Invoke "KERNEL32", "RtlMoveMemory", VarPtr(a), VarPtr(b), Len(a)

me habían faltado poner los VarPtr, aunque igualmente no sé cuando ponerlos y cuando NO.
Salduos
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Invoke WININET y CopyMemory
« Respuesta #4 en: 30 Enero 2012, 00:05 am »

Revisa bien el ejemplo que yo puse, de hecho puedes tomar 100% el ejemplo y cambiar algunas cosas para tu proposito.

Nota: pista Jamas use un array de string si no de bytes como lo dice claramente la MSDN...

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
STARZ

Desconectado Desconectado

Mensajes: 34



Ver Perfil
Re: Invoke WININET y CopyMemory
« Respuesta #5 en: 30 Enero 2012, 05:38 am »

Gracias Infrangelux!!!!!!
Lo pude solucionar; array de bytes =D

Te hago una pregunta, cuando se que tengo que poner strPtr() o VarPtr?
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Invoke WININET y CopyMemory
« Respuesta #6 en: 30 Enero 2012, 08:56 am »

cuando veas parametros asi...

BOOL InternetReadFile(
  __in   HINTERNET hFile,
  __out  LPVOID lpBuffer,
  __in   DWORD dwNumberOfBytesToRead,
  __out  LPDWORD lpdwNumberOfBytesRead
);

lp/LP = Long Pointer (Puntero...) pero debes leer las descripciones... tambien depende de como declares la API...

strptr() es un puntero a el 1 elemento de una cadena de tipo string...
varptr() es para obtener la dirrecion de una variable X (CUAL SEA: string UDT, retorno de funcion, long, integer, single, currency, etc...)

OJO: Tambien debes leer las descripciones de los parametros en la MSDN...

Dulces Lunas!¡.
« Última modificación: 30 Enero 2012, 09:00 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
Programación Visual Basic
Karcrack 6 5,319 Último mensaje 30 Julio 2010, 10:05 am
por Psyke1
Error CopyMemory y estructura SafeArray (Via API)
Programación Visual Basic
BlackZeroX 9 4,114 Último mensaje 24 Agosto 2010, 18:58 pm
por BlackZeroX
[Ayuda] Sobre copyMemory
Programación Visual Basic
ignorantev1.1 0 1,715 Último mensaje 24 Febrero 2011, 22:37 pm
por ignorantev1.1
[HELP] Invoke InternetReadFile API
Programación Visual Basic
Swellow 8 3,781 Último mensaje 6 Noviembre 2011, 23:55 pm
por Swellow
[HELP]Invoke by Hash
Programación Visual Basic
Swellow 7 10,424 Último mensaje 15 Diciembre 2011, 20:37 pm
por Karcrack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines