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


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Importar APIs
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Importar APIs  (Leído 1,381 veces)
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Importar APIs
« en: 24 Noviembre 2015, 00:45 »

Hola

///IMPORTAR APIs///
Quiero compartir esta código curioso para importar APIs de librerías DLL y de aplicaciones. Es muy útil.

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        Dim DialogoAbrir As New System.Windows.Forms.OpenFileDialog
  5.        DialogoAbrir.Title = "Abrir..."
  6.        DialogoAbrir.FilterIndex = 1
  7.        DialogoAbrir.Filter = "*.dll|*.dll|*.exe|*.exe"
  8.        DialogoAbrir.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System)
  9.        If DialogoAbrir.ShowDialog() = DialogResult.OK Then
  10. ImportAPI(DialogoAbrir.FileName)
  11.        End If
  12.  
  13.  
  14.  
  15.    End Sub
  16.    Sub ImportAPI(ByVal Path_Dll As String)
  17.  
  18.        '//VB6
  19.        'Dim Path_Link As String = DirProgramFiles & "\Microsoft Visual Studio\VB98\link.exe"
  20.  
  21.        '****IMPORTANTE****:
  22.        '//VB2010
  23.        'link.exe se encuentra en:
  24.        'C:\Archivos de programa\Microsoft Visual Studio 10.0\VC\bin\
  25.        'Tiene dependencia con 'mspdb100.dll' que se encuentra en:
  26.        'C:\Archivos de programa\Microsoft Visual Studio 10.0\Common7\IDE
  27.        'Haz una copia de link.exe en  ...\Common7\IDE de lo contrario dará error al no encontrar 'mspdb100.dll'
  28.  
  29.        '//VS2012 64bits
  30.        'link.exe se encuentra en:
  31.        'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
  32.        'mspdb100.dll' se encuentra en:
  33.        'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE
  34.  
  35.        Dim DirProgramFiles As String
  36.  
  37.        If Environment.Is64BitOperatingSystem Then
  38.            DirProgramFiles = (Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86))
  39.        Else
  40.            DirProgramFiles = (Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles))
  41.        End If
  42.  
  43.        Dim Path_Link As String  = (DirProgramFiles & "\Microsoft Visual Studio 10.0\Common7\IDE\link.exe")
  44.        Dim FileTemp As String = System.IO.Path.GetTempFileName     'Crea un archivo temporal
  45.        Dim C34 As String = Convert.ToChar(34)
  46.  
  47.        'Linea de comandos para link.exe
  48.        Dim StartLink As String = String.Format("{0}{1}{2} /dump /exports {3}{4}{5} /out:{6}{7}{8}", _
  49.                                                C34, Path_Link, C34, _
  50.                                                C34, Path_Dll, C34, _
  51.                                                C34, FileTemp, C34)
  52.        Try
  53.            'Ejecuta link.exe
  54.            Dim myProcess As New Process()
  55.            myProcess.StartInfo.UseShellExecute = False
  56.            myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
  57.            myProcess.StartInfo.FileName = StartLink
  58.            myProcess.StartInfo.CreateNoWindow = True
  59.            myProcess.Start()
  60.        Catch ex As Exception
  61.            MessageBox.Show("No se encuentra link.exe")
  62.        End Try
  63.  
  64.  
  65.         Me.Cursor = Cursors.WaitCursor
  66.        System.Threading.Thread.Sleep(2000)
  67.        Me.Cursor = Cursors.Default
  68.  
  69.        Dim strBuffer As New System.IO.StreamReader(FileTemp)
  70.        TextBox1.Text = strBuffer.ReadToEnd
  71.        strBuffer.Close()
  72.        FileIO.FileSystem.DeleteFile(FileTemp)
  73.  
  74.    End Sub
  75.  
  76.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  77.  
  78.    End Sub
  79. End Class


Sl2




El método también se puede usar para obtener información a través de aplicaciones que usen comandos

Este ejemplo obtiene es el resultado de hacer: ping www.google.es

Código
  1.  
  2. Public Class Form1
  3.  
  4.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  5.  
  6.    End Sub
  7.  
  8.  
  9.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  10.  Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
  11.        TextBox1.Text = GetResultCommand(sCommand)
  12.    End Sub
  13.  
  14. #Region "GetResultCommand"
  15.    Public Function GetResultCommand(ByVal sCommandLine As String) As String
  16.        Dim FileTemp As String = System.IO.Path.GetTempFileName     'Crea un archivo temporal
  17.        Dim C34 As String = Convert.ToChar(34)
  18.        Dim Result As String = Nothing
  19.  
  20.  
  21.        sCommandLine = String.Format(sCommandLine & "{0}{1}{2}", C34, FileTemp, C34)
  22.  
  23.  
  24.        Try
  25.            Dim myProcess As New Process()
  26.            With myProcess
  27.                .StartInfo.UseShellExecute = False
  28.                .StartInfo.WindowStyle = ProcessWindowStyle.Hidden
  29.                .StartInfo.FileName = sCommandLine
  30.                .StartInfo.CreateNoWindow = True
  31.                .Start()
  32.            End With
  33.  
  34.        Catch ex As Exception
  35.            MessageBox.Show(ex.Message)
  36.        End Try
  37.  
  38.        Me.Cursor = Cursors.WaitCursor
  39.        System.Threading.Thread.Sleep(2000)
  40.  
  41.        Dim FileAccesible As Boolean = False
  42.        While FileAccesible = False
  43.            Try
  44.                Dim strBuffer As New System.IO.StreamReader(FileTemp, System.Text.Encoding.GetEncoding("ibm850"))
  45.                Result = strBuffer.ReadToEnd()
  46.                FileAccesible = True
  47.                strBuffer.Close()
  48.  
  49.            Catch ex As Exception
  50.                FileAccesible = False
  51.            End Try
  52.             My.Application.DoEvents()
  53.        End While
  54.        Me.Cursor = Cursors.Default
  55.        FileIO.FileSystem.DeleteFile(FileTemp)
  56.        Return Result
  57.    End Function
  58. #End Region
  59. End Class
  60.  

Mediante este...snippet, supongo. Se obtendría el resultado de una línea de comandos que usáramos en la consola de windows:


Código
  1. GetResultCommand(LÍNA DE COMANDO)

Es importante poner entre comillas la aplicación a la que llamamos:
""cmd.exe""

Código
  1. Dim sCommand As String = String.Format("""cmd.exe"" /r ping {0} ", "www.elhacker.net")

para menos lío también se puede llamar así:

Código
  1. Dim sCommand As String = String.Format("""{0}"" /r ping {1} ", "cmd.exe", "www.elhacker.net")

el caso es que la aplicación quede entre comillas.

[MODIFICACADO]
Bueno, he hecho una pequeña modificación porque me he dado cuenta que claro, no todas las aplicaciones con comandos tienen el mismo comando de salida. Por ejemplo link.exe tiene /out: y cmd.exe tiene '>'. Así que esto es mejor aplicarlo cuando establecemos el comando y no desde el snippet

Con lo cual quedaría así con link.exe:
Código
  1.      Dim sCommand As String = String.Format("""{0}"" /dump /exports {1} /out:", _
  2. "C:\Archivos de programa\Microsoft Visual Studio 10.0\Common7\IDE\link.exe", _
  3.    "c:\windows\system32\shell32.dll")
  4.        TextBox1.Text = GetResultCommand(sCommand)

o así en con cmd.exe:
Código
  1.   Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
  2.        TextBox1.Text = GetResultCommand(sCommand)

Y he modificado esta línea quitando '>':

Código
  1. sCommandLine = String.Format(sCommandLine & "{0}{1}{2}", C34, FileTemp, C34)

También he añadido:
Código
  1. System.Text.Encoding.GetEncoding("ibm850")

Que no se en otra compu, pero en la mía si no establezco esta codificación para leer el archivo no se ven correctamente las vocales con acento.

-------------------------------------------------------


         ALGUNOS COMANDOS INTERESANTES PARA OBTENER INFORMACIÓN
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r dir C: >", "cmd.exe")
         
     
Código:
Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
   
   Para mostrar todo el contenido de la tabla de rutas IP
   
Código:
Dim sCommand As String = String.Format("""{0}"" /r route print >", "cmd.exe")

      Muestra la configuración de TCP/IP completa de todos los adaptadores
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r ipconfig /all >", "cmd.exe")


        Muestra una lista de todos los controladores de dispositivo instalados y sus propiedades.
        [modo tabla]
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r driverquery >", "cmd.exe")
       [modo csv]
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r driverquery /fo csv >", "cmd.exe")


        Muestra los archivos en lista donde se ejecuta esta apliación
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r tree /f >", "cmd.exe")

        Muestra todos los archivos del directorio C: (puede tardar un poco según el disco)
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r tree c:\ /f >", "cmd.exe")


        [Este es muy buen comando]
        Muestra información de configuración detallada acerca de un equipo y su sistema operativo
        (puedes usar 'csv' o 'list' en lugar de 'table'
   
Código:
Dim sCommand As String = String.Format("""{0}"" /r systeminfo /fo table >", "cmd.exe")
       
   Para obtener información de un determinado host (sistema)
        comando= 'systeminfo /s HOST /fo table'
        Para(obtener) 'HOST'  escribe hostname en la consola y luego lo incorporas en el siguente
        comando, en este caso es 'mypc'
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r systeminfo /s mypc /fo table >", "cmd.exe")

        Muestra una lista de los servicios que se están ejecutando
Código:
Dim sCommand As String = String.Format("""{0}"" /r Net start  >", "cmd.exe")

        Muestra las conexiones activas
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat >", "cmd.exe")

        Muestra todas las conexiones y puertos de escucha
        '
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -a >", "cmd.exe")

        Muestra el ejecutable que crea cada conexión o puerto de(escucha)
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -b >", "cmd.exe")

        Muestra las estadísticas Ethernet. Se puede combinar con la opción()-s
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -e >", "cmd.exe")

        Muestra estadísticas por protocolo. De forma predeterminada,
        se muestran para IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP y
        UDPv; se puede utilizar la opción -p para especificar un
        subconjunto de los valores predeterminados
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -s >", "cmd.exe")


        CONSEJO:
        'ALGUNOS COMANDOS PERMITEN USAR TRES TIPOS DE LISTA [LIST|CSV|TABLE]
        usando CSV puedes acceder fácilmente a la información usando SPLIT
        MODO CSV: "infoA","InfoB","infoC","InfoD"
        Ejemplo:
        Devuelve la dirección de control de acceso a medios (MAC, media access control) y  lista de los protocolos de red asociados con cada la dirección de todas las tarjetas de red de cada equipo
        
Código:
Dim sCommand As String = String.Format("""{0}"" /r getmac  /fo csv /nh /v >", "cmd.exe")
       
Código:
Dim sCommand As String = String.Format("""{0}"" /r getmac  /s mypc /fo csv >", "cmd.exe")


Espero que os sirva

sl2  :D


[condejo]
Para un TextBox u otro control de texto usa la fuente Courier New para que las tablas se muestren de forma ordenada.


« Última modificación: 28 Noviembre 2015, 16:54 por Lekim » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Importar tabla
Programación Visual Basic
jrhomer 3 656 Último mensaje 23 Mayo 2007, 09:08
por jrhomer
Introduccion a APIs y como evitar el uso de MSWINSCK.OCX con APIs
Programación Visual Basic
Achernar 5 3,511 Último mensaje 5 Julio 2007, 23:43
por Achernar
Importar .dll
.NET (C#, VB.NET, ASP)
DarkItachi 5 2,642 Último mensaje 9 Julio 2008, 23:49
por MANULOMM
importar dll de c++ en c#
.NET (C#, VB.NET, ASP)
^kazike^ 6 7,673 Último mensaje 10 Septiembre 2009, 13:37
por ^kazike^
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines