Título: threads crash riched20.dll vb net Publicado por: asdexiva en 9 Marzo 2019, 05:21 am 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
Código: Imports System.IO Título: Re: threads crash riched20.dll vb net Publicado por: Eleкtro en 9 Marzo 2019, 09:51 am 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. 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
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
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. |