Red de Respuestas Legales - Derecho empresarial - ¿Cómo cifrar DLL escrita en C#?

¿Cómo cifrar DLL escrita en C#?

La forma más rápida de cifrar una DLL de C# es cifrarla directamente utilizando una herramienta de shell llamada Virbox Protector. Virbox Protectorke puede analizar el rendimiento de dll, analizar la cantidad de llamadas de cada función y seleccionar métodos de protección para cada función, como ofuscación/virtualización/fragmentación/cifrado de código, etc. ¿Cuáles son las características de cada método de cifrado?

Cifrado de código (X86):

Código ensamblador para X86: una tecnología de código automodificable (SMC) que protege el código. Cifre y almacene el código actual como texto cifrado, guárdelo, descifre y ejecútelo automáticamente cuando el programa se ejecute en la función protegida, borre el código después de la ejecución y descifrelo sin importar dónde se ejecute el código. Los piratas informáticos no pueden obtener las instrucciones y el código originales de la máquina con integridad de memoria. Debido a que es una operación de memoria pura, es un método de protección de ejecución rápida y de alto costo. Se recomienda agregar todos.

Cifrado de código

Protección de código IL para programas dotNet: un método de operación dinámica para descifrar código protegido. Cifre y almacene el código actual como texto cifrado, guárdelo, descifre y ejecute automáticamente cuando el programa se ejecute en la función protegida, borre el código después de la ejecución y luego borre el código donde se ejecuta. Los piratas informáticos no pueden obtener las instrucciones originales del lenguaje intermedio ni el código con integridad de memoria. Debido a que es una operación de memoria pura, es un método de protección de ejecución rápida y de alto costo. Se recomienda agregar todos.

Compresión

El software de compresión, como zip, comprime código y segmentos de datos. Debido a su contraseña dinámica, ninguna herramienta puede descomprimirla automáticamente, lo cual es un medio clave para evitar la descompilación y el desensamblaje.

Ofuscación de código (IL):

Reescribe los nombres de varios elementos del código, como variables, funciones, clases, etc., en nombres sin sentido. Por ejemplo, reescríbalo en una sola letra, o en una combinación de letras breve y sin sentido, o incluso reescríbalo en un símbolo como "_ _", para que los lectores no puedan adivinar su propósito basándose en el nombre.

a) Reescribir parte de la lógica del código en una forma funcionalmente equivalente pero más difícil de entender. Por ejemplo, reescriba el bucle For en un bucle while, reescriba el bucle en recursividad, optimice las variables intermedias, etc.

b) Interrumpir el formato del código. Por ejemplo, elimine espacios, comprima varias líneas de código en una sola línea o divida una línea de código en varias líneas, etc.

c) Agregar instrucciones sofisticadas para corregir el error del desensamblador mediante instrucciones especialmente construidas, interfiriendo así con la descompilación.

Los ofuscadores de código también pueden causar algunos problemas. Los principales problemas incluyen: código desordenado que es difícil de entender y, por lo tanto, difícil de depurar. Los desarrolladores a menudo necesitan conservar el código limpio y original para la depuración. Para los lenguajes que admiten la reflexión, el desorden del código puede entrar en conflicto con la reflexión. El desorden de códigos en realidad no impide la ingeniería inversa, sólo la hace más difícil. Por lo tanto, en ocasiones con altos requisitos de seguridad, el simple uso de la ofuscación del código no puede garantizar la seguridad del código fuente.

La ofuscación de código se caracteriza por una baja seguridad y no afectará la eficiencia.

Virtualización de código:

Fueron traducidos y explicados uno por uno, y gradualmente restaurados al código original para su ejecución. Esta subrutina utilizada para traducir el pseudocódigo y ser responsable de una ejecución específica se denomina máquina virtual VM (como una CPU abstracta). Existe en forma de función y el parámetro de la función es la dirección de memoria del código de bytes. Dado que la implementación del código de la máquina virtual y la CPU de la máquina virtual se pueden diseñar y ejecutar aleatoriamente cada vez, el código se puede modificar aleatoriamente cada vez, incluidas algunas modificaciones lógicamente equivalentes. Puede consultar las puertas N NAND del hardware para implementar varias lógicas. Las puertas, los algoritmos y las formas de acceso a la memoria, incluidas las modificaciones matemáticas no equivalentes, casi pueden expandir la cantidad de código de 100 a 10,000 veces, lo que hace imposible que la máquina ejecute el algoritmo y lo restaure a la lógica original.

Las características de la virtualización de código son: seguridad moderada sin afectar la eficiencia.

Fragmentación de código:

Piense profundamente en la última tecnología con derechos de propiedad intelectual independientes: basada en la tecnología de máquina virtual LLVM y ARM, una gran cantidad de código se extrae automáticamente y se mueve al Módulo de modo kernel SS, que reduce en gran medida el umbral de uso, ya no es necesario el trasplante manual de algoritmos. La cantidad de algoritmos portátiles ha aumentado de limitada a casi ilimitada, y los lenguajes admitidos ya no se limitan a C. Esta es una aplicación integral de tecnología de cifrado. El efecto es similar a desarmar el software para su ejecución, dejando a los crackers en un lugar. pérdida.

Alta seguridad, solicitar funciones clave o llamar a métodos de bloqueo de cifrado; el uso excesivo afectará la eficiencia.