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


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10  (Leído 1,173 veces)
Bad4m_cod3

Desconectado Desconectado

Mensajes: 41


"a28ed83f69647d8f2a1046b9fa0e7c2c" H.P.Lovecraft


Ver Perfil
[APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« en: 8 Abril 2025, 22:02 pm »

A continuacion les traigo el siguiente codigo

Código
  1. @echo off & setlocal enabledelayedexpansion
  2. Set "Copyright=by Bad4m_cod3"
  3. Title  %~n0 %Copyright%
  4. Mode con cols=75 lines=8
  5. cls & color 0A & echo.
  6. echo             ***********************************************
  7. echo                 %~n0 %Copyright%
  8. echo             ***********************************************
  9. if _%1_==_Main_  goto :Main
  10. Set Count=0
  11. Set L=0
  12. :getadmin
  13.    echo               %~nx0 : self elevating
  14.    set vbs=%temp%\getadmin.vbs
  15. (
  16. echo Set UAC = CreateObject^("Shell.Application"^)
  17. echo UAC.ShellExecute "%~s0", "Main %~sdp0 %*", "", "runas", 1
  18. )> "%vbs%"
  19.    "%temp%\getadmin.vbs"
  20.    del "%temp%\getadmin.vbs"
  21. goto :eof
  22. ::*************************************************************************************
  23. :Main
  24. Call :init
  25. Call :CountLines
  26. Set "PasswordLog=%~dp0Wifi_Passwords_on_%ComputerName%.txt"
  27. %Mod%
  28. echo             ***********************************************
  29. echo                 %~n0 %Copyright%
  30. echo             ***********************************************
  31. Call :Color 0E "                 [N][SSID] ================ Password" 1
  32. (
  33. echo             ***********************************************
  34. echo                 %~n0 %Copyright%
  35. echo             ***********************************************
  36. echo                  [N][SSID] ==============^> "Password"
  37.  
  38. )>"%PasswordLog%"
  39. for /f "skip=2 delims=: tokens=2" %%a in ('netsh wlan show profiles') do (
  40.    if not "%%a"=="" (
  41.        set "ssid=%%a"
  42.        set "ssid=!ssid:~1!"
  43. call :Getpassword "!ssid!"
  44.    )
  45. )
  46. echo Done
  47. If exist "%PasswordLog%" start "" "%PasswordLog%"
  48. pause>nul
  49. ::*************************************************************************************
  50. :Getpassword
  51. set "name=%1"
  52. set "name=!name:"=!"
  53. Set "passwd="
  54. for /f "delims=: tokens=2" %%a in ('netsh wlan show profiles %1 key^=clear ^|find /I "Cont"') do (
  55. set "passwd=%%a"
  56. Set /a Count+=1
  57. )
  58.  
  59. If defined passwd (
  60. set passwd=!passwd:~1!
  61. echo                  [!Count!][!name!] ====^> "!passwd!"
  62. echo                  [!Count!][!name!] ====^> "!passwd!" >> "% style="color: #448888;">PasswordLog%"
  63. ) else (
  64. Set /a Count+=1
  65. call :color 0C "                 [!Count!][!name!] The Password is empty" 1
  66. echo                  [!Count!][!name!] The Password is empty >> "% style="color: #448888;">PasswordLog%"
  67. )
  68. exit /b
  69. ::*************************************************************************************
  70. :init
  71. prompt $g
  72. for /F "delims=." %%a in ('"prompt $H. & for %%b in (1) do rem"') do set "BS=%%a"
  73. exit /b
  74. ::*************************************************************************************
  75. :color
  76. set nL=%3
  77. if not defined nL echo requires third argument & pause > nul & goto :eof
  78. if %3 == 0 (
  79.    <nul set /p ".=%bs%">%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof
  80. ) else if %3 == 1 (
  81.    echo %bs%>%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof
  82. )
  83. exit /b
  84. ::*************************************************************************************
  85. :CountLines
  86. for /f "skip=2 delims=: tokens=2" %%a in ('netsh wlan show profiles') do (
  87.    if not "%%a"=="" (
  88. set /a L+=1
  89. )
  90. )
  91. set /a L=!L! + 10
  92. Set Mod=Mode con cols=75 Lines=!L!
  93. exit /b
  94. ::*************************************************************************************

Al ejecutarlo te pide privilegios de administrador para poder realizar una busqueda automatica con el comando Netsh Wlan. Solo funciona si el idioma del sistema es el español Saludos :silbar:


En línea

809219e8548c7feaa7cf844281a1d8e4a85f37bd34cc3839cf6498aaaa23dc8c
(Bad4m_cod3 estuvo aqui.)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.921



Ver Perfil
Re: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« Respuesta #1 en: 10 Abril 2025, 16:39 pm »

Primero que nada, gracias por compartir.  :D

Solo funciona si el idioma del sistema es el español

Soy partidario de programar en inglés, ya que es el estándar en la industria y facilita la comprensión. Sin embargo, cuando existe una limitación del código cuyo funcionamiento está atado a un idioma específico y diferente al Inglés, entonces pierde sentido imprimir mensajes de salida en Inglés, ya que esto vuelve el código inconsistente y también confuso. El idioma de los mensajes de salida deberían ser en el mismo idioma de dicha limitación, ya que su uso es específicamente para usuarios hispanohablantes.

De todas formas yo no vine a hacer crítica sino a ofrecerte soluciones en caso de que las quieras...

Primero vamos con otra cosa más simple:

Si el servicio wlansvc no se está ejecutando, el comando de netsh imprimirá el siguiente mensaje de error:
Citar
El Servicio de configuración automática inalámbrica (wlansvc) no se está ejecutando.

Lo cierto es que no tendría mucho sentido que dicho servicio esté desactivado si un usuario está utilizando redes inalámbricas en ese momento, pero podría darse el caso (como me ha ocurrido a mi), así que podríamos tener esto en cuenta e iniciar dicho servicio antes de proceder con los comandos de netsh.exe:

Código:
SC.exe START "wlansvc" 1>NUL



Y con respecto al idioma...

Puedes obtener el código LCID (Locale Id) del idioma regional del usuario utilizando el registro de Windows:
Código
  1. reg.exe query "HKCU\Control Panel\International" /v Locale

y también recurriendo a la infraestructura de WMI:
Código
  1. wmic.exe os get locale /value

El valor está en hexadecimal.

Aquí tienes la lista de LCIDS:
  - https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a

Sin embargo, hay muchas variantes para muchos idiomas, incluyendo para el Español, así que en lugar de un código numérico es más conveniente obtener un valor humanizado, como el valor LocaleName ubicado en la misma clave de registro:
Código:
FOR /F "skip=2 tokens=2*" %%a IN ('REG QUERY "HKEY_CURRENT_USER\Control Panel\International" /v "LocaleName"') DO SET "OSLanguage=%%b"
el cual devolverá un código de idioma en formato "idioma-región" (ej. es-ES, en-US), y simplemente tendrías que examinar que el valor empiece por "es-" para el Español, o por "en-" el Inglés.

Como alternativa, también puedes iniciar el proceso SystemInfo.exe y buscar la cadena de texto "Español" o "English".

O también puedes obtener el idioma con una simple llamada a PowerShell:

Código:
powershell.exe -Command (Get-Culture).Name
# Output: "es-ES", "en-US", etc.

Código:
powershell.exe -Command (Get-Culture).DisplayName
# Output: "Español (España)", "English (United States)", etc.

Hay muchas maneras de hacerlo.

Y, en base a esta determinación de idioma, adaptarías la cadena de búsqueda del comando Find en Batch-script para buscar la cadena en Español o en Inglés/resto de idiomas.

Aunque, también te digo, por si te interesa (quizás tu propósito sea hacer esto en Batch-script, pero por si acaso eso no es lo que realmente te importa entonces yo te comento lo siguiente) que podrías hacerlo todo directamente en PowerShell, y en VBS, iniciando el proceso netsh.exe para evitar depender del idioma, mediante el uso de expresiones regulares (RegEx). Quizás también fuese posible con el comando FINDSTR en Batch-script, que también soporta expresiones regulares aunque con muchas limitaciones. Yo no tengo wi-fi así que desconozco qué cadena de texto devuelve ese comando de netsh en Español como para poder ayudarte con una solución óptima.

Pero, por si te interesa, este código en PowerShell es independiente del idioma:
  - https://www.reddit.com/r/PowerShell/comments/ozxxqi/comment/h84tqut
Esto es una improvisación más inteligente y simplificada que utilizar RegEx (el código original basado en RegEx es este: https://gist.github.com/Noxsios/7b98e302dc33e444d44620798ad5f7f4). Aquí se utiliza netsh con los parámetros "wlan export" para exportar los valores a un documento XML, y se interpreta el contenido con PowerShell.

Atentamente,
Elektro.


« Última modificación: 10 Abril 2025, 17:17 pm por Eleкtro » En línea



Flamer


Desconectado Desconectado

Mensajes: 1.057


crack, crack y mas crack...


Ver Perfil WWW
Re: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« Respuesta #2 en: 10 Abril 2025, 17:33 pm »

Hola esta interesante el tema yo lo hice en vbscript aqui el codigo

Código
  1. option explicit
  2. dim shell,exec1,exec2,datos1,datos2,posicion1,posicion2
  3.  
  4. set shell=CreateObject("wscript.shell")
  5. set exec1=shell.exec("cmd /c netsh wlan show profile")
  6.  
  7. do
  8.   datos1=exec1.StdOut.ReadLine()  
  9.   posicion1="    Perfil de todos los usuarios     : "
  10.  
  11.   if instr(datos1,posicion1) Then
  12.  datos1=Replace(datos1,posicion1,"")
  13.  set exec2=shell.exec("cmd /c netsh wlan show profile " & chr(34) & datos1 & chr(34) & " key=clear")
  14.  
  15.  do
  16.     datos2=exec2.StdOut.ReadLine()
  17.         posicion2="    Contenido de la clave  : "
  18.  
  19. if instr(datos2,posicion2) then
  20.    datos2=Replace(datos2,posicion2,"")
  21.    msgbox "La password de el usuario " & datos1 & "  es : " & datos2
  22. end if
  23.  
  24.  loop while not exec2.StdOut.atEndofStream  
  25.  
  26.   end if
  27.  
  28. loop while not exec1.StdOut.atEndofStream
  29.  

una cosa nose si funcione igual en windows 10, me refiero aque si devuelbe los mismos string yo lo use en windows 11...busque en google y me aparece que solo funciona en windows 10 y 11

saludos Flamer y no ocupa permisos


« Última modificación: 10 Abril 2025, 17:59 pm por Flamer » En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

Bad4m_cod3

Desconectado Desconectado

Mensajes: 41


"a28ed83f69647d8f2a1046b9fa0e7c2c" H.P.Lovecraft


Ver Perfil
Re: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« Respuesta #3 en: 11 Abril 2025, 05:18 am »

Hola esta interesante el tema yo lo hice en vbscript aqui el codigo

Código
  1. option explicit
  2. dim shell,exec1,exec2,datos1,datos2,posicion1,posicion2
  3.  
  4. set shell=CreateObject("wscript.shell")
  5. set exec1=shell.exec("cmd /c netsh wlan show profile")
  6.  
  7. do
  8.   datos1=exec1.StdOut.ReadLine()  
  9.   posicion1="    Perfil de todos los usuarios     : "
  10.  
  11.   if instr(datos1,posicion1) Then
  12.  datos1=Replace(datos1,posicion1,"")
  13.  set exec2=shell.exec("cmd /c netsh wlan show profile " & chr(34) & datos1 & chr(34) & " key=clear")
  14.  
  15.  do
  16.     datos2=exec2.StdOut.ReadLine()
  17.         posicion2="    Contenido de la clave  : "
  18.  
  19. if instr(datos2,posicion2) then
  20.    datos2=Replace(datos2,posicion2,"")
  21.    msgbox "La password de el usuario " & datos1 & "  es : " & datos2
  22. end if
  23.  
  24.  loop while not exec2.StdOut.atEndofStream  
  25.  
  26.   end if
  27.  
  28. loop while not exec1.StdOut.atEndofStream
  29.  

una cosa nose si funcione igual en windows 10, me refiero aque si devuelbe los mismos string yo lo use en windows 11...busque en google y me aparece que solo funciona en windows 10 y 11

saludos Flamer y no ocupa permisos




Saludos, De verdad tremendo aporte simplificaste mucho el trabajo realizado. Lo que me llama la atencion es el uso de Option Explicit para el script. Ya lo testeo y comento que tal. La verdadera incognita es como quedaria con Python y Ruby.

Saludos
En línea

809219e8548c7feaa7cf844281a1d8e4a85f37bd34cc3839cf6498aaaa23dc8c
(Bad4m_cod3 estuvo aqui.)
Bad4m_cod3

Desconectado Desconectado

Mensajes: 41


"a28ed83f69647d8f2a1046b9fa0e7c2c" H.P.Lovecraft


Ver Perfil
Re: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« Respuesta #4 en: 11 Abril 2025, 05:23 am »

Primero que nada, gracias por compartir.  :D

Soy partidario de programar en inglés, ya que es el estándar en la industria y facilita la comprensión. Sin embargo, cuando existe una limitación del código cuyo funcionamiento está atado a un idioma específico y diferente al Inglés, entonces pierde sentido imprimir mensajes de salida en Inglés, ya que esto vuelve el código inconsistente y también confuso. El idioma de los mensajes de salida deberían ser en el mismo idioma de dicha limitación, ya que su uso es específicamente para usuarios hispanohablantes.

De todas formas yo no vine a hacer crítica sino a ofrecerte soluciones en caso de que las quieras...

Primero vamos con otra cosa más simple:

Si el servicio wlansvc no se está ejecutando, el comando de netsh imprimirá el siguiente mensaje de error:
Lo cierto es que no tendría mucho sentido que dicho servicio esté desactivado si un usuario está utilizando redes inalámbricas en ese momento, pero podría darse el caso (como me ha ocurrido a mi), así que podríamos tener esto en cuenta e iniciar dicho servicio antes de proceder con los comandos de netsh.exe:

Código:
SC.exe START "wlansvc" 1>NUL



Y con respecto al idioma...

Puedes obtener el código LCID (Locale Id) del idioma regional del usuario utilizando el registro de Windows:
Código
  1. reg.exe query "HKCU\Control Panel\International" /v Locale

y también recurriendo a la infraestructura de WMI:
Código
  1. wmic.exe os get locale /value

El valor está en hexadecimal.

Aquí tienes la lista de LCIDS:
  - https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a

Sin embargo, hay muchas variantes para muchos idiomas, incluyendo para el Español, así que en lugar de un código numérico es más conveniente obtener un valor humanizado, como el valor LocaleName ubicado en la misma clave de registro:
Código:
FOR /F "skip=2 tokens=2*" %%a IN ('REG QUERY "HKEY_CURRENT_USER\Control Panel\International" /v "LocaleName"') DO SET "OSLanguage=%%b"
el cual devolverá un código de idioma en formato "idioma-región" (ej. es-ES, en-US), y simplemente tendrías que examinar que el valor empiece por "es-" para el Español, o por "en-" el Inglés.

Como alternativa, también puedes iniciar el proceso SystemInfo.exe y buscar la cadena de texto "Español" o "English".

O también puedes obtener el idioma con una simple llamada a PowerShell:

Código:
powershell.exe -Command (Get-Culture).Name
# Output: "es-ES", "en-US", etc.

Código:
powershell.exe -Command (Get-Culture).DisplayName
# Output: "Español (España)", "English (United States)", etc.

Hay muchas maneras de hacerlo.

Y, en base a esta determinación de idioma, adaptarías la cadena de búsqueda del comando Find en Batch-script para buscar la cadena en Español o en Inglés/resto de idiomas.

Aunque, también te digo, por si te interesa (quizás tu propósito sea hacer esto en Batch-script, pero por si acaso eso no es lo que realmente te importa entonces yo te comento lo siguiente) que podrías hacerlo todo directamente en PowerShell, y en VBS, iniciando el proceso netsh.exe para evitar depender del idioma, mediante el uso de expresiones regulares (RegEx). Quizás también fuese posible con el comando FINDSTR en Batch-script, que también soporta expresiones regulares aunque con muchas limitaciones. Yo no tengo wi-fi así que desconozco qué cadena de texto devuelve ese comando de netsh en Español como para poder ayudarte con una solución óptima.

Pero, por si te interesa, este código en PowerShell es independiente del idioma:
  - https://www.reddit.com/r/PowerShell/comments/ozxxqi/comment/h84tqut
Esto es una improvisación más inteligente y simplificada que utilizar RegEx (el código original basado en RegEx es este: https://gist.github.com/Noxsios/7b98e302dc33e444d44620798ad5f7f4). Aquí se utiliza netsh con los parámetros "wlan export" para exportar los valores a un documento XML, y se interpreta el contenido con PowerShell.

Atentamente,
Elektro.

La solucion propuesta esta interesante detalla cada aspecto tecnico, ya me siento a analizar bien el contenido y escribir el codigo en PowerShell. La otra pregunta que planteo seria si existe otra forma que no requiera el comando netsh wlan directamente.
1. Para evitar la ventana cmd emergente
2. Para no depender tanto de procesos que requieran acceso a root en algunos casos.

Saludos
En línea

809219e8548c7feaa7cf844281a1d8e4a85f37bd34cc3839cf6498aaaa23dc8c
(Bad4m_cod3 estuvo aqui.)
Flamer


Desconectado Desconectado

Mensajes: 1.057


crack, crack y mas crack...


Ver Perfil WWW
Re: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« Respuesta #5 en: 11 Abril 2025, 05:31 am »

Saludos, De verdad tremendo aporte simplificaste mucho el trabajo realizado. Lo que me llama la atencion es el uso de Option Explicit para el script. Ya lo testeo y comento que tal. La verdadera incognita es como quedaria con Python y Ruby.

Saludos

hola Bad4m_cod3 creo que quedaria mas bien usando el metodo StdOut.RealAll() seria mas rapido ya que usando el metodo linea por linea es mas lento y mas si lo haces en javascript es muy lento...pero tendria que modificar el codigo y es mas complicado pero no imposible y el comado option explicit es para validar de que las variables a usar sean declaradas y si falta una por declarar te marcaria un error asi es mas eficiente el codigo...al principio yo no lo usaba pero me lo aclaro MCKSys Argentina

en fin saludos Flamer
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

Bad4m_cod3

Desconectado Desconectado

Mensajes: 41


"a28ed83f69647d8f2a1046b9fa0e7c2c" H.P.Lovecraft


Ver Perfil
Re: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« Respuesta #6 en: 11 Abril 2025, 06:39 am »

hola Bad4m_cod3 creo que quedaria mas bien usando el metodo StdOut.RealAll() seria mas rapido ya que usando el metodo linea por linea es mas lento y mas si lo haces en javascript es muy lento...pero tendria que modificar el codigo y es mas complicado pero no imposible y el comado option explicit es para validar de que las variables a usar sean declaradas y si falta una por declarar te marcaria un error asi es mas eficiente el codigo...al principio yo no lo usaba pero me lo aclaro MCKSys Argentina

en fin saludos Flamer

Revisando detenidamente tu perfil es un orgullo saber que fue inspiracion para publicarlo en tu Blog. Me gusto el uso de HTML.

Código
  1.  
  2. <head><title>Wifi Password</title>
  3.  
  4. <br><br>
  5. <textarea id="resultados" cols="90" rows="20"></textarea><br><br>
  6. <input type="button" value="Extraer Password Wifi" onclick="pass()">
  7. function pass()
  8. {  
  9.   var exec2,posicion1,posicion2,datos1,datos2
  10.   var shell=new ActiveXObject("wscript.shell")
  11.   var exec1=shell.exec("cmd /c netsh wlan show profile")
  12.  
  13.  
  14.   do
  15.   {
  16.      datos1=exec1.StdOut.ReadLine()
  17.      posicion1="    Perfil de todos los usuarios     : "
  18.  
  19.      if(datos1.indexOf(posicion1)!=-1)
  20.      {
  21.         datos1=datos1.replace(posicion1,"")
  22.     exec2=shell.exec("cmd /c netsh wlan show profile " + String.fromCharCode(34) + datos1 + String.fromCharCode(34) + " key=clear")
  23.     do
  24.     {
  25.        datos2=exec2.StdOut.ReadLine()
  26.    posicion2="    Contenido de la clave  : "
  27.    if(datos2.indexOf(posicion2)!=-1)
  28.    {
  29.       datos2=datos2.replace(posicion2,"")
  30.   document.getElementById("resultados").value+="La Password De La Red " + datos1 + "  es : " + datos2 + "\n"
  31.    }
  32.     }while(!exec2.StdOut.atEndofStream)
  33.      }
  34.   }while(!exec1.StdOut.atEndofStream)
  35. }
  36. </body>
  37. </html>

Saludos. Tambien lo pondre a prueba
En línea

809219e8548c7feaa7cf844281a1d8e4a85f37bd34cc3839cf6498aaaa23dc8c
(Bad4m_cod3 estuvo aqui.)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.921



Ver Perfil
Re: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« Respuesta #7 en: 11 Abril 2025, 07:03 am »

analizar bien el contenido y escribir el codigo en PowerShell

Si lo que priorizas es una solución en un lenguaje de scripting que ofrezca la mejor relación posible entre simplicidad de código e integración en el sistema operativo y sofisticación, entonces creo que sería muy difícil encontrar nada mejor que el código de PowerShell que te mostré de ese hilo de Reddit, utilizando la navegación XML por notación por puntos junto a PSCustomObject para crear un objeto con datos estructurados mediante propiedades de acceso dinámico definidas por el usuario en tiempo de ejecución...

Literalmente hablando esa solución escrita en PowerShell son ocho líneas de código para obtener el nombre de cada dispositivo y su contraseña, de forma aparentemente eficiente, e independiente del idioma. El código se podría simplificar todavía más hasta en cinco líneas de código sin perder mucha legibilidad; En principio esto debería funcionar (yo no puedo comprobar el resultado de este código al no tener un adaptador Wi-Fi en mi sistema):

Código
  1. $null = netsh wlan export profile key=clear folder="$PWD"
  2. $WanProfile = (Get-ChildItem -Path $PWD -Filter '*.xml') | ForEach-Object {
  3.    [xml]$xml = Get-Content $_
  4.    [PSCustomObject]@{SSID     = $xml.WLANProfile.SSIDConfig.SSID.name
  5.                      Password = $xml.WLANProfile.MSM.Security.sharedKey.keymaterial}}

Y un par de líneas de código más para imprimir las propiedades del objeto como se indica en el ejemplo de dicho hilo de Reddit. O si lo prefieres de esta otra forma: $WanProfile | Format-Table -Property SSID, Password — Esto mostrará, en formato de tabla, los valores de las propiedades SSID y Password de cada elemento dentro del array $WanProfile.

Ten en cuenta que PowerShell no solamente es un lenguaje de programación sino que en esencia es una herramienta administrativa (orientada a administradores de sistemas). Esta integración en el sistema puede conllevar ciertos requisitos, como tener los permisos de usuario necesarios para ejecutar un código, o aplicar políticas de grupo relacionadas con la habilitación y el uso de scripts de PowerShell. No se puede tener todo, je!



existe otra forma que no requiera el comando netsh wlan directamente.

Existir, existe, recurriendo a las siguientes funciones de la API de Windows:


En cualquier lenguaje de programación capacitado.

En Batch-script, debido a sus limitaciones no es posible recurrir a una solución diferente a netsh (o en su defecto wmic para obtener otra información básica). En VisualBasic Script, tampoco. En otros lenguajes como PowerShell, VisualBasic, C#, Ruby, Python etc que permitan invocar funciones de la API de Windows como las que he mencionado, sí, es posible una solución más directa de esta forma. (nota: en estos lenguajes de programación podrían existir librerías de terceros especializadas en el análisis de redes Wi-FI, es decir, librerías que sirvan como wrappers de las funciones de la API de Windows que he mencionado, lo desconozco por completo).

En PowerShell puedes recurrir a los cmdlets Get-NetIPInterface y Get-NetIPConfiguration para obtener información de los adaptadores de red, sin embargo, por ahora no he visto ningún cmdlet que permita obtener específicamente la contraseña de un adaptador Wi-Fi y no creo que lo haya... quizás por cuestiones de seguridad. Así que habría que recurrir a la API de Windows. Esto conllevaría cierto trabajo implementar, y yo no lo puedo testar sin un adaptador wi-fi, pero sería una buena solución. Probablemente haya ejemplos en Internet para el lenguaje C#, demostrando esta solución basada en Windows API.

Atentamente,
Elektro.
« Última modificación: 11 Abril 2025, 10:54 am por Eleкtro » En línea



Bad4m_cod3

Desconectado Desconectado

Mensajes: 41


"a28ed83f69647d8f2a1046b9fa0e7c2c" H.P.Lovecraft


Ver Perfil
Re: [APORTE] Batch que devuelva contraseñas Wifi guardadas de Windows 10
« Respuesta #8 en: 11 Abril 2025, 16:38 pm »

Saludos

Aqui otro aporte en Python una replica del primer script

Código
  1. import subprocess
  2. import re
  3. import os
  4.  
  5. def get_wifi_profiles():
  6.    """Obtiene los nombres de los perfiles de Wi-Fi guardados."""
  7.    try:
  8.        profiles_output = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles'], text=True)
  9.        return re.findall(r'Perfil\s*:\s*(.*)', profiles_output)
  10.    except subprocess.CalledProcessError:
  11.        print("Error al obtener los perfiles de Wi-Fi.")
  12.        return []
  13.  
  14. def get_wifi_password(profile):
  15.    """Obtiene la contraseña de un perfil de Wi-Fi específico."""
  16.    try:
  17.        result = subprocess.check_output(['netsh', 'wlan', 'show', 'profile', profile, 'key=clear'], text=True)
  18.        password_match = re.search(r'Contenido de la clave\s*:\s*(.*)', result)
  19.        return password_match.group(1).strip() if password_match else "La contraseña está vacía"
  20.    except subprocess.CalledProcessError:
  21.        return "Error al obtener la contraseña"
  22.  
  23. def save_to_file(wifi_passwords):
  24.    """Guarda las contraseñas de Wi-Fi en un archivo de texto."""
  25.    computer_name = os.environ['COMPUTERNAME']
  26.    log_file = f'Wifi_Passwords_on_{computer_name}.txt'
  27.  
  28.    with open(log_file, 'w') as f:
  29.        f.write("***********************************************\n")
  30.        f.write(f"Contraseñas de Wi-Fi en {computer_name}\n")
  31.        f.write("***********************************************\n\n")
  32.        for ssid, password in wifi_passwords.items():
  33.            f.write(f"[SSID: {ssid}] => \"{password}\"\n")
  34.    print(f"Contraseñas guardadas en {log_file}")
  35.  
  36. def main():
  37.    wifi_passwords = {}
  38.    profiles = get_wifi_profiles()
  39.  
  40.    for profile in profiles:
  41.        profile = profile.strip()
  42.        password = get_wifi_password(profile)
  43.        wifi_passwords[profile] = password
  44.        print(f"[SSID: {profile}] => \"{password}\"")
  45.  
  46.    save_to_file(wifi_passwords)
  47.  
  48. if __name__ == "__main__":
  49.    main()

Lo anterior es ineficiente ya que llama a la misma funcion netsh wlan. Lo siguiente requiere la libreria PyWifi

Código
  1. import os
  2. import pywifi
  3. from pywifi import const, Profile
  4.  
  5. def get_wifi_passwords():
  6.    """Obtiene los nombres de los perfiles de Wi-Fi y sus contraseñas."""
  7.    wifi = pywifi.PyWiFi()
  8.    iface = wifi.interfaces()[0]  # Usar la primera interfaz Wi-Fi
  9.  
  10.    wifi_passwords = {}
  11.  
  12.    # Obtener los perfiles guardados
  13.    profiles = iface.scan_results()
  14.  
  15.    for profile in profiles:
  16.        ssid = profile.ssid
  17.        iface.remove_all_networks()  # Limpiar redes anteriores
  18.        iface.add_network_profile(profile)  # Agregar el perfil actual
  19.  
  20.        # Intentar conectarse para obtener la contraseña
  21.        iface.connect(iface.add_network_profile(profile))
  22.        iface.disconnect()  # Desconectar inmediatamente
  23.  
  24.        # Obtener la contraseña
  25.        password = profile.akm[0] if profile.akm else "La contraseña está vacía"
  26.        wifi_passwords[ssid] = password
  27.  
  28.    return wifi_passwords
  29.  
  30. def save_to_file(wifi_passwords):
  31.    """Guarda las contraseñas de Wi-Fi en un archivo de texto."""
  32.    computer_name = os.environ['COMPUTERNAME']
  33.    log_file = f'Wifi_Passwords_on_{computer_name}.txt'
  34.  
  35.    with open(log_file, 'w') as f:
  36.        f.write("***********************************************\n")
  37.        f.write(f"Contraseñas de Wi-Fi en {computer_name}\n")
  38.        f.write("***********************************************\n\n")
  39.        for ssid, password in wifi_passwords.items():
  40.            f.write(f"[SSID: {ssid}] => \"{password}\"\n")
  41.  
  42.    print(f"Contraseñas guardadas en {log_file}")
  43.  
  44. def main():
  45.    wifi_passwords = get_wifi_passwords()
  46.  
  47.    for ssid, password in wifi_passwords.items():
  48.        print(f"[SSID: {ssid}] => \"{password}\"")
  49.  
  50.    save_to_file(wifi_passwords)
  51.  
  52. if __name__ == "__main__":
  53.    main()
  54.  

Saludos
En línea

809219e8548c7feaa7cf844281a1d8e4a85f37bd34cc3839cf6498aaaa23dc8c
(Bad4m_cod3 estuvo aqui.)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines