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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  problema con split y webrequest
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con split y webrequest  (Leído 2,850 veces)
snakeboy8

Desconectado Desconectado

Mensajes: 30



Ver Perfil
problema con split y webrequest
« en: 3 Marzo 2015, 03:51 am »

Hola pues bien tengo un problema cada que uso system.net.sockets o webrequest no puedo hacer split correctamente no se por que

la aplicacion es un password tester para un sitio web algo asi como el brutus pero mejor :xD

keria publicar el source una ves terminado pero no he podido terminarlo por este gran detalle aca dejo el source

http://www11.zippyshare.com/v/eZ033mRO/file.html

solo keria añadir que el login funciona bien el problema es que o solo me funciona el split o bien solo funciona el login no funcionan parejo

esto ya me paso antes con otro proyecto y opte por usar winsock y todo funciono muy bien pero ahora el problema con este otro proyecto es que este sitio a donde conecta no admite sockets y tengo que usar webrequest

gracias


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: problema con split y webrequest
« Respuesta #1 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!


« Última modificación: 3 Marzo 2015, 15:44 pm por Eleкtro » En línea

snakeboy8

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: problema con split y webrequest
« Respuesta #2 en: 3 Marzo 2015, 16:58 pm »

gracias amigo es bueno ver criticas a mi codigo
si nadie me critica o me aconseja nunca podre cambiar rapido
definitivamente estructuraste mejor el codigo que como yo lo tenia

hay cosas que igual no sabia como lo de application.doevents

igual creo que no hay limite maximo de intentos de login por que ya lo vi en un programa que se llama brutus

igual yo veo que te la rifas bien fuerte programando yo me pregunto si en una empresa te exigen programar tan rapido como tu?

claro para una empresa mientras mas rapido mejor (se ahorran dinero y les das mas productividad)

pero realmente eso exige una empresa?
asi de rapido programa el programador promedio? o masomenos

yo supongo que alguien recien salido de la universidad no programa tan rapido

he visto videos de las practicas que hacen los que estan estudiando en la universidad y apenas saben que hacer (no todos aclaro)
« Última modificación: 3 Marzo 2015, 17:23 pm por darky666 » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: problema con split y webrequest
« Respuesta #3 en: 3 Marzo 2015, 18:07 pm »

gracias amigo es bueno ver criticas a mi codigo
si nadie me critica o me aconseja nunca podre cambiar rapido
definitivamente estructuraste mejor el codigo que como yo lo tenia

a veces puedo resultar un poco borde o cascarabias (inconscientemente pretendo que todo el mundo haga las cosas dentro de un margen que yo considere 'bien hecho' xD) pero no me lo tengas muy en cuenta, espero que darte cuenta de esos pequeños fallos en el source te ayude a optimizar el código y/o aprender algo más que no supieras.


igual yo veo que te la rifas bien fuerte programando yo me pregunto si en una empresa te exigen programar tan rapido como tu?

claro para una empresa mientras mas rapido mejor (se ahorran dinero y les das mas productividad)

pero realmente eso exige una empresa?
asi de rapido programa el programador promedio? o masomenos

yo supongo que alguien recien salido de la universidad no programa tan rapido

he visto videos de las practicas que hacen los que estan estudiando en la universidad y apenas saben que hacer (no todos aclaro)

¿A que te refieres con "rápido"?, si te parecí rápido en analizar el source y escribir unas cuantas lineas de código fue simplemente porque estoy habituado a manejar el lenguaje, y cuando estás habituado la comprensión y el desarrollo de cosas básicas es tan rápido como parpadear, no soy el único al que le pasa, vaya xD.

Por si te sirve de algo saberlo, conocer y saber manejar adecuadamente las características de la IDE de VisualStudio (ej: auto-completado) aumenta considerablemente el rendimiento (disminuye el tiempo de escritura),
y si el código lo hubiese elaborado para el desarrollo de una aplicación mía, entonces me habría tomado más tiempo, porque cuidaría mucho más ciertos detalles que no tengo en cuenta a la hora de publicar códigos que son solo para resolver problemas o dudas especificas.

Sobre los requisitos de las empresas, no puedo resolver tu duda con certeza porque en las empresas que he trabajado mi oficio no era desarrollar software ni tampoco estaban relacionadas con eso, no he tenido esa suerte ya que mi aprendizaje fue auto-didacta (y sigue siendo, que en .Net cada día se aprende algo nuevo), pero obviamente imagino que en las empresas dedicadas a esto, evaluarán y tendrán muy en cuenta el rendimiento de sus trabajadores, cómo el tiempo de entrega de los proyectos, del mismo modo que los detalles de elaboración del código.

Un saludo!
En línea

snakeboy8

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: problema con split y webrequest
« Respuesta #4 en: 4 Marzo 2015, 12:13 pm »

si es cierto depende del conocimiento es a la velocidad a la que uno va a programar ogial los snippets ayudan en algo

yo igual programo algo rapido jaja xd el problema es que con cada aplicacion nueva que hago desde cero simpre tengo algun problema y tengo que investigar algo y aveces me lleva todo un dia rosolverlo

gracias por tus comentarios amigo  :D
« Última modificación: 4 Marzo 2015, 12:17 pm por darky666 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con split
Programación Visual Basic
Thaorius 8 2,328 Último mensaje 29 Noviembre 2005, 22:29 pm
por Thaorius
Problema con Split data
Programación Visual Basic
hepy_92 2 1,570 Último mensaje 16 Mayo 2007, 02:35 am
por hepy_92
¿Qué es un HTTPWEBREQUEST / WEBREQUEST?
.NET (C#, VB.NET, ASP)
avmiitxe 4 4,796 Último mensaje 18 Abril 2012, 17:31 pm
por avmiitxe
enviar datos con WebRequest
.NET (C#, VB.NET, ASP)
s_azazel 8 8,859 Último mensaje 12 Marzo 2014, 21:06 pm
por s_azazel
problema con split « 1 2 »
Java
alex_alex 12 4,689 Último mensaje 23 Mayo 2014, 22:35 pm
por alex_alex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines