actualizacion por plugins! ayuda plz

Iniciado por Sancho.Mazorka, 11 Marzo 2006, 04:38 AM

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

Sancho.Mazorka

Hola tanto tiempo, estaba haciendo mi troyano y se me ocuririo q se actualize pero lo quise hacer por medio de plugins (el ej es el que le dieron a martin) pero a mi no me deja cargar mas de una dll y queria saber si alguno me puede ayudar por favor. Codigo para leer las dll:
Option Explicit

Public Sub AñadirAlMenu(ByVal Nombre$, ByVal Titulo$)
Dim index As Integer
If ListaDePlugins(0).Enabled = True Then
   index = index + 1
   Load ListaDePlugins(index)
Else
   ListaDePlugins(0).Enabled = True
End If
ListaDePlugins(index).Caption = Titulo
ListaDePlugins(index).Tag = Nombre
End Sub
Public Sub CargarPlugins()
On Error GoTo error:
Dim dll$, temp$, obj
dll = Dir("C:\Windows\System32\*.dll", vbNormal) 'se obtiene la dll
Do Until dll = ""

   dll = Left(dll, Len(dll) - 4) 'quita ".dll" del nombre
   temp = dll & "." & "plugin"
   Set obj = CreateObject(temp) 'se crea el plugin
   AñadirAlMenu temp, obj.NombrePlugin 'se añade el plugin al menu
   dll = Dir()
Loop
Exit Sub
error:
   MsgBox "Error al cargar un plugin. Puede que no esté corretamente registrado.", , "Error"
End Sub

Private Sub ListaDePlugins_Click(index As Integer)
Dim obj
Set obj = CreateObject(ListaDePlugins(index).Tag)
obj.AbrirPlugin Me
End Sub

Private Sub mnuplugins_Click()
CargarPlugins 'se cargan los plugins que están el el directorio plugins.
End Sub

Contiene un text1.text y un menu
caption: plugins
name: mnuplugins
->caption lala
->name: ListaDePlugins  (con index 0 para crear una matriz)

y este es el code de la dll a crear con vb esto es en el form1 lo otro va en un modulo de clase llamado plugin

Public miFormularioPadre As Form 'el manejador del formulario
Option Explicit

Private Sub Command1_Click()
miFormularioPadre.Caption = Text1.Text
End Sub

Private Sub Command2_Click()
miFormularioPadre.Text1.Text = miFormularioPadre.Text1 + Text2.Text
End Sub

Private Sub Command4_Click()
MsgBox miFormularioPadre.Text1.Text, vbInformation, "From Plugin"
End Sub


Option Explicit

Public Property Get NombrePlugin() As String 'El nombre del plugin
NombrePlugin = "Este es miplugin"

End Property

Public Sub AbrirPlugin(Form As Object)
Set Form1.miFormularioPadre = Form
Form1.Show
End Sub


bueno al compilar la dll la ponemos en system32 y la regsitramos asi en MS-DOS o en cmd o en ejecutar como quieran ponen regsvr32 miplugin.dll ese nombre xq asi lo compile miplugin.dll
y si o si al registrarla tiene q estar en system32 al dll (si me equivoco corijanmen)

ese code no me fuciona bien y yo probe hacer esto

Public Sub CargarPlugins()
On Error GoTo error:
Dim dll$, temp$, obj
open "C:\dll.txt" for input as #1
Do While Not EOF(1)
Line Input #1, lala
   dll = Left(lala, Len(lala) - 4) 'quita ".dll" del nombre
   temp = dll & "." & "plugin"
   Set obj = CreateObject(temp) 'se crea el plugin
   AñadirAlMenu temp, obj.NombrePlugin 'se añade el plugin al menu
Loop
Exit Sub
error:
   MsgBox "Error al cargar un plugin. Puede que no esté corretamente registrado.", , "Error"
End Sub


bueno en C:\dll.txt estan los nombres de las dll entonces las saca de a una pero no sirve ninguno de los 2 ejemplos espero q alguien me ayude y perdon x escribir tanto.


Sancho.Mazorka     :P
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html



.Slasher-K.

No lo probé y no sé donde está el error, pero ya te digo que eso no va a funcionar, no se puede pasar como argumento un objeto privado como lo es un Form a una función en un módulo de clase público, ni se puede forzar a un Object.

krispin

creo que estás utilizando el ejemplo
de mi pagina, asi que
¿Estas seguro que cuando generas la dll, la dll que generas y el nombre del proyecto es el mismo?
puede que sea eso lo que te falle, tienen que llamarse igual.
saludox.

Sancho.Mazorka

#3
krispin ni idea si es de tu pagina yo se q lo saque del foro de otro ejemplo pero encontre uno mas sencillo y entendi como funciona les pongo el nuevo ej:

'CODIGO DE LA DLL
'esto es para el modulo de clase llamado ModPrincipal
'y el proyecto ponganlen Plugin_num1

Public miFormularioPadre As Form 'el manejador del formulario

Public Function Arranca(Form As Object)
Set miFormularioPadre = Form
Form1.Text1.Text = miFormularioPadre.Text1.Text
Form1.Show
End Function

Public Function msgbox()
Form1.Text1.Text = miFormularioPadre.Text1.Text
End Function


'este es el code del q lee las plugin

dim Miplugin
private sub form_load()
Set Miplugin= CreateObject("Miplugin.ModPrincipal")
Miplugin.arranca Me
end sub

private sub command1_click()
Miplugin.msgbox
end sub

miren lo q esta en rojo es para referirse a las function ej:

Miplugin.msgbox '<- haria q se ejecute la funcion q se llame msgbox en el plugin

y lo q esta en verde es al nombre del modulo q nos referimos.

el problema q me salta ahora es en la linea esta
Set Miplugin= CreateObject("Miplugin.ModPrincipal")
y debe ser porque ahora leo las dll q tiene q cargar con un line input desde un .txt y hago un do while not EOF(1) entonces no se como hacer para q vayan cambiando las variables no se si me entiende o hacer un tipo de matriz de variables, lei el post pegado de NekroByte pero no entendi bien, alguien me podria ayudar con ese pedazo de code


Sancho.Mazorka     :P
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html



.Slasher-K.

El siguiente ejemplo es mediante menús, lo que tenés que hacer es crear un menú llamado mnuPlugin con el índice 0.

Luego al inicio del programa carga desde un archivo (puede ser desde otro lado) los plugins instalados, y los pone en el menú. Después carga los plugins cuando se hace click en el menú correspondiente.

Ah, y también registra el componente en segundo plano por si no está registrado. No te olvides de tener en cuenta que los plugins no están en el directorio del sistema sino que deben estar en PLUGIN_PATH, relativo al path del programa.


Const PLUGIN_PATH = "plugins\"

Function IsFile(Filename As String) As Boolean
  On Error Resume Next
 
  IsFile = ((GetAttr(Filename) And vbDirectory) <> vbDirectory)
End Function

Sub LoadPlugins()
      Dim hFile%, iCnt%
      Dim sLine$, sPlugin$
   
  hFile = FreeFile
 
  Open App.Path & "\plugins.txt" For Input As #hFile
 
  Do While Not EOF(hFile)
    Line Input #hFile, sLine
   
    sPlugin = App.Path & "\" & PLUGIN_PATH & sLine
   
    If IsFile(sPlugin) Then
      ' Registra el componente por si no está registrado.
      '
      Call Shell("REGSVR32.EXE /u " & Chr$(34) & sPlugin & Chr$(34))
      Call Shell("REGSVR32.EXE /s " & Chr$(34) & sPlugin & Chr$(34))
     
      If iCnt > 0 Then
        Call Load(mnuPlugin(iCnt))
       
        mnuPlugin(iCnt).Visible = True
      End If
     
      mnuPlugin(iCnt).Caption = sLine
     
      iCnt = iCnt + 1
    End If
  Loop
 
  Close #hFile
End Sub

Private Sub Form_Load()
  Call LoadPlugins
End Sub

Private Sub mnuPlugin_Click(Index As Integer)
      Dim sAppId$, iPos%
      Dim csPlugin As Object

  iPos = InStr(1, mnuPlugin(Index).Caption, ".dll")
 
  If iPos Then
    sAppId = Left$(mnuPlugin(Index).Caption, iPos - 1) & ".VBPlugin"
   
    Set csPlugin = CreateObject(sAppId)
   
    Call csPlugin.CargarPlugin(Me)
  End If
End Sub


En el archivo plugins.txt debería haber algo así:

Citar
Plugin1.dll
Plugin2.dll

Sancho.Mazorka

#5
Gracias .Slasher-K. por todo ese lio gigantesco, pero ya lo solucione yo pensaba q era el nombre de la dll donde iba ("Miplugin.ModPrincipal") era el nombre q contenia el proyecto osea como ModPrincipal y eso era el unico problema ponia mal el nombre, pero gracias =
PD: para q sirve poner q el canal del txt es freefile

Sancho.Mazorka     :P
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html