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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: [1] 2 3 4
1  Programación / Programación General / Re: ¿Cómo promediar 2 colores? en: Ayer a las 09:39
Debes elevar al cuadrado cada valor RGB, después hacer la media, y luego calcular la raíz cuadrada de cada uno para revertir la primera operación.

Código:
NewColor = sqrt((R1^2+R2^2)/2), sqrt((G1^2+G2^2)/2), sqrt((B1^2+B2^2)/2)

Usando este enfoque, al elevar al cuadrado los componentes RGB antes de promediar, estamos aplicando un tipo de "ponderación" que favorece los valores más altos y minimiza el efecto de los valores más bajos. Esto es útil porque los valores RGB cuadrados preservan mejor las diferencias perceptuales entre los colores originales.
2  Programación / .NET (C#, VB.NET, ASP) / Re: Sugerencias para GUI en aplicación sniffer MDB en: 6 Enero 2024, 14:42 pm
Wow, ¡qué bien se ve! Muchas gracias, estaba buscando algo así.
3  Programación / .NET (C#, VB.NET, ASP) / Sugerencias para GUI en aplicación sniffer MDB en: 4 Enero 2024, 10:17 am
Actualmente estoy inmerso en el desarrollo de una aplicación que realiza el seguimiento del tráfico MDB/ICP de máquinas expendedoras. Además de exhibir los datagramas, la aplicación ofrece diagnósticos adicionales cuando la máquina cuenta con una terminal TPV.

La aplicación se compone esencialmente de dos partes: el núcleo reside en un microcontrolador que, al conectarse al bus MDB, genera el "paquete de datos" y también imprime en bruto a través de la consola de depuración lo que está capturando. Posteriormente, diseñé una interfaz gráfica de usuario (una aplicación WinForms) que lee la información proporcionada por el micro a través del puerto serie, la almacena en una base de datos SQLite y la presenta en un GridView. Para obtener detalles adicionales, basta con hacer doble clic en la fila correspondiente de la tabla.

He implementado pequeñas funcionalidades, tales como:

    1. La capacidad de filtrar por tipo de periférico (dispositivo sin efectivo, validador de billetes, etc.).
    2. Identificación del estado del dispositivo sin efectivo asociado con cada datagrama, que funciona como una máquina de estados finitos.
    3. Generación de documentos en formato CSV, con funciones tanto para importar como para exportar listas de datos en CSV.
    4. Carga eficiente de datos previamente almacenados desde el archivo .db correspondiente en cada lectura.

Sin embargo, me encuentro en un punto donde agoté mis ideas, y admito que mis habilidades en el diseño de la interfaz de usuario dejan mucho que desear. No me siento satisfecho con la estética de la interfaz actual. Por lo tanto, estoy abierto a nuevas sugerencias para mejorar la funcionalidad y hacer que el programa sea más atractivo visualmente. ¿Alguna idea para incorporar nuevas características o mejorar la apariencia de la interfaz?


4  Informática / Hardware / Re: Ordenador no arranca y emite un sonido irreconocible. en: 4 Enero 2024, 09:36 am
¡Has conectado los dispositivos SATA en los puertos 1 y 3! El orden de arranque, de mayor a menor preferencia, es 0, 1, 2 y 3.
Es probable que la placa madre no esté leyendo nada en el puerto 0, lo que provoca un error.


Asimismo, ten en cuenta la versión SATA de tus componentes: los puertos 1 y 0 son compatibles con SATA 1.5/3/6Gb, mientras que los puertos 2 y 3 solo admiten 1.5/3Gb.
Asegúrate de emparejar adecuadamente los dispositivos con los puertos correspondientes para optimizar el rendimiento.



Aquí tienes el manual de usuario de tu placa madre: https://download1.gigabyte.com/Files/Manual/mb_manual_ga-h81m-s1_e.pdf?v=0db7b82329eb98d1f24141154ec3f911
5  Informática / Hardware / Re: Ordenador no arranca y emite un sonido irreconocible. en: 2 Enero 2024, 17:33 pm
¿Has verificado las conexiones? ¿Consideraste desinstalar el nuevo disco duro para confirmar si todo funciona como antes? Me sorprende que menciones que no se carga la BIOS, ya que ésta se almacena en una memoria ROM integrada en la placa madre.

Para restablecer la configuración de la CMOS, puedes extraer la pequeña pila de reloj, esperar unos minutos y luego volver a insertarla.

Si dispones de un multímetro, sería útil medir la tensión en vacío de la fuente de alimentación; debería ser de 12Vdc. ¿Has revisado si hay algún condensador defectuoso? El sonido que compartiste sugiere la posibilidad de un condensador dañado. Aunque generalmente presentan abultamientos, en este caso podría ser menos evidente.

Si es posible, comparte alguna foto o vídeo de la placa y las conexiones para una mejor evaluación.
6  Programación / Programación General / Re: If vs Matemáticas ¿qué es mejor? en: 29 Diciembre 2023, 10:34 am
Matemáticamente hablando, la potenciación es una suma de sumas. No hay manera de resumir esta definición en otros términos. Verás...

Dado un conjunto N+ de números naturales (sin incluir el cero) y el grupo aditivo (N+,+), definimos la potenciación como una operación P:N+×N→N+ de la siguiente manera:

Código:
    1. Para n=0, P(a,0)=1 para cualquier a en N+.
    2. Para n>0, P(a,n)=∑[k=1,n]P(a,n−1).

Esta definición refleja la idea de que P(a,n) es la suma de n términos, cada uno de los cuales es P(a,n−1).

Veamos un ejemplo con esta definición. Consideremos a=2 y n=3.
Código:
P(2,3)=∑[k=1,3]P(2,2)

Entonces, en cada término del sumatorio, tenemos P(2,2):
Código:
P(2,3)=P(2,2)+P(2,2)+P(2,2)

Ahora, aplicamos la definición nuevamente para P(2,2):
Código:
P(2,2)=∑[k=1,2]P(2,1)

Lo que resulta en:
Código:
P(2,3)=P(2,1)+P(2,1)+P(2,1)+P(2,1)+P(2,1)+P(2,1)

Finalmente, aplicamos la definición para P(2,1):
Código:
P(2,1)=∑[k=1,1]P(2,0)

Que da como resultado:
Código:
P(2,3)=P(2,0)+P(2,0)+P(2,0)+P(2,0)+P(2,0)+P(2,0)+P(2,0)+P(2,0)

Y aplicando la definición final para P(2,0):
Código:
P(2,0)=1

Entonces, sumamos 1, 8 veces:
Código:
P(2,3)=1+1+1+1+1+1+1+1=8

Por lo tanto, P(2,3) = 2^3 = 8

Ahora bien, existen algoritmos que te permiten reducir el número de operaciones que debes realizar para calcular la potencia de un número: potenciación rápida. El algoritmo de exponenciación rápida se basa en la observación de que si se tiene que calcular a^n, donde n es par, puedes dividir el problema en dos partes más pequeñas: a^(n/2) y luego elevar el resultado al cuadrado. Si n es impar, puedes hacer lo mismo pero también multiplicar por a al final.

Aquí un pseudocódigo:

Código:
funcion potenciacion_rapida(a, n):
    si n == 0:
        devolver 1
    si n es par:
        mitad = potenciacion_rapida(a, n / 2)
        devolver mitad * mitad
    si n es impar:
        mitad = potenciacion_rapida(a, (n - 1) / 2)
        devolver a * mitad * mitad
7  Programación / .NET (C#, VB.NET, ASP) / Re: Error en este código: no se puede convertir de 'byte[]' a 'char[]' en: 29 Diciembre 2023, 09:01 am
Si quieres leer raw bytes desde la consola, necesitas usar Console.OpenStandardInput().

Código
  1. using System;
  2. namespace Almacenar_datos_en_un_array_tipo_byte_Consola_01 {
  3.    internal class Program {
  4.        static void Main(string[] args) {
  5.            // Tamaño máximo del array de bytes.
  6.            byte[] byteArray = new byte[1024];
  7.  
  8.            Console.WriteLine("Escribe un texto y pulsa Enter:");
  9.  
  10.            // Lee los bytes desde la consola y los guarda en el array.
  11.            int leerBytes = Console.OpenStandardInput().Read(byteArray, 0, byteArray.Length);
  12.  
  13.            Console.WriteLine("Datos almacenados en el array:");
  14.            for (int i = 0; i < leerBytes; i++) {
  15.                Console.Write(byteArray[i] + " ");
  16.            }
  17.            Console.WriteLine();
  18.  
  19.            Console.WriteLine("Texto almacenado en el array:");
  20.  
  21.            // Convierte los bytes a una cadena de texto.
  22.            string texto = System.Text.Encoding.Default.GetString(byteArray, 0, leerBytes);
  23.            Console.WriteLine(texto);
  24.  
  25.            // Pulse cualquier tecla para salir.
  26.            Console.ReadKey();
  27.        }
  28.    }
  29. }
  30.  

Código:
Escribe un texto y pulsa Enter:
hola
Datos almacenados en el array:
104 111 108 97 13 10
Texto almacenado en el array:
hola

Si planeas leer datos directamente desde el puerto serie en C#, será necesario trabajar con un flujo de entrada/salida (I/O stream).
Afortunadamente, la clase SerialPort en C# proporciona métodos predefinidos para manejar la lectura y escritura de datos en un puerto serie.

De todos modos, un string no deja de ser una cadenas de caracteres, y cada caracter, pese a ocupar 16 bits, almacena un byte (o doble byte) que dependiendo del tipo de codificación, se imprime en pantalla. Por ejemplo, usando la tabla ASCII si la codificación es UTF8: https://elcodigoascii.com.ar/

En caso de que lo que leas, no tenga un símbolo gráfico relacionado, se imprime un carácter residual. En este contexto, es crucial destacar que el "byte" en sí mismo continuará almacenado en el carácter correspondiente. La distinción recae en el enfoque que aplicas a la manipulación de los datos.
8  Programación / Programación C/C++ / Re: Estructuras en: 28 Diciembre 2023, 09:52 am
Varias observaciones:

    1. Evita el uso de gets() debido a que no verifica el tamaño de la entrada, lo que podría resultar en un desbordamiento del búfer.

    2. Has omitido el uso del operador & al utilizar scanf() para la variable número. Debería ser scanf("%d", &numero);

    3. En la función imprimir_mercado(), has utilizado &s en lugar de %s. Esto es incorrecto y debe corregirse a %s.

    4. He optado por utilizar un puntero para la estructura Mercados en la función leer_mercado(). Esta elección es más adecuada cuando se necesita devolver una variable del struct.



EI: codigo removido, no hagas tareas ajenas por favor.
9  Programación / .NET (C#, VB.NET, ASP) / Re: Error en este código: no se puede convertir de 'byte[]' a 'char[]' en: 27 Diciembre 2023, 10:08 am
En C#, el tipo de dato char tiene un tamaño de 16 bits, lo que le permite representar cualquier carácter Unicode. Por otro lado, el tipo de dato byte tiene un tamaño de 8 bits.
Es posible que haya cierta confusión, ya que en lenguajes como C/C++, ambos tipos de datos comparten el mismo tamaño, ya que el tipo char se utiliza para representar caracteres ASCII, que son de 8 bits en esos contextos.
Sin embargo, en el entorno de C#, el tipo char se ha diseñado para manejar un rango más amplio de caracteres Unicode, y por lo tanto, su tamaño es de 16 bits.

Si quieres rizar el rizo, debes guardar la entrada del usuario como un string (una cadena de caracteres con terminador nulo), codificarlos en UTF8 (8-bit Unicode Transformation Format) y volver a descodificarlos.

Código
  1. using System;
  2. using System.Text;
  3.  
  4. internal class Program {
  5.    static void Main(string[] args) {
  6.        Console.WriteLine("Escribe un texto y pulsa Enter:");
  7.        string inputText = Console.ReadLine(); // Lee una línea de texto desde la consola.
  8.        byte[] byteArray = Encoding.UTF8.GetBytes(inputText); // Convierte el texto a un byte[] usando UTF-8.
  9.  
  10.        Console.WriteLine("Datos almacenados en el array:");
  11.        foreach (byte b in byteArray) {
  12.            Console.WriteLine(b);
  13.        }
  14.        Console.WriteLine();
  15.  
  16.        Console.WriteLine("Texto almacenado en el array:");
  17.        string text = Encoding.UTF8.GetString(byteArray); // Convierte los bytes a una cadena de texto.
  18.        Console.WriteLine(text);
  19.    }
  20. }
  21.  

Código:
Escribe un texto y pulsa Enter:
hola
Datos almacenados en el array:
104
111
108
97

Texto almacenado en el array:
hola
   
10  Seguridad Informática / Hacking / Re: Saltarse Firewall en: 27 Diciembre 2023, 09:17 am
¿Has considerado la opción de realizar MAC Spoofing? Puedes intentarlo con el siguiente comando de nmap:

Código
  1. nmap --spoof-mac 00:11:22:33:44:55 10.10.10.10

Además, podrías verificar si la información del sistema operativo que obtiene nmap coincide con la etiqueta de "Windows 7", utilizando la opción de detección avanzada:

Código
  1. nmap -A 10.10.10.10

Otra medida que podrías tomar para evadir posibles restricciones de seguridad es utilizar un SOCKS Proxy. Aquí tienes un ejemplo con nmap y un proxy SOCKS4:

Código
  1. nmap --proxies socks4://proxy2.example.com:1080 10.10.10.10

Puedes encontrar listas de proxies SOCKS4 gratuitos para utilizar aquí:
https://www.proxy-list.download/es/SOCKS4

Adicionalmente, puedes considerar torificar el escaneo mediante la red Tor. Primero, asegúrate de tener Tor iniciado con el siguiente comando:

Código
  1. sudo service tor start

Luego, realiza el escaneo a través del proxy SOCKS5 proporcionado por Tor:

Código
  1. nmap --proxy socks5h://localhost:9050 10.10.10.10

Ten en cuenta que estas medidas pueden ayudar a evadir restricciones de seguridad, pero también introducen posibles limitaciones de rendimiento. Además, existe la posibilidad de que el firewall de Windows haya identificado tu IP o dirección MAC como sospechosa y la haya añadido a una lista negra.
Páginas: [1] 2 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines