Red de conocimiento informático - Computadora portátil - C# Cómo cifrar el código fuente, es decir, incluso si el código fuente se entrega a otros

C# Cómo cifrar el código fuente, es decir, incluso si el código fuente se entrega a otros

La forma más rápida de cifrar dll de c# es utilizar la herramienta de empaquetado Virbox Protector para cifrar directamente. Virbox Protectorke puede realizar análisis de rendimiento en el dll, analizar la cantidad de veces que se llama a cada función y seleccionar un método de protección para cada función, como por ejemplo: 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):

Para código ensamblador X86: la tecnología de código automodificable (SMC) protege el código. El código actual se cifra y se almacena como texto cifrado. Después del almacenamiento, se descifra y ejecuta automáticamente cuando el programa se ejecuta en la función protegida. El código ejecutado se borra y descifra dondequiera que se ejecute. Los piratas informáticos no pueden obtener los códigos originales. las instrucciones completas y la memoria son operaciones puras de memoria, por lo que el código se ejecuta rápidamente y los medios de protección son costosos. Se recomienda agregar todo el cifrado de código (IL)

Para los programas dotNet, protección de código IL: un enfoque de tiempo de ejecución dinámico. para descifrar el código protegido. Cifre el código actual y guárdelo como texto de contraseña. Después del almacenamiento, se descifrará y ejecutará automáticamente cuando el programa se ejecute en la función protegida. Después de la ejecución, el código se borrará y se ejecutará nuevamente. Después de ejecutarlo, se descifrará. De esta manera, los piratas informáticos no podrán obtener la integridad de la memoria de las instrucciones y códigos del lenguaje intermedio original. Dado que es una operación de memoria pura, es rápida y costosa. método de protección Se recomienda agregarlos todos.

Compresión

Similar a la compresión de segmentos de código y segmentos de datos mediante software de compresión como zip. Dado que es una contraseña dinámica, no existe ninguna herramienta que pueda descifrar automáticamente el shell. Esto es para evitar la descompilación y el desmontaje de medios clave.

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íbalos como letras individuales, o combinaciones cortas de letras sin sentido, o incluso símbolos como "__" para que las personas que leen el código no puedan adivinar su propósito basándose en el nombre.

a) Reescribir algo de lógica en el código para que sea funcionalmente equivalente pero más difícil de entender. Por ejemplo, reescribir bucles for en bucles while, reescribir bucles en recursiones, optimizar variables intermedias, etc.

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

c) Agregar instrucciones florales, que son instrucciones especialmente diseñadas para cometer errores en el desmontaje y así interferir con el proceso de desmontaje.

Los ofuscadores de código también pueden causar problemas. Los principales problemas incluyen: El código ofuscado es difícil de entender y, por lo tanto, la depuración y la depuración se vuelven difíciles. Los desarrolladores a menudo necesitan conservar el código original y sin ofuscar para la depuración. - Para los lenguajes que admiten la reflexión, la ofuscación del código puede entrar en conflicto con la reflexión. - La ofuscación del código en realidad no previene la ingeniería inversa, sólo la hace más difícil. Por lo tanto, cuando la seguridad es muy importante, la ofuscación del código por sí sola no puede garantizar la seguridad del código fuente.

La ofuscación de código se caracteriza por un bajo nivel de seguridad y no afecta la eficiencia.

Virtualización de código:

Se traducen e interpretan uno por uno, y luego se restauran gradualmente al código original y se ejecutan. Esta subrutina que traduce el pseudocódigo y es responsable de la ejecución concreta se denomina máquina virtual VM (similar a la CPU abstracta). Existe como una función cuyo parámetro 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 puede diseñar y ejecutar aleatoriamente cada vez, y el código se puede cambiar aleatoriamente cada vez, incluidos algunos cambios lógicos equivalentes, se puede implementar con referencia al hardware N Y NOT gate NOT -Y debido a cambios en la forma de varias puertas lógicas, algoritmos y accesos a la memoria, incluidos cambios no equivalentes en matemáticas, la cantidad de código puede expandirse casi de 100 a 10,000 veces, lo que hace que la máquina no pueda restaurar el algoritmo. a su lógica original.

La virtualización de código se caracteriza por una seguridad moderada y no afecta la eficiencia.

Fragmentación de código:

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 en el módulo del kernel SS, que Reduce en gran medida el umbral de uso. Ya no es necesario trasplantar algoritmos manualmente, la cantidad de algoritmos portátiles ha aumentado de un número limitado a un número casi ilimitado y los idiomas admitidos ya no se limitan al lenguaje C. es una aplicación integral de la tecnología de cifrado. Esta es una aplicación integral de la tecnología de cifrado. El efecto es similar a dividir el software en partes, lo que imposibilita el inicio de los crackers.

Se recomienda utilizar funciones clave altamente seguras o llamar a métodos de bloqueo de cifrado. Usar demasiadas funciones clave o llamar a métodos de bloqueo de cifrado afectará la eficiencia.