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


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 ... 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 [590] 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 ... 1254
5891  Programación / .NET (C#, VB.NET, ASP) / Re: problema con split y webrequest en: 3 Marzo 2015, 09:53 am
Hay muchas, pero muchísimas cosas inapropiadas en el código fuente que has compartido.





1.
El textbox de tu aplicación está limitado a 32.767 caracteres (Int16), no sirve de mucho si intentas cargar una lista de passwords personalizada.

De hecho no es ninguna buena idea intentar mostrar una lista entera de passwords en el layout de un control, por que se hace muy pesado con listas largas, y esto limitará mucho tu aplicación, pero bueno, puedes aumentar el límite al máximo permitido de esta manera:
Código
  1. Me.TextBox1.MaxLength = Integer.MaxValue





2.
Citar
Código
  1.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  2.        Dim fic As String = System.AppDomain.CurrentDomain.BaseDirectory.ToString & "diccionario.lst"
  3.        Dim sr1 As New System.IO.StreamReader(fic)
  4.        Dim texto As String
  5.  
  6.        TextBox3.Text = fic
  7.        Label1.Text = ""
  8.        texto = sr1.ReadToEnd()
  9.        sr1.Close()
  10.        TextBox1.Text = texto
  11.  
  12.    End Sub

Primero lees el archivo que almacena las combinaciones en la variable texto, luego pasas el valor de la variable a la lógica de un textbox, y por último, en otra parte del código, interactuas con el texto contenido en el TextBox para procesar cada linea de passwords.

¿te das cuenta de lo inapropiado que resulta hacer todo eso, si por ejemplo la lista de passwords fuese de +100.000?, supone una disminuición de rendimiento tanto por la sobre-carga/saturación del textbox como por el tiempo de ejecución que consumes al partir el texto del textbox por cada uno de los passwords que haya escrito, no hay necesidad de realizar tantas operaciones ni hacerlo de esa manera.

He modificado el código para estructuarlo mejor y otras mejoras de rendimiento:

Código
  1.    Private passFilepath As String = Path.Combine(Application.StartupPath, "diccionario.lst")
  2.    Private passwordList As IEnumerable(Of String)
  3.  
  4.    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
  5.    Handles MyBase.Load
  6.  
  7.        Me.LoadDefaults()
  8.  
  9.    End Sub
  10.  
  11.    Private Sub LoadDefaults()
  12.  
  13.        Me.Label1.ResetText()
  14.        Me.tb_PassFilepath.Text = Me.passFilepath
  15.  
  16.        Try
  17.            Me.passwordList = Me.GetPasswordList(Me.passFilepath)
  18.  
  19.        Catch ex As Exception
  20.            Throw
  21.  
  22.        End Try
  23.  
  24.        With Me.tb_PasswordList
  25.            .MaxLength = Integer.MaxValue
  26.            .SuspendLayout()
  27.            .Text = String.Join(ControlChars.NewLine, Me.passwordList)
  28.            .ResumeLayout()
  29.        End With
  30.  
  31.    End Sub
  32.  
  33.    ''' <summary>
  34.    ''' Gets the password list.
  35.    ''' </summary>
  36.    ''' <param name="passFilepath">The passwords filepath.</param>
  37.    ''' <returns>IEnumerable(Of System.String).</returns>
  38.    Private Iterator Function GetPasswordList(ByVal passFilepath As String) As IEnumerable(Of String)
  39.  
  40.        Using sr As New StreamReader(passFilepath, Encoding.Default)
  41.  
  42.            Do Until sr.EndOfStream
  43.                Yield sr.ReadLine
  44.            Loop
  45.  
  46.        End Using
  47.  
  48.    End Function

Nota: te recuerdo que el textbox está LIMITADO, así que en la práctica real no sirve con niguna lista de passwords de las que se suelen utilizar para un ataque de este tipo, utiliza la variable de la colección de passwords, que tiene una muy mayor capacidad.





3.
El método Application.DoEvents() no cumple la misma funcionalidad que en VB6, y en VB.Net se suele utilizar (o mejor dicho se suele recurrir cómo último recurso a su utilización) para evitar cuelgues (detenciones) en el hilo del Form debido a un mal diseño de la aplicación por parte del programador, pero en tu caso ni siquiera necesitas recurrir a su utilización por que no estás desarrollando una aplicación multi-threading, ¿por qué lo utilizas?, no lo hagas, sea por el motivo que sea, puedes solucionarlo debidamente.





4.
Saca todas las requests fuera de los event-handlers, TODAS, sacalas, y añadelas en distintos métodos que cumplan sus distintas funcionalidades, es horrible tal y cómo está.
Además estás accediendo continuamente a las propiedades .Text de los contorles, no lo hagas, inicializa las variables necesarias para asignar esos valores y usa esas variables.

Hay que intentar separar los Datos, de la UI, pero los programadores de WinForms no solemos hacernos una idea muy clara de este concepto debido a la propia naturaleza de la tecnología WinForms y los malos hábitos de programación que ello supone.





5.
Elimina las importaciones de estos namespaces, no los estás utilizando:
Código
  1. Imports System.ComponentModel
  2. Imports System.Data




6.
Cita de: Source-code
Código
  1.    Public Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
  2.  
  3.        If File.Exists(tb_PassFilepath.Text) Then
  4.            ' ...
  5.            sText = Split(tb_PasswordList.Text, vbCrLf)
  6.            textBox_pass.Text = sText(i)
  7.            ' ...
  8.            Dim request As HttpWebRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest)
  9.            ' ...
  10.            If DirectCast(response, HttpWebResponse).StatusCode = HttpStatusCode.Redirect Then
  11.                ' ...
  12.            Else
  13.                i += 1
  14.                ' ...
  15.                button1.PerformClick()
  16.            End If
  17.  
  18.        Else
  19.            ' ...
  20.        End If
  21.  
  22.    End Sub
  23.  

Esa es la parte más problemática del código y por la que has formulado tu duda.

Al leer y analizar esa parte del código simplemente no podia creerme lo que estaba viendo, si no recuerdo mal vienes de VB6 y eso significa que sabes perfectamente como desarrollar un búcle normal y corriente para iterar la colección de passwords, pero en lugar de eso has preferido recurrir a la manera más rebuscada que yo he visto para llevar a cabo una operación repetitiva, interactuando innecesariamente con la UI (con el botón) y partiendo el texto del textbox de manera continua, ¡muy mal!.

Realmente tienes que tratar de modificar (mejorar) toda la lógica que estás empleando en el desarrollo de la aplicación, de todo el código.

Te muestro un ejemplo de cómo podrías estructurarlo:

Código
  1.    Public Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
  2.    Handles button1.Click
  3.  
  4.        Me.TestPasswordList(Me.passwordList)
  5.  
  6.    End Sub
  7.  
  8.    Private Sub TestPasswordList(ByVal passwordList As IEnumerable(Of String))
  9.  
  10.        Dim cookies As CookieContainer = Nothing
  11.  
  12.        For Each password As String In passwordList
  13.  
  14.            If Me.TestPassword(password, cookies) Then
  15.                Me.ReportSuccessPassword(password)
  16.                Exit Sub
  17.            End If
  18.  
  19.        Next password
  20.  
  21.        Me.ReportFailedPassword()
  22.  
  23.    End Sub
  24.  
  25.    ''' <summary>
  26.    ''' Tests the current password.
  27.    ''' </summary>
  28.    ''' <param name="password">The password.</param>
  29.    ''' <param name="cookies">The byreferred cookie container.</param>
  30.    ''' <returns><c>true</c> if password successful, <c>false</c> otherwise.</returns>
  31.    Private Function TestPassword(ByVal password As String,
  32.                                  ByRef cookies As CookieContainer) As Boolean
  33.  
  34.        ' tus llamadas a los métodos de las querys para testear el password actual, aquí.
  35.        Me.SetCookies(cookies)
  36.        Dim response As HttpWebResponse = Me.GetLoginResponse(cookies)
  37.        ' etc...
  38.  
  39.        Return (response.StatusCode = HttpStatusCode.Redirect)
  40.  
  41.    End Function
  42.  
  43.    Private Sub SetCookies(ByRef cookies As CookieContainer)
  44.  
  45.        If cookies Is Nothing Then
  46.            cookies = New CookieContainer
  47.            ' tu query para setear el contenedor de cookies aquí.
  48.        Else
  49.            ' salgo, dando por hecho que la sesión de la cookie no haya expirado.
  50.            Exit Sub
  51.        End If
  52.  
  53.    End Sub
  54.  
  55.    Private Function GetLoginResponse(ByVal cookies As CookieContainer) As HttpWebResponse
  56.  
  57.        ' tu query POST de login aquí.
  58.        Return DirectCast(response, HttpWebResponse)
  59.  
  60.    End Function
  61.  
  62.    Private Sub ReportSuccessPassword(ByVal password As String)
  63.  
  64.        MessageBox.Show(String.Format("Contraseña aceptada: ""{0}""", password), Me.Text,
  65.                        MessageBoxButtons.OK, MessageBoxIcon.Information)
  66.  
  67.    End Sub
  68.  
  69.    Private Sub ReportFailedPassword()
  70.  
  71.        MessageBox.Show("Ninguna contraseña aceptada.", Me.Text,
  72.                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  73.  
  74.    End Sub





7.
Me pregunto si las peticiones que haces realmente servirán para algo puesto que FaceBook, al igual que cualquier otro servicio tan popular, tiene un límite de intentos de login y suelen hacer bloqueos del usuario (no basados en la ip que efectua el intento).

Por ende, si no me equivoco, yo imagino (no lo he testeado) que en algún momento el "ataque" no servirá practicamente para nada, puesto que a partir de aquí, desgraciadamente todo dejaría de ser útil tras llegar al límite de intentos del servicio:
Código
  1. Dim loginURL As String = "https://www.facebook.com/login.php?login_attempt=1"
  2. request...
  3. response...

PD: Hay bastantes cosas más en el source que necesitarían un arreglo, pero me ahorro los comentarios porque no quiero abusar xD y también por que son fallos menos relevantes que no afectan al core.

Saludos!
5892  Programación / .NET (C#, VB.NET, ASP) / Re: Error de Compilacion (No me toma SelectedItem de DropDownList) en: 3 Marzo 2015, 06:11 am
El error es self-explanatory, se explica por si mismo, no puedes convertir un ListItem (es decir, el Item seleccionado de un DropDownList) a un Control de tipo DropDownList, no tiene sentido.

No manejo ASP.Net, pero el problema es sencillo de entender y corregir, prueba así:
Código
  1. ListItem currentItem = ((DropDownList)sender).SelectedItem;
  2.  
  3. ViewState["idNombre"] = Convert.ToInt32(currentItem);

PD: La próxima vez trata de publicar bien el código... la mitad de los keywords estaban pegados los unos a los otros y no se entendia.

Saludos
5893  Programación / Programación General / MOVIDO: Alguien me explica este codigo en: 3 Marzo 2015, 02:05 am
El tema ha sido movido a Programación C/C++.

http://foro.elhacker.net/index.php?topic=431059.0
5894  Foros Generales / Sugerencias y dudas sobre el Foro / Re: No se si se podrá pero yo lo pensé IRC en: 3 Marzo 2015, 00:15 am
Estoy deacuerdo con WHK, pero por otro lado creo que los usuarios son más que conscientes de que la ayuda ofrecida en un chat, en la mayoría de los casos no será tan cualificada cómo el hecho de crear un post y que lo puedan ver cientos de personas para poder darte distintos enfoques al problema que tengas, además, hay que tener en cuenta que el foro también está para publicar aportes, etc, no solo para pedir y pedir aunque muchos no se hayan enterado todavía de ese pequeño detalle (lo digo por los usuarios que se limiten a pedir).

Creo que para evitar lo que comenta WHK, simplemente se podrían imponer una especie de normas (ej: 'Usar el chat para divertirse, y el foro para formular dudas'), y banear del chat a aquellos que las incumpliesen, no entiendo de SMF pero creo que se podrá hacer algo así y ya me imagino que los baneos no serían muy efectivos pero se banearía sin cesar a cualquier reincidente, ¿no os parece bien?.

Al menos se podría probar la idea, para ver que tal funciona y si aporta beneficios o todo lo contrario, tampoco sería un cambio muy grande en el que te la juegas a todo o nada... siempre se puede recular xD.

Saludos!
5895  Programación / .NET (C#, VB.NET, ASP) / Re: Cómo hago una búsqueda inteligente con una sentencia sql y en c#? en: 3 Marzo 2015, 00:05 am
Para llevar a cabo querys complejas y muy selectivas en las que, literalmente te pierdes, puedes hecharle mano a ciertas extensiones que se integran en la IDE de VisualStudio y te hacen practicamente todo el trabajo sucio, este tipo de característica se conoce con el intuitivo nombre de SQL Query Builder.

Una aplicación opensource:
SQLeo Visual Query Builder

Una aplicación comercial excelente:
Active Query Builder .NET WinForms Edition

Y otra aplicación comercial en la que es facil encontrar el crack (solo añado el dato, ya que no está permitido pedir o publicar cracks en el foro):
DbSchema
http://www.youtube.com/watch?v=fXPAC9l5ZPo

Espero que te sirva de algo,
Saludos
5896  Programación / .NET (C#, VB.NET, ASP) / Re: Archivo .bat sincronizado con barra de estado en visual bacic.net en: 2 Marzo 2015, 22:57 pm
Sigue este consejo: Olvida completamente Batch, y también el uso de aplicaciones externas commandline en la medida de lo posible, jeje.

Con el ejemplo que te he mostrado, primero deberás comprobar si el formato que le dí a las cadenas es la correcta para tí, y podrás leer la salida del proceso 'pgdump.exe', ya a apartir de ahí implementar una ProgressBar es cosa tuya, por que para llevarlo a cabo se requiere leer la salida estándar del proceso (en el event-handler 'PGprocess_OutputDataReceived') y realizar las estimaciones necesarias teniendo en cuenta que dicho programa muestre algún indicador de progreso, claro está, ya sea un porcentaje o la cantidad de archivos copiados y restantes.

Si el proceso no muestra ese tipo de información entonces solo puedes crear una barra de progreso con progreso indeterminado, y esperar a que el la instancia del proceso envie el evento de terminación del proceso (event-handler 'PGprocess_Exited')

Código
  1.        With Me.ProgressBar1
  2.            .Style = ProgressBarStyle.Marquee
  3.            .MarqueeAnimationSpeed = 50
  4.        End With

EDITO: Se me ocurre una cosa viable, si conoces la cantidad de archivos a copiar y su ubicación, entonces podrías calcular el porcentaje de la barra de progreso leyendo los bytes totales de los archivos de origen, y los bytes que se han copiado en el directorio destino.
Puedes utilizar la class FileInfo para leer el tamaño de bytes de un archivo.

Saludos
5897  Programación / .NET (C#, VB.NET, ASP) / Re: Archivo .bat sincronizado con barra de estado en visual bacic.net en: 2 Marzo 2015, 22:37 pm
¿y donde está el código de VB.Net?, aquí no hacemos tareas.

Además desconocemos la salida de dicho proceso "pgdump", y se te han dado indicaciones de lo que debes hacer.

De todas formas te muestro un extenso ejemplo sobre cómo traducir ese batch-script a VB.Net, y cómo leer la salida normal/error de dicho proceso, de forma asíncrona:

Código
  1. Imports System.Globalization
  2. Imports System.IO
  3. Imports System.Text
  4.  
  5. Public Class TestForm
  6.  
  7.    ReadOnly backupDirDateFormat As String =
  8.        Date.Today.ToString("yyyy\\MM\\ddMMyyyy", CultureInfo.InvariantCulture)
  9.  
  10.    ReadOnly dbFilenameDateFormat As String =
  11.        Date.Now.ToString("ddMMyyyy_HH\H\Hmm\M\M", CultureInfo.InvariantCulture)
  12.  
  13.    ReadOnly sourceDir As String = "D:\ruta\backup"
  14.    ReadOnly backupDir As String = Path.Combine(Me.sourceDir, Me.backupDirDateFormat)
  15.    ReadOnly dbSrcFilepath As String = Path.Combine(Me.backupDir, String.Format("basede datos-{0}.backup", Me.dbFilenameDateFormat))
  16.    ReadOnly dbDstFilepath As String = Path.Combine(Application.StartupPath, "Nombre del backup")
  17.  
  18.    ReadOnly pgFilepath As String = "C:\Archivos de programa\PostgreSQL\9.3\bin\pg_dump.exe"
  19.    ReadOnly pgPassword As String = String.Empty
  20.    ReadOnly pgArgsFormat As String =
  21.        <a>--host "localhost" --port "5432" --username "siscolsi" --format "custom" --blobs --verbose --file "{0}" "{1}"</a>.Value
  22.  
  23.    Private WithEvents pgProcess As New Process With
  24.        {
  25.            .EnableRaisingEvents = True,
  26.            .StartInfo = New ProcessStartInfo With
  27.                         {
  28.                             .FileName = Me.pgFilepath,
  29.                             .Arguments = String.Format(Me.pgArgsFormat, Me.dbSrcFilepath, Me.dbDstFilepath),
  30.                             .CreateNoWindow = False,
  31.                             .RedirectStandardError = True,
  32.                             .RedirectStandardOutput = True,
  33.                             .StandardErrorEncoding = Encoding.Default,
  34.                             .StandardOutputEncoding = Encoding.Default,
  35.                             .UseShellExecute = False,
  36.                             .WindowStyle = ProcessWindowStyle.Hidden,
  37.                             .WorkingDirectory = Application.StartupPath
  38.                         }
  39.        }
  40.  
  41.    Private Sub TestForm_Load() _
  42.    Handles MyBase.Load
  43.  
  44.        If Not Directory.Exists(Me.sourceDir) Then
  45.            Try
  46.                Directory.CreateDirectory(Me.sourceDir)
  47.  
  48.            Catch ex As Exception
  49.                Throw
  50.  
  51.            End Try
  52.        End If
  53.  
  54.        With Me.pgProcess
  55.            .Start()
  56.            .BeginOutputReadLine()
  57.            .BeginErrorReadLine()
  58.            ' .WaitForExit(milliseconds:=0)
  59.            .WaitForExit()
  60.        End With
  61.  
  62.    End Sub
  63.  
  64.    Private Sub PGprocess_OutputDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) _
  65.    Handles pgProcess.OutputDataReceived
  66.  
  67.        If Not String.IsNullOrEmpty(e.Data) Then
  68.            Debug.WriteLine(String.Format("out: {0}", e.Data))
  69.        End If
  70.  
  71.    End Sub
  72.  
  73.    Private Sub PGprocess_ErrorDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) _
  74.    Handles pgProcess.ErrorDataReceived
  75.  
  76.        If Not String.IsNullOrEmpty(e.Data) Then
  77.            Debug.WriteLine(String.Format("err: {0}", e.Data))
  78.        End If
  79.  
  80.    End Sub
  81.  
  82.    Private Sub PGprocess_Exited(ByVal sender As Object, ByVal e As EventArgs) _
  83.    Handles pgProcess.Exited
  84.  
  85.        Debug.Print(String.Format("Process exited at {0}", Date.Now.ToShortTimeString))
  86.  
  87.    End Sub
  88.  
  89. End Class

Lee un poco sobre la class Process, y técnicas de IPC en .Net.

Saludos.
5898  Programación / .NET (C#, VB.NET, ASP) / Re: Archivo .bat sincronizado con barra de estado en visual bacic.net en: 2 Marzo 2015, 21:20 pm
Buenas

El planteamiento de la aplicación es incorrecta, ya que estás utilizando una herramienta simple de procesamiento por lotes desde un lenguaje de alto nivel.

1. Puedes hacer TODO lo que puedas hacer en Batch, utilizando puro código .Net.

2. Para implementar una barra de progreso a un proceso externo, en este caso CMD, debes utilizar técnicas de IPC (inter-process comunication) para leer el stream de salida de la CMD y tomar como referencia algún indicador que sirva para estimar el porcentaje de progresión.

El caso es que formulas una duda donde está implicado un código Batch pero ni siquiera muestras el contenido del Batch-Script ¿?,
Si en la consola no se muestra ningún tipo de indicador (1%...100% / 1 de 100) entonces olvídate de poder implementar una barra de progreso en tu aplicación de escritorio, a menos que no te importe utilizar una barra de progreso de estado indeterminado (sin mínimo, ni máximo).

Saludos
5899  Programación / Scripting / MOVIDO: Archivo .bat sincronizado con barra de estado en visual bacic.net en: 2 Marzo 2015, 21:13 pm
El tema ha sido movido a .NET.

http://foro.elhacker.net/index.php?topic=431039.0
5900  Sistemas Operativos / Windows / Re: Exportar maquina virtual. en: 2 Marzo 2015, 04:50 am
Mi pregunta es: Para que sirve el "exportar una maquina" si copiando la carpeta donde esta la maquina virtual es mas rapido y eficaz?

¿Por qué CCleaner tiene una opción para vacíar la papelera, si podemos eliminar la carpeta de la papelera y es más rápido?.

VMWare/VBox son aplicaciones para administrar máquinas virtuales, ¿cómo esperas que no tengan características de importación/exportación?, usemos un poco más la lógica, la pregunta que has formulado no tiene ningún sentido en mi opinión,
simplemente las aplicaciones profesionales ofrecen características para automatizar tareas, además, estás aplicaciones están pensadas para usuarios de todos los niveles, no todos van a conocer la ubicación del directorio de las VM, ni darán por hecho que puedan copiar/pegar la carpeta de una VM directamente, recurriran a la aplicación para que les haga dicha tarea, ya que cómo ya he dicho, es una característica de automatización.

Yo también siempre copio las VM directamente, pero si dices que la característica de exportar tarda más (considerablemente más, me imagino) entonces puede ser algo muy comprensible, ya que probablemente VVMWare/VBox hagan un análisis del estado de la VM antes o durante el copiado/exportación, pero si quieres conocer más detalles en profundidad sobre dicha operación de exportación... ¿por que no le formulas esa misma pregunta al soporte de VMWare/VBox?.

Saludos!
Páginas: 1 ... 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 [590] 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 ... 1254
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines