Bueno mi problema es bastante complejo y lo detallo aqui con la esperanza de que alguien puede ayudarme:
La cosa es asi:
Estoy Programado una DLL normal en VB6, para hacerlo segui esta
guia depues de creear el contol de compilacion como dice la guia y probar que fucnionaba usando el ejemplo alli descrito me propuse crear un dll la cul su funcion es:
Verificar si existe un proceso DAdo, si este existe cerrarlo y continuar la ejecucionde proceso Padre, en caso contrario(el proceso buscado no existe) la dll cierra el proceso padre y abre el programa enscionad al pricipio.
Ahora ahi que desctacar varias cosas sin las cuales no se entenderia el problema.
La dll esta hookeada usando olly para editar el EXE el hook es de esta forma
HOOK:
PUSH + offset Loader.dll
LOADLIBRARYA
OR EAX,EAX
JE (DB 00)
PUSH offset_DllMain
PUSH EAX
PUSH GetProcAddress
CALL EAX
JMP OEP
Luego de hookear la dll con este metodo, cambio el EP por el del PUSH + offset DLL
La dll debe ser iniciada con un proceso que en este caso se LLama DllMain
Este es el unico metodo de hook que puedo hacer ya que una inyecion dese otro programa no me sirve y no tengo acceso al codigo del exe para hacer el hook de otra forma
MODULO.bas'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Funciòn APi para buscar Ventanas de Windows
Public Declare Function FindWindow _
Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
'Para finalizar dicha ventana
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Public Sub Comprobar()
Dim clase As String
clase = "ThunderRT6FormDC"
Dim ret As Long
' busca la ventana y retorna el Handle
ret = FindWindow(clase, "MuPaysandú V 1.0.59")
'si retorna distinto _
de 0 es porque la encontró
If ret <> 0 Then
' Finaliza la ventana
Log ("Launcher cerrado corectamente con el HWD " & ret)
SendMessage ret, "&H112", "&HF060&", ByVal 0
Else
Log ("Launcher no encontrado.")
ret = FindWindow("MU", vbNullString)
If ret <> 0 Then
SendMessage ret, "&H112", "&HF060&", ByVal 0
Log ("Procediendo a cerrar el Cliente.")
Log ("Abriendo Launcher.")
ShellExecute ret, "Open", App.Path & "\MU.exe", vbNullString, "0", "1"
Else
Log ("MuPaysandu No encontrado.")
End If
End If
End Sub
Public Sub Log(Razon As String)
Open App.Path & "\log.txt" For Append As 1
Print #1, "[" & Date & "] " & Razon
Close #1
End Sub
Public Function DllMain() As String
Comprobar
End Function
Para cree un exe estandar y pude declare la dll
y luego hice la llamada y el resultado es:
Error '429 en tiempo de ejecucion.
El componente ActiveX no puede crear el objecto.Private Declare Function DllMain Lib "Loader.dll" () As String
Private Sub Command1_Click()
DllMain
End Sub
si pruebo este mismo exe dese el IDE no pasa nada
y si hookeo la dll al ejecutable al cual va destinado genera el tipico "Main.exe ha generado un error y deb cerrarse"