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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6 7 8
11  Programación / Programación Visual Basic / Saltarse un tipo de heurística en: 5 Marzo 2008, 00:54 am
Weno en una de mis creaciones (maleficas como no) pretendo desacerme de la heurística de los AVs como es obvio leyendo el titulo...weno el tema de cifrar las String está claro que lo tengo que realizar...la cuestión es otra:

Muchos AVs (como el NOD32) detectan por heurística acciones sospechosas, y muchas de ellas relacionadas con el inicio de una aplicación...por ejemplo en VB si tienes un modulo (y no formularios, por ejemplo con un Sub Main) y en el Main le pones una instruccion FileCopy, Kill, ... automaticamente pasa a ser detectado (y si lo hago con un Form_Load de un formulario parecido)...ese es el tipo de heurística que quiero evitar, la heurística que me detecta ciertas acciones en el Load (o Main) de mi programa...

Pues weno lo primero que hice fue poner APIs en lugar de las propias funciones del VB...funcionó en algunos casos pero en otros no...también prové a crear una funcion que llamara a otra funcion y asi sucesivamente pero eso no cuela a los AVs (sería demasiado facil no? xD)

Muchos os preguntareis porque insisto en no poner un Form, ya que con un Form podría poner por ejemplo un Timer que llamase a mi funcion y listo, al no estar en el Load ya no canta ni la mitad...sin embargo no quiero usar un Form pork probando descubrí que el hecho de poner un Form me aumenta 40KB la aplicación, de pesar 68KB usando solo modulos conuna funcion Sub Main enuno de ellos, me pasa a 108KB poniendo un solo Form con un Timer y el mismo code...eso es mucho para mi...(weno sobra decir que en mi aplicación es silenciosa y no muestra nada en pantalla, por eso los Forms son innecesarios)

Por eso, la cuestión es: como hacer que mi programa tras ejecutarse inicie automaticamente su codigo con instrucciones que el AV detecta como sospechosas si están programadas para ejecutarse al inicio?

A mi por el momento se me ocurrieron dos ideas:

  • Usar CreateThread: Sin embargo tengo entendido que con VB6.0 esa API no siempre funciona bien para ejecutar las propias funciones del programa y me daría problemas...y de hecho ya me las dió con funciones de una sola linea, no me imagino con un codigo grande entero que llama a varias funciones, APIs, etc...
  • Usar SetTimer y KillTimer para establecer un Timer (y en cuanto se ejecute una vez desactivarlo automaticamente) mediante APIs (y asi no me hace falta el Form) y apuntando a la funcion Main: Es la mejor alternativa que veo, pero aun tengo que provar si funciona correctamente, pues me da a mi que causará errores...por ejemplo a la hora de usar la funcoin Command que recoge los parametros de la aplicación no se si desde el Timer funcionará (me da a mi que no)...weno mañana (hoy es tarde) pruebo y ya os comento...pero no se, otra alternativa me parecería más segura...

Sobre este post decir que weno lo pongo para que vosotros me digais vuestras opiniones de que hariais vosotros...si veis mejores alternativas al Timer mediante APIs...mejores soluciones...etc...pero insisto...nada de Forms!

Saludos ;)
12  Seguridad Informática / Nivel Web / Escaner vulnerabilidades sobre una pagina en: 22 Febrero 2008, 22:22 pm
Hola mirad mire con un escaner de vulnerabilidades si una web era vulnerable a algo...pasé el X-Scan y el Shadow Security Scanner...los resultados fueron estos:

Puertos abiertos:

Código:
21.- FTP - File Transfer Control
80.- WWW-HTTP - World Wide Web HTTP (Hyper Text Transfer Protocol)
443.- HTTPS - HTTPS (Hyper Text Transfer Protocol Secure) - SSL (Secure Socket Layer)
8001.- Generic - Share Service Port
8002.- Generic - Share Service Port
8003.- Generic - Share Service Port
8004.- Generic - Share Service Port
8005.- Generic - Share Service Port
8006.- Generic - Share Service Port
8007.- Generic - Share Service Port
8008.- Generic - Share Service Port
8009.- Generic - Share Service Port
8010.- Generic - Share Service Port
9000.- UNKNOW - Unknow Service

Vulnerabilidades con X-Scan:

Código:
-"IIS 5.0 .printer remote buffer overflow" maybe vulnerable
-"IIS Index Server ISAPI remote buffer overflow" maybe vulnerable(/NULL.ida)
-"IIS Index Server ISAPI remote buffer overflow" maybe vulnerable(/NULL.idq)

Vulnerabilidades con Shadow Security Center:

Código:
-Web Servers : Apache HTTP Server 2.2.6, 2.0.61 and 1.3.39 mod_status Cross-Site Scripting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache HTTP Server 413 Error HTTP Request Method Cross-Site Scripting Weakness (esta vulnerabilidad aparece dos veces para cada puerto): 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache HTTP Server Mod_Cache Denial of Service Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache HTTP Server Mod_Proxy Denial of Service Vulnerability (esta vulnerabilidad aparece dos veces para cada puerto): 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache HTTP Server Mod_Status Cross-Site Scripting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache Mod_AutoIndex.C Undefined Charset Cross-Site Scripting Vulnerability (esta vulnerabilidad aparece dos veces para cada puerto): 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache mod_imagemap and mod_imap Cross-Site Scripting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache mod_negotiation HTML Injection and HTTP Response Splitting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache mod_proxy_balancer Multiple Vulnerabilities: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache mod_proxy_ftp Undefined Charset UTF-7 Cross-Site Scripting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

-Web Servers : Apache Mod_SSL Custom Error Document Remote Denial Of Service Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000

Weno pues estos son los resultados...se necesita mas informacion? yo la verdad de esto no entiendo mucho pero me gustaría que me dijeran si esta web es realmente vulnerable a algo...pork ya me dijeron que los escaneres de vulnarebilidades no son para ala sacar ai vulnerabilidades explotables a lo loco...

Weno a ver si alguien sabe algo...

Saludos ;)
13  Programación / Programación Visual Basic / Inyeccion para crashear procesos en: 14 Febrero 2008, 20:05 pm
Weno pues hablando asi con Tughack nos surgio el tema de crashear procesos inyectando en su memoria...me dijo que con el code de Hendrix para inyectar DLL en procesos si intentas inyectar DLLs que no existen (una ruta falsa) los procesos crasheaban...sin embargo a mi no me funciona y el volvio a probar y tampoco le funcionó...el code por si alguien no sabe es este:

http://foro.elhacker.net/index.php/topic,168272.0.html

Alguien lo ha probado? alguien sabe como crashear un proceso inyectando en su memoria??

Weno a ver si alguien sabe algo de este tema...saludos ;)
14  Programación / Ingeniería Inversa / Primera instrucción de una funcion de una DLL en: 14 Febrero 2008, 18:59 pm
Weno no sabía muy bien donde poner esto pero supongo que ira aqui...

Lo que quiero es saber como puedo obtener la primera instruccion de una función de una DLL...

No pido asi un code que lo haga, sino más bien alguna caracteristica del formato PE que me diga donde empieza cada una de las funciones de una DLL...

Por ejemplo el EntryPoint nos dice la primera instruccion al ejecutarse (supongo que será la del Main), pues lo que quiero es saber como puedo obtener las posiciones de la primera instruccion de cada una de las funciones de una DLL...

Alguien sabe?

Saludos ;)
15  Programación / Programación Visual Basic / [Source] Eliminar carpetas, subcarpetas y archivos en: 14 Febrero 2008, 18:46 pm
Weno pues he hecho una funcion sencilla para borrar carpetas y sus archivos, con la posibilidad de eliminar sus subcarpetas. La funcion devolverá 0 si no se consiguió eliminar a carpeta original, si la carpeta se consiguó eliminar correctamente devolverá un valor distinto de 0. Fijate en que para borrar una carpeta primero hay que borrar todos sus archivos, si cualquier archivo de cualquier subcarpeta no se consiguió eliminar (por ejemplo por estár en uso) no se podrá borrar la carpeta original y la funcion devolverá 0, aunke puede que borrase la mayor parte de los archivos igualmente...

Si seleccionas eliminar las subcarpetas (que es lo normal) se borrarán todos los archivos y subcarpetas de la misma, y por ultimo se borra tambien la carpeta.

Si no seleccionas borrar las subcarpetas solamente se borran los archivos de la carpeta elegida y posteriormente se intenta borrar la carpeta, pero si existen subcarpetas está nunca se conseguirá eliminar (ya que hay subcarpetas dentro) y la funcion devolverá un valor distinto de 0.

Weno hice dos funciones, una usando las APIs y otra usando las funciones de VB:

Código
  1. Option Explicit
  2.  
  3. Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
  4. Private Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long
  5.  
  6. Public Function ElimFolder(ByVal sDir As String, ByVal WithSubfolders As Boolean) As Long
  7. Dim sFile As String
  8. Dim counD As Long, counF As Long
  9. Dim i As Long
  10. ReDim sDirs(0 To 0) As String
  11. ReDim sFiles(0 To 0) As String
  12. On Error Resume Next
  13. If IsDir(sDir) Then
  14.    If Right(sDir, 1) <> "\" Then sDir = sDir & "\"
  15.    sFile = Dir(sDir, 55)
  16.    Do
  17.        If IsDir(sDir & sFile) Then
  18.            If (sFile <> ".") And (sFile <> "..") Then
  19.                ReDim Preserve sDirs(0 To counD) As String
  20.                sDirs(counD) = sDir & sFile
  21.                counD = counD + 1
  22.            End If
  23.        Else
  24.            ReDim Preserve sFiles(0 To counF) As String
  25.            sFiles(counF) = sFile
  26.            counF = counF + 1
  27.        End If
  28.        sFile = Dir
  29.    Loop While sFile <> vbNullString
  30.    If sFiles(0) <> vbNullString Then
  31.        For i = 0 To UBound(sFiles)
  32.            DeleteFile sDir & sFiles(i)
  33.        Next i
  34.    End If
  35.    If WithSubfolders Then
  36.        If sDirs(0) <> vbNullString Then
  37.            For i = 0 To UBound(sDirs)
  38.                ElimFolder sDirs(i), True
  39.            Next i
  40.        End If
  41.    End If
  42.    ElimFolder = RemoveDirectory(sDir)
  43. End If
  44. End Function



Código
  1. Option Explicit
  2.  
  3. Public Function ElimFolder(ByVal sDir As String, ByVal WithSubfolders As Boolean) As Long
  4. Dim sFile As String
  5. Dim counD As Long, counF As Long
  6. Dim i As Long
  7. ReDim sDirs(0 To 0) As String
  8. ReDim sFiles(0 To 0) As String
  9. On Error Resume Next
  10. If IsDir(sDir) Then
  11.    If Right(sDir, 1) <> "\" Then sDir = sDir & "\"
  12.    sFile = Dir(sDir, 55)
  13.    Do
  14.        If IsDir(sDir & sFile) Then
  15.            If (sFile <> ".") And (sFile <> "..") Then
  16.                ReDim Preserve sDirs(0 To counD) As String
  17.                sDirs(counD) = sDir & sFile
  18.                counD = counD + 1
  19.            End If
  20.        Else
  21.            ReDim Preserve sFiles(0 To counF) As String
  22.            sFiles(counF) = sFile
  23.            counF = counF + 1
  24.        End If
  25.        sFile = Dir
  26.    Loop While sFile <> vbNullString
  27.    If sFiles(0) <> vbNullString Then
  28.        For i = 0 To UBound(sFiles)
  29.            Kill sDir & sFiles(i)
  30.        Next i
  31.    End If
  32.    If WithSubfolders Then
  33.        If sDirs(0) <> vbNullString Then
  34.            For i = 0 To UBound(sDirs)
  35.                ElimFolder sDirs(i), True
  36.            Next i
  37.        End If
  38.    End If
  39.    Err.Clear
  40.    RmDir sDir
  41.    If Err.Number = 0 Then ElimFolder = 1
  42. End If
  43. End Function

Son codes sencillos pero espero que les sirvan a alguien. :xD

Saludos ;)
16  Programación / Programación Visual Basic / [Source] Conseguir privilegios (AdjustTokenPrivileges) en: 11 Febrero 2008, 20:32 pm
Bueno pues intentando matar procesos SYSTEM que corrian como servicios desde una cuenta Admin me di cuenta que el propio taskmgr.exe lograba matarlos, yo desde VB6.0 no y me puse a investigar...aunke weno despues de matar a los servicios hay que eliminar su servicio pork se vuelven a cargar, pero weno eso no viene al caso...

Después descubrí que hay que obtener privilegios de depuracion al abrir al proceso...y para eso hay que usar la API AdjustTokenPrivileges...obviamente tendrás que ser Administrador

Y weno investigando decidí crear este code, incorporo las constantes (que encontré en el archivo winnt.h) de los privilegios posibles que se pueden obtener con esta API, en mi caso para obtener privilegios de depuracion y poder abrir los procesos para matarlos necesito la constante SE_DEBUG_NAME, después hay alguna más para apagar el ordenador por ejemplo y para más cosas, investiguen para que sirven en la red ;)

Y weno aki el code, copiadlo en un modulo...

Código
  1. 'Codigo creado por nhaalclkiemr
  2. 'Se ruega mantener este texto
  3.  
  4. Option Explicit
  5.  
  6. 'Constantes
  7. Private Const ANYSIZE_ARRAY = 1
  8. Private Const TOKEN_ADJUST_PRIVILEGES = &H20
  9. Private Const TOKEN_QUERY = &H8
  10. Private Const SE_PRIVILEGE_ENABLED = &H2
  11.  
  12. 'Tipos
  13. Private Type LUID
  14.    LowPart As Long
  15.    HighPart As Long
  16. End Type
  17. Private Type LUID_AND_ATTRIBUTES
  18.        pLuid As LUID
  19.        Attributes As Long
  20. End Type
  21. Private Type TOKEN_PRIVILEGES
  22.    PrivilegeCount As Long
  23.    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
  24. End Type
  25.  
  26. 'Declaraciones
  27. Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
  28. Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLUID As LUID) As Long
  29. Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
  30. Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
  31.  
  32. 'Constantes de privilegios
  33. Public Const SE_CREATE_TOKEN_NAME As String = "SeCreateTokenPrivilege"
  34. Public Const SE_ASSIGNPRIMARYTOKEN_NAME As String = "SeAssignPrimaryTokenPrivilege"
  35. Public Const SE_LOCK_MEMORY_NAME As String = "SeLockMemoryPrivilege"
  36. Public Const SE_INCREASE_QUOTA_NAME As String = "SeIncreaseQuotaPrivilege"
  37. Public Const SE_UNSOLICITED_INPUT_NAME As String = "SeUnsolicitedInputPrivilege"
  38. Public Const SE_MACHINE_ACCOUNT_NAME As String = "SeMachineAccountPrivilege"
  39. Public Const SE_TCB_NAME As String = "SeTcbPrivilege"
  40. Public Const SE_SECURITY_NAME As String = "SeSecurityPrivilege"
  41. Public Const SE_TAKE_OWNERSHIP_NAME As String = "SeTakeOwnershipPrivilege"
  42. Public Const SE_LOAD_DRIVER_NAME As String = "SeLoadDriverPrivilege"
  43. Public Const SE_SYSTEM_PROFILE_NAME As String = "SeSystemProfilePrivilege"
  44. Public Const SE_SYSTEMTIME_NAME As String = "SeSystemtimePrivilege"
  45. Public Const SE_PROF_SINGLE_PROCESS_NAME As String = "SeProfileSingleProcessPrivilege"
  46. Public Const SE_INC_BASE_PRIORITY_NAME As String = "SeIncreaseBasePriorityPrivilege"
  47. Public Const SE_CREATE_PAGEFILE_NAME As String = "SeCreatePagefilePrivilege"
  48. Public Const SE_CREATE_PERMANENT_NAME As String = "SeCreatePermanentPrivilege"
  49. Public Const SE_BACKUP_NAME As String = "SeBackupPrivilege"
  50. Public Const SE_RESTORE_NAME As String = "SeRestorePrivilege"
  51. Public Const SE_SHUTDOWN_NAME As String = "SeShutdownPrivilege"
  52. Public Const SE_DEBUG_NAME As String = "SeDebugPrivilege"
  53. Public Const SE_AUDIT_NAME As String = "SeAuditPrivilege"
  54. Public Const SE_SYSTEM_ENVIRONMENT_NAME As String = "SeSystemEnvironmentPrivilege"
  55. Public Const SE_CHANGE_NOTIFY_NAME As String = "SeChangeNotifyPrivilege"
  56. Public Const SE_REMOTE_SHUTDOWN_NAME As String = "SeRemoteShutdownPrivilege"
  57.  
  58. Public Function ObtenerPrivilegios(ByVal privilegio As String) As Long
  59. 'Devolvera 0 si se produjo algun error, sino devolvera un valor distinto de cero (normalmente 1)
  60. Dim lpLUID As LUID
  61. Dim lpToken As TOKEN_PRIVILEGES
  62. Dim lpAntToken As TOKEN_PRIVILEGES
  63. Dim hToken As Long
  64. Dim hProcess As Long
  65. Dim res As Long
  66.  
  67. hProcess = GetCurrentProcess()
  68. res = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken)
  69. If res = 0 Then
  70.    MsgBox "Se produjo un error al abrir el proceso", vbCritical
  71.    Exit Function
  72. End If
  73. res = LookupPrivilegeValue(vbNullString, privilegio, lpLUID)
  74. If res = 0 Then
  75.    MsgBox "No se pudo obtener el LUID", vbCritical
  76.    Exit Function
  77. End If
  78. With lpToken
  79.    .PrivilegeCount = 1
  80.    .Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
  81.    .Privileges(0).pLuid = lpLUID
  82. End With
  83.  
  84. res = AdjustTokenPrivileges(hToken, False, lpToken, Len(lpToken), lpAntToken, Len(lpAntToken))
  85. If res = 0 Then
  86.    MsgBox "No se pudo llevar a cabo el ajuste de privilegios", vbCritical
  87.    Exit Function
  88. End If
  89. ObtenerPrivilegios = res
  90. End Function

Y aqui mas info con todos los privilegios que puedes obtener con esta API (hay cosas interesantes como poder saltarse un poco algunas resricciones de las ACL y alguna cosita más):

http://msdn2.microsoft.com/en-us/library/bb530716(VS.85).aspx

Para tios con tanta idea de Inglés como yo: http://translate.google.com/translate?hl=es&u=http%3A%2F%2Fmsdn2.microsoft.com%2Fen-us%2Flibrary%2Fbb530716(VS.85).aspx  :xD

Espero que os sirva, saludos ;)
17  Programación / Programación Visual Basic / Matar procesos (todos los métodos que conozcais) en: 10 Febrero 2008, 23:46 pm
Pues a ver necesito que me digais todos los métodos que sabais para matar a un proceso, yo se estes:

-La API TerminateProcess

-Con algunos objetos y el método .Terminate:

Código
  1. Set objWMIService = GetObject("winmgmts:\\")
  2. Set colItems = objWMIService.ExecQuery("Select * from Win32_Process", , 48)

-El comando taskkill

-Inyectando en la memoria del proceso...

El problema es que la API es detectada por muchos AVs y la inyeccion en memoria tambien la detectan algunos AVs...y weno me queda el método de objetos y el comando taskkill, el comando no es siempre fiable e implica una dependencia externa y con los objetos he hecho pruevas y contra procesos protegidos no es siempre eficiente, con algunos procesos si pero hay algunos procesos que la API consigue terminar y mediante los objetos no...

Sabeis mas métodos? si alguien sabe más métodos que los ponga...

Saludos ;)
18  Programación / Programación Visual Basic / Melt en: 31 Enero 2008, 23:36 pm
Bueno pues a ver, ya se que muchos sabeis que un Melt (autodestruccion) es hacer que después de ejecutarse el programa se borre a si mismo...pues el problema que tengo es que la mayoría de veces el archivo se copia y la nueva copia que se ejecuta es la que borra el original...pero yo no quiero tener que andar copiando ningun archivo...quiero que al terminar su ejecucion se borre...pero si todavía está en ejecución como puedo borrarme a mi mismo???

Esa es la cuestion...a ver si alguien me puede ayudar...se me ocurren métodos como poner una linea del cmd.exe en tareas programadas o para el proximo inicio...pero weno me gustaría algo profesional...que el propio programa se eliminase a si mismo...y como hago si se encuentra en ejecucion??? ese es el problema

A ver que ideas se os ocurren...no me hacen falta codigos...simplemente ideas...

Saludos ;)
19  Media / Juegos y Consolas / Emuladores varios con muchos juegos!! en: 20 Enero 2008, 05:41 am
Weno aki os dejo una recompilación de varios emuladores con muchos juegos...son cuatro partes de un archivo RAR...al descomprimirlo os encontrareis un archivo .exe (no os asusteis) que es un SFX autoextraible de WinRAR que os lo instala automaticamente...pero si preferias podeis descomprimirlo vosotros con el WinRAR (si desconfiais :xD)...

Citar
ePSXe 1.6.0---------------Emulador Play 1

PSX 1.1---------------------Emulador Play 1

Project 64------------------Emulador Nintendo 64

Snes 9x 1.43--------------Emulador Super Nintendo

Zsnes-----------------------Emulador Super Nintendo

Visual Boy Advance-----Emulador Game Boy Advance

Esos son los emuladores que trae...pero los emuladores no son lo mas importante...sino los juegos...trae muchos juegos (menos de la Play 1) por eso el archivos pesa unos 700MB...

Aki los links de descarga:

1ª parte - http://www.hotshare.net/file/26300-8660298b8b.html
2ª parte - http://www.hotshare.net/file/26387-780601004d.html
3ª parte - http://www.hotshare.net/file/26506-5142480f6a.html
4ª parte - http://www.hotshare.net/file/26739-6152443ac4.html

Clave del RAR:

Código:
nhaalclkiemr

Weno espeto que los disfruteis...

Saludos!! ;)
20  Programación / Programación Visual Basic / [Source] Funcion sencilla para variables de entorno en: 12 Enero 2008, 16:56 pm
Weno como sabreis algunos en Windows las variables de entorno se llaman entre % ...como por ejemplo %windir% y eso devuelve la ruta de Windows...

Y weno en VB no se reconocen de la misma forma...por ejemplo %windir%\system32 en windows ya suponeis que ruta marca (provar a poner eso en ejecutar) pero para VB es una ruta no valida...en VB hay que usar la funcion Environ...por ejemplo Environ("windir")

lo que puse antes en VB sería así

Código
  1. Environ("windir") & "\system32"

Pues bueno yo como acostumbro usar variables de entorno en formato "%windir%" (y por ejemplo para poner una ruta en un TextBox es la mejor manera de hacerlo) hice una funcion sencilla que te devuelve la ruta expandida de las variables de entorno...es muy sencillo simplemente parte las strings por el simbolo % y despues le pasa lo de dentro a la funcion Environ...pero weno por si a alguien le sirve y tal la pongo...es muy sencilla:

Código
  1. Private Function Remplazar(ByVal texto As String) As String
  2. Dim pos(0 To 1) As Long
  3. On Error Resume Next
  4. Do
  5. pos(0) = InStr(1, texto, "%")
  6. pos(1) = InStr(pos(0) + 1, texto, "%")
  7. If pos(1) = 0 Then Exit Do
  8. texto = Left(texto, pos(0) - 1) & Environ(Mid(texto, pos(0) + 1, pos(1) - pos(0) - 1)) & Mid(texto, pos(1) + 1)
  9. Loop
  10. Remplazar = texto
  11. End Function

Saludos ;)
Páginas: 1 [2] 3 4 5 6 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines