Descripción del reto:
El cliente tiene control absoluto. Elude la autenticación y lee la clave para obtener la bandera (flag).
Contenido descargable del reto:
El archivo descargable del reto contiene el ejecutable bypass.exe.
Enumeración estática
Para determinar el tipo de archivo con el que estamos trabajando utilizamos el comando file Bypass.exe, lo que nos proporciona información básica sobre el archivo.

La información obtenida es la siguiente:
- PE32: Portable Executable de 32-bit
- Executable (console): Se trata de una aplicación de consola.
- Mono/.Net assembly: Es un ensamblado creado con el framework Mono, una implementación de código abierto de .NET. Esto indica que probablemente la aplicación esté desarrollada en C# o VB.NET.
- for MS Windows: Para sistemas operativos Windows.
Para obtener más información del ejecutable, podemos utilizar Detect It Easy (DIE), una herramienta que identifica el compilador, empaquetador (packer), protector o cualquier otra herramienta utilizada para crear un archivo ejecutable.
Detect It Easy (DIE) está disponible en su repositorio de GitHub:
https://github.com/horsicq/Detect-It-Easy

Con este análisis podemos saber:
- Formato del archivo: PE32 (Portable Executable, 32-bit)
- Sistema operativo: Windows 95 en adelante
- Arquitectura: i386 (32-bit)
- Tipo de aplicación: Consola (CLI)
- Compilador/Linker: Microsoft Linker 8.0
- Lenguaje: C#
- Biblioteca: .NET Framework v4.0.30319
A continuación, se procederá a extraer las cadenas de texto presentes en el archivo utilizando el comando strings, que nos permitirá obtener una lista de las cadenas contenidas en el ejecutable. También se puede realizar esta tarea mediante Detect It Easy en su modo avanzado.
strings bypass.exe > strings_bypass.txt

El análisis no ha proporcionado información relevante, aunque se puede observar que se menciona la versión 4.5.2 de .NET Framework, mientras que DIE identificó la versión 4.0.30319.
No se ha obtenido información relevante de las cadenas contenidas en el archivo.
Análisis de la aplicación
Dado que el ejecutable está desarrollado en C# bajo el framework .NET, es posible descompilar y leer el código fuente casi en su totalidad. Las aplicaciones .NET tienden a preservar su estructura, lo que facilita su interpretación mediante herramientas de descompilación.
Una de las mejores herramientas para descompilar, depurar y modificar ejecutables de .NET en Windows es dnSpy, disponible en su repositorio de GitHub: https://github.com/dnSpy/dnSpy.

Análisis del código
La aplicación consta de nueve clases numeradas del 0 al 7, más la clase module, que actúa como el constructor del módulo.
- Clase 0: Contiene la lógica principal de la aplicación.
- Clases de la 1 a la 4: Devuelven una variable que proviene de la clase 5.
- Clase 5: Contiene un conjunto de variables que obtiene llamando a la clase 7 y posteriormente a la clase 6.
- Clase 7: Realiza operaciones de descifrado que retornan un array de bits.
- Clase 6: Convierte un array de bits a un tipo específico.
Para encontrar el punto de entrada de la aplicación, haz clic derecho sobre HTBchallenge y selecciona “Ir al punto de entrada”, el punto de entrada se encuentra en el método 0 de la clase 0.

El método 0 llama al método 1, que retorna un valor de tipo booleano, el cual se almacena en la variable flag. Luego, esta variable se asigna a flag2.
El condicional if (flag2) invoca al metodo 2 si es verdadero; en caso contrario, muestra un mensaje en la consola y el método se llama a sí mismo.

El método 1 escribe y lee valores de la consola que no utiliza y siempre devuelve false.

El método 2 compara la entrada de texto almacenada en la variable b con el valor de la clase 5, variable 3, y asigna el resultado a flag. Si el valor de flag es verdadero, se muestra en la consola; de lo contrario, el método se llama a sí mismo.
Explotación
Ahora que comprendemos la lógica de la aplicación, es posible establecer los puntos de interrupción en los métodos 0 y 2 para modificar el flujo de ejecución.
Los puntos de interrupción permiten pausar la ejecución de un programa en un punto específico para inspeccionar el estado de las variables y el flujo del programa.
Para agregar un punto de interrupción, haz clic en el margen izquierdo de la línea donde deseas detener la ejecución. Aparecerá un círculo rojo indicando que el punto de interrupción ha sido establecido. También puedes presionar F9 para añadir un punto de interrupción en la línea actual.
Inciar la depuración
Presiona el botón de inicio o la tecla F5 para comenzar la depuración. La aplicación pedirá un nombre de usuario y una contraseña, lo cual se realiza desde el método 1 que siempre devuelve false.

Si los puntos de interrupción están correctamente establecidos, la ejecución se detendrá en la línea 11. En la parte inferior de dnSpy podrás observar el valor de las variables locales. Modifica el valor de flag2 a true y presiona F5.
Para cambiar el valor de una variable local, haz doble clic sobre el valor actual, escribe el nuevo valor y presiona Enter para guardarlo. El valor modificado aparecerá resaltado.
El programa ahora pedirá una clave secreta.

Cuando la ejecución se detenga en el método 2, modifica el valor de flag2 a true y pulsa F10 para avanzar la ejeución paso a paso.

La flag ha sido obtenida exitosamente, la he censurado para seguir con las normas de HTB.
Lecciones aprendidas
El uso de herramientas como file y Detect It Easy para obtener información sobre los binarios.
La posibilidad de descompilar aplicaciones .NET con dnSpy para comprender su lógica interna y modificar su comportamiento.