Red de conocimiento informático - Conocimiento informático - Cómo descifrar el reactor .NET

Cómo descifrar el reactor .NET

NET Reactor es un software de protección .net producido por EZIRIZ Company. Es bastante potente. A partir de la versión 3.3.1.1, utiliza un nuevo método de cifrado Cómo descifrar la versión anterior. , es muy sencillo de hacer, pero este método no funcionará después de la versión 3.3.1.1. Ahora explicaré cómo hackear la versión 3.3.1.1.

Preparación de la herramienta:

Para descifrarlo con .NET Reactor, por supuesto, primero debe instalar la dirección de descarga:

.NET Generic Unpacker y SNSRemover, usados para eliminar el Reactor en sí El caparazón, elimine el nombre seguro

Reflector, ¡no hace falta decir esto!

El editor hexadecimal utiliza principalmente funciones de buscar, reemplazar y guardar.

Instalamos Reactor y descubrimos que no es un programa .NET y no se puede descompilar directamente usando Reflector. En este momento, tuvimos que usar .NET Generic Unpacker. El descompilación de Reactor se muestra en la Figura 1. .

(Figura 1 Bombardeo del reactor)

El número de proyectiles que salen cada vez no es necesariamente el mismo. Bien, usemos Reflector para abrirlo, como se muestra en la Figura 2

(La Figura 2 usa Reflector para descompilar Reactor)

En este momento, descubrimos que el nombre de la clase ofuscada estaba confuso. No importa, ilasm admite caracteres confusos, entonces, ¿podemos usar ildasm para descompilar, luego modificar su código y luego usar ilasm para recompilar? En teoría, es posible, pero de hecho, debido a que los nombres de los archivos de recursos están confusos, ilasm no puede encontrar estos archivos y la compilación fallará. Entonces, qué hacer, simplemente modifique el programa original.

Primero utilice SNSRemover para eliminar su nombre seguro.

(Figura 3 Utilice SSNSRemover para eliminar el nombre seguro de Reactor)

Ahora no tiene que dudar de que el programa no se ha podido ejecutar. Ahora, después de eliminar el nombre seguro, el tiempo de ejecución aparecerá. Aparecerá un mensaje de error. No tenga miedo, intente cifrar el Reactor con el Reactor original después de eliminar el nombre seguro. Ejecute el programa de cifrado en el directorio de Reactor.

(Figura 4 Error al ejecutar después de volver a cifrar)

Jaja, ¿viste cuál fue el error? Esto no es un error de validación de nombre seguro, sino un error aritmético que ocurre cuando un número se divide por cero. Echemos un vistazo a su error. Encontramos el método -v.-c...cctor() a través de Reflector. Dado que Reactor en sí está ofuscado, no se puede descompilar con C#. La nueva versión también tiene una nueva ofuscación. eliminas

L_ 0000: br L_0007

L_0005: pop

L_0006: ldc.i4.0

estos tres fragmentos de código , no se puede descompilar con C#, solo podemos usar IL.

(Figura 5 Use Reflector para descubrir qué excepción ocurrió)

Cualquier persona familiarizada con IL sabe que el comando para div es div, por lo que si buscamos div aquí, encontraremos algo como este Código:

L_004f: ​​ldc.i4 0x10

L_0054: stloc.s num

L_0056: ldloc num

L_005a: ldloc num

L_005e: sub

L_005f: conv.u1

L_0060: stloc.s num

L_0062: ldloc num

L_0066: ldloc num

L_006a: div

L_006b: conv.u1

L_006c: stloc.s num

Ver En este punto, debes saber que convertirlo a código C# será

num = 0x10;

Ahora, usamos el Reactor original nuevamente para procesar el archivo. acabamos de procesar el cifrado. Descubrimos que ahora funciona bien.

Ahora que podemos ejecutar el empaquetador normalmente, necesitamos hacerlo funcionar oficialmente.

Use Reflector para abrir el archivo que acabamos de procesar y use la propia función de Reflector para saltar al punto de entrada del programa

(Figura 9: Encuentre el punto de entrada)

Analizando el programa, no es difícil encontrar

L_0662: call bool -v.-c::'2()

Este código es el código de verificación, pero si vamos directamente aquí Modificarlo será bastante difícil. Es mejor modificar el valor de retorno de '2(). Siempre que siempre devuelva verdadero, entonces lograremos nuestro objetivo.

(La Figura 10 llega a '2())

No es difícil para nosotros encontrar L_0000: br La dirección correspondiente de L_0007 es 0x17cd28, y el 3802 original se modifica a 172A

(La Figura 10 cambia 3802 a 172A)

Después de guardar, usamos el Reactor original para cifrar el programa que acabamos de procesar y ejecutamos el programa cifrado en el directorio del Reactor. Mira, ahora es la VERSIÓN COMPLETA, pero cuando la probemos ahora, encontraremos dicha excepción

(La Figura 11 está modificada y se ejecuta de manera anormal)

Mira su excepción, es todavía System.DivideByZeroException, lo que significa que todavía hay una parte del código de verificación de nombre seguro que no se ha modificado. Simplemente repita la operación anterior y luego veremos que todavía hay una parte del código de verificación de nombre seguro. Para modificarlo, simplemente repita la operación anterior para encontrar su hexágono y reemplace 5B con 59.

Lancé su versión descifrada y también se lanzó la 3.3.8.0. La dificultad de descifrado de 3.3.8.0 será más difícil que esta. Los amigos que estén interesados ​​pueden estudiarla y obtener 3.3.8.9. Probemos esta versión. Este es el mismo crack que 3.3.8.0. ...