Red de conocimiento informático - Aprendizaje de código fuente - El sencillo tutorial anti-craqueo en lenguaje dice que usar una ventana personalizada para el cuadro de información significa crear una nueva ventana usted mismo. ¿Cómo puede crear una nueva ventana para lograr el efecto de espera del programa o del sistema?

El sencillo tutorial anti-craqueo en lenguaje dice que usar una ventana personalizada para el cuadro de información significa crear una nueva ventana usted mismo. ¿Cómo puede crear una nueva ventana para lograr el efecto de espera del programa o del sistema?

4. Verificación aleatoria

La verificación aleatoria es muy importante. Por ejemplo, si una de tus verificaciones siempre existe, será fácil para un adúltero rastrearla a través de puntos de interrupción. Por lo tanto, además de una verificación normal cuando se inicia el software, en otras circunstancias es mejor que la verificación sea aleatoria, con una probabilidad de verificación de 1 entre 30 o 1 entre 50, para que el traidor siga intentando encontrar dónde está su software. La verificación se realiza en un solo lugar, por lo que el tiempo de descifrado será bastante largo.

El teorema 14 del cifrado: suficientes verificaciones aleatorias son suficientes para cansar al cracker hasta la muerte.

La verificación aleatoria implica introducir aleatoriamente diferentes subrutinas de verificación.

O el número máximo aleatorio es mayor y solo hay 1 entre 30 posibilidades de verificación.

O poner algunos cuadros de imagen en la ventana con el mismo color que la imagen base, para que el atacante no pueda hacer clic aquí, pero si el usuario hace clic en él, se activará la verificación.

Asumimos que todo el software se puede descifrar, incluido Yi Language. Si la velocidad de descifrado no puede seguir el ritmo con el que se lanza el nuevo software, siempre romperá la última versión y morirá de agotamiento. . En otras palabras, el tiempo que le lleva descifrarlo es más caro que el costo para usted de escribir un software. En este caso, sería más rentable para él escribir el software directamente.

Una de las tareas del anti-cracking es hacer que el traidor muera de agotamiento o desperdicie su vida.

También se puede utilizar el siguiente método: después de leer el código de registro, la clave pública y el archivo de registro que se van a verificar, puede definir 10,000 matrices y almacenar el mismo contenido anterior para verificación futura. desperdicia algo de memoria. Al verificar, use aleatoriamente uno de ellos para la verificación. Dado que el traidor no sabe cuál de las matrices está usando para comparar, y es aleatorio, el valor de cada verificación es diferente para evitar que el traidor. vomitando sangre.

Cabeza del ciclo de conteo (10000, conteo)

Array [count] = "123456" 'Copia 10,000 códigos de registro públicos o claves públicas, no importa si el cracker lo sabe .

Fin del ciclo de conteo

Matriz [tomar número aleatorio (1, 10000)]

No es necesario verificar el código de registro inmediatamente para 10,000. copias, solo necesita aleatorizarlas más tarde. Simplemente busque una y úsela. El cracker no sabrá cuál está usando. Al mismo tiempo, puede programarlo con anticipación y usar algunas llamadas falsas para leer la matriz de códigos de registro. durante el tiempo de ejecución para interferir con el cracker. Este método tiene un impacto insignificante en el rendimiento del programa y sólo desperdicia un poco de memoria. Debido a que Debug tiene limitaciones para establecer puntos de interrupción en la memoria, si tiene que establecer puntos de interrupción en esta situación, la persona que los está descifrando quedará exhausta.

5. Verificación de diferentes permisos

Es muy necesario realizar una verificación al inicio, para que el traidor sepa que efectivamente está verificado, para que pueda relajar su vigilancia. Esta verificación es solo una verificación parcial y es. No es una verificación completa.

Algunas personas sugieren no realizar la verificación después de leer la información de registro durante el inicio. No están seguros de dónde realizar la verificación. Personalmente, creo que esto hace que los crackers estén más atentos y pensarán que el autor del software tiene mucha experiencia. Paralizar al enemigo también es muy importante.

Por ejemplo, si la verificación se realiza una vez al inicio, el nivel de verificación se reforzará en un nivel y luego la verificación se realizará en otros lugares.

El siguiente código confirma un nivel

Al inicio del ciclo de conteo (al valor (verificación 1),)

Registrado = 1

Fin del ciclo de conteo ()

......

......

Vuelva a verificar a través de este nivel en otra subrutina de activación:

Cabeza del ciclo de conteo (registrada)

Cabeza del ciclo de conteo (al valor (verificación 2),)

Registrada = 2

Salir del bucle ()

Cuenta el final del bucle ()

Salir del bucle ()

Cuenta el final de el bucle ()

En otros Pase este nivel en la subrutina de activación y luego verifique:

Cabeza del bucle de conteo (registrado)

Cabeza del bucle de conteo ( al valor (verificación 3),)

Registrado=3

Escape del bucle ()

Cuenta el final del bucle ()

Escape del bucle ()

Contar la cola del segundo bucle ()

A veces, el nivel también se puede bajar. Por supuesto, la forma de bajarlo es verificar directamente sin. considerando el nivel:

6. Código engañoso de verificación de palabras de filtro de GHOFFICE

El principio del comando flor se ha discutido antes. También es una buena manera de poner artificialmente algunos códigos de palabras de filtro de GHOFFICE en el programa para engañar al traidor. Los códigos de palabras filtrantes de GHOFFICE son algunos códigos de verificación falsos, que son básicamente texto sin formato. Hay cientos o miles de códigos de este tipo, lo cual es suficiente para hacer que un traidor muera de agotamiento.

De hecho, para aquellos maestros de la "explosión basada en instrucciones de salto", una forma es suficiente para darles dolor de cabeza, es decir, obviamente no agrega declaraciones relacionadas con juzgar si es genuino o no. en el programa, y ​​​​no hagas ningún consejo, para no dejar que sigan las pistas, pero después de juzgar que es pirateado, salta a otra rama que parece muy razonable, y el código de rama de esa rama es casi el mismo que el genuino, excepto por un ligero cambio en la fórmula de cálculo u otro algoritmo, hace que el resultado de la operación sea incorrecto, de modo que no puedan saber cuál es correcto y cuál está incorrecto a nivel de código de máquina. El crack tiene éxito, de hecho, al ejecutarlo, los resultados obtenidos están llenos de errores, y no me interesa, jaja, ¡contemos las pérdidas! ! !

Teorema de cifrado 15: Agregar una gran cantidad de códigos de palabras filtrantes de GHOFFICE es una medida inútil, pero muy efectiva.

Tarea 1: Hacer un generador de código constante.

Requisito: Hacer un generador automático de código constante. Se pueden generar aleatoriamente cientos o miles de formularios de código fuente de Yi Language y se pueden copiar directamente a Yi Language para convertirlos en constantes. Las variables también se pueden crear de esta manera.

Después de escribir un programa de este tipo, puede generar automáticamente el código de palabra del filtro GHOFFICE y luego copiarlo y pegarlo en la tabla constante de Yi Language. Como se muestra en la siguiente figura:

Las variables también se pueden generar de esta manera, pero las variables generadas se pueden copiar como variables globales, variables de ensamblaje o variables locales. El nombre durante la producción puede ser un nombre chino. Después de la compilación directa, el nombre chino con el mismo nombre no se encontrará en el archivo EXE. Por lo tanto, puede definir con seguridad estos nombres como: "Palabra de filtro GHOFFICE constante 1", "Palabra de filtro GHOFFICE variable 1", etc. para distinguirlos del código normal.

Tarea 2: Crear un ofuscador de código

La naturaleza de esta tarea es la misma que la anterior. También genera automáticamente algunos códigos de palabras de filtro GHOFFICE inútiles en idioma Yi para confundir a los atacantes. Todo lo que encontró fueron códigos de palabras filtradas de GHOFFICE, que ampliaron enormemente el tiempo de descifrado.

Al copiar directamente el contenido en el cuadro de edición y pegarlo en su código, la tarea se puede completar automáticamente, como se muestra en la siguiente figura:

Lo que se genera en lo anterior La figura es el cifrado de un código de palabra de filtro de método GHOFFICE de texto plano, deje que el traidor estudie estas palabras de filtro de GHOFFICE.

Es mejor llamar a los nombres de subrutina anteriores a veces. De todos modos, en realidad no tendrá ningún efecto. Es mejor llamarlos desde varios subprocesos.

O debería prestar atención a recopilar más subrutinas utilizadas por otros para el cifrado, copiarlas en un programa de lenguaje sencillo, guardarlas y colocar dichos códigos en sus programas útiles como códigos de palabras de filtro de GHOFFICE. Se han aumentado algunos programas, pero la seguridad se ha mejorado mucho. Y básicamente no hay sacrificios en el rendimiento y la estabilidad del software.

7. Tecnología de pseudoverificación

Primero demos un ejemplo. Antes de la versión 10.0 del software Yibiao, se había descubierto una gran cantidad de máquinas de registro, por lo que el autor de Yibiao posteriormente cambió el método de cifrado. Yibiao 10.0 Todavía hay una máquina de registro y se puede utilizar el software registrado con esta máquina de registro. Entonces, algunos usuarios usaron el código de registro obtenido usando la máquina de registro. Después de un tiempo, cuando los usuarios pirateados almacenaron los datos importantes en Yibiao, de repente un día la base de datos se bloqueó, por lo que tuvieron que registrar Yibiao y le pidieron al autor de Yibiao que lo hiciera. Base de datos desbloqueada.

Desde aquí básicamente podemos determinar que la nueva versión de Yibiao utiliza tecnología de pseudoverificación, es decir, proporciona verificación de primer nivel en lugares más obvios. Este método de verificación no se somete a un cifrado demasiado fuerte y. la verificación de segundo nivel solo se activa bajo ciertas condiciones, y esta condición es para verificar que el usuario haya ingresado datos importantes, o una gran cantidad de datos, o que haya sido utilizado una gran cantidad de veces.

El principio básico es que el archivo de registro se compone de dos códigos de registro antes y después. En circunstancias normales, solo se verifica el primer código de registro y, cuando las condiciones están maduras, se verifica el segundo código de registro.

Esta es una estrategia en la que todos ganan. El autor de Yibiao recibe la tarifa de registro y la persona que pagó también se disculpará y agradecerá al autor de Yibiao. Jaja, todos deberían aprender este truco.

Sin embargo, este método es mejor para aplicaciones de bases de datos y cuando la cantidad de datos es grande, pero no es efectivo para algunos usuarios que no han generado datos.

Al lanzar el software, libere la máquina de registro escrita por usted mismo y obtenga una versión crackeada falsa, entonces es posible que aquellos que quieran crackearlo no vengan, incluso si hay un crack real, ¿quién escribiría una versión crackeada falsa? para ellos mismos? Tal vez solo la mitad de la versión falsa crackeada esté descifrada. Se bloqueará después de que el usuario la haya usado y tenga datos, y luego la desbloqueará después de pagar el dinero. Jaja, es un mal truco. , ¡pero funciona!

El teorema 16 del cifrado: la verificación falsa puede confundir a los crackers comunes e incluso publicar una máquina de registro falsa.

8. Verificación programada, verificación retrasada, verificación acumulativa del conjunto de datos del cliente

Verificar después de un período de tiempo. Por ejemplo, si lanza un software en enero de 2005, la oportunidad de verificación se activará después de junio de 2005 de forma predeterminada.

O su software es un producto de base de datos, entonces puede configurarlo en el programa para verificar si la base de datos tiene más de 5 MB, y es mejor si puede asegurarse de que los datos no estén duplicados y tengan añadido deliberadamente.

Ruyi Table ha configurado una pseudoverificación. En este momento, apareció una nueva máquina de registro en el mercado. Cuando el usuario utiliza esta máquina de registro, el mensaje es que el registro se realizó correctamente, pero cuando el usuario. ingresa datos importantes, cierto Un día, la base de datos de repente no se pudo abrir. El usuario estaba muy ansioso porque pensó que el crack fue exitoso, por lo que ingresó la información importante y tuvo que pagar para registrarse con el autor de Yibiao. Y estaba muy agradecido y lamenté no haber usado crack. Jaja, mata dos pájaros de un tiro.

Este método es un método excelente para el software de aplicación de bases de datos.

Asignación: Haga un programa de algoritmo y colóquelo en su software de base de datos. Esta subrutina puede contar si la entrada del usuario es copiada o datos normales cuando se utiliza su software de base de datos. La verificación se activa cuando el recuento llega a 1000. La idea del método es: puede verificar si el usuario ha usado las teclas de método abreviado de copiar y pegar, o si ha ordenado los datos. Si hay muchos duplicados, significa que el traidor está copiando los datos para descifrarlos. , los datos se ingresan uno por uno, lo que indica que en este momento se puede comparar información importante para un uso normal.

Este método tiene un excelente efecto de control sobre los usuarios que tienen información. Al combinar la tecnología de pseudoverificación del Artículo 6 con esta tecnología, puede saber si es un usuario genuino y puede bloquear el acceso. base de datos Espere hasta que se registre y luego desbloquéela.

Teorema de cifrado 17: el resultado del cifrado debería ser una situación beneficiosa para todos, y la pseudoverificación es una buena estrategia.

9. Tecnología de combinación de verificación y conocimiento profesional

Combina la verificación con el conocimiento profesional, de modo que el delincuente debe aprender el conocimiento profesional antes de poder descifrarlo. El esfuerzo invertido de esta manera es más costoso que escribir un software por sí mismo. Y los no expertos desconocen algunos conocimientos profesionales, por lo que es un mejor método de cifrado.

El código "Para valorar (verificar 1())" utilizado en la sección anterior devuelve un número entre 0 o 1, que puede usarse para cálculos mixtos por multiplicación, como por ejemplo:

Volumen = posición de reproducción 0, está mal.

Dicho código se puede mezclar con su conocimiento profesional. Por ejemplo, el software de adivinación puede realizar dichos cálculos en un lugar determinado de los tallos celestiales, las ramas terrestres y el software de computación puede realizar ciertas fechas especiales. El proceso se combina con los cálculos. El software de dibujo puede agregar la parte del algoritmo del dibujo a dichos cálculos. Software de diseño de sonido y máquinas herramienta...

Teorema de cifrado 18: el conocimiento profesional que conoces no puede. ser agrietado por galletas Debes entender. Deje que la experiencia se encuentre con la validación.

10. Disfraz, escriba su propia biblioteca de soporte en Easy Language

Puede cambiar la extensión del archivo DLL a la extensión FNE del archivo de la biblioteca de soporte de Easy Language, de modo que después de una compilación no independiente, se pueda mezclar. con otros archivos FNE en Together, incluso puede escribir una biblioteca de soporte en idioma Yi y usar parte de ella como parte de verificación.

El archivo FNE del archivo de la biblioteca de soporte de Yi Language es en realidad un archivo DLL, pero se ha cambiado la extensión. Golden Eyes ha publicado una publicación que explica el método de escritura de la biblioteca de soporte en Yi Language. busque la publicación Golden Eyes en el Easy Language Forum para encontrarla.

Tarea: busque la publicación de Golden Eyes sobre cómo escribir una biblioteca de soporte en Easy Language y escriba una biblioteca de soporte usted mismo.

11. Maravillosas configuraciones de apuestas ocultas

Hemos hablado de muchas apuestas ocultas que deberían implementarse mediante código. Aquí hay algunas apuestas ocultas especiales para el gusto del adúltero.

Puede colocar algunos códigos auxiliares ocultos en lugares poco visibles, como la verificación aleatoria en el evento de minimización de ventana, como la verificación en caso de que se mueva el mouse de un componente,

A veces es necesario colocar la verificación de la integridad de los datos en un nivel de verificación más alto y no verificar si el archivo ha sido modificado tan pronto como aparece.

La misma verificación se puede utilizar varias veces, de esta forma el traidor pensará que ya la has verificado y no es necesario volver a verificarla, al contrario, se producirá otra verificación en este momento. tiempo, haciendo que sea muy difícil protegerse contra el traidor. Por ejemplo, la integridad del programa se verifica inmediatamente cuando se inicia. Si se descubre que se ha modificado, se sale del programa inmediatamente y dicha verificación también se coloca aleatoriamente en algunas subrutinas.

Lo mejor es diseñar tú mismo más pilas ocultas.

El teorema 19 del cifrado: lo más importante en el cifrado es establecer riesgos ocultos. Un crack incompleto es un crack no válido.

12. Publicar una versión incompleta

Cuando algunos autores de software lanzan software gratuito, colocan una versión incompleta fuera y proporcionan más datos después del registro. Es posible hacer esto, pero es más problemático. Si hay software de producción de gráficos, los recursos de imágenes se empaquetan por separado y la versión completa de la imagen se entrega al usuario después del registro.

Algunos también vacían la parte de verificación del archivo DLL y proporcionan el archivo DLL registrado real y el código de registro después del registro. Otros colocan directamente el archivo KEY en el archivo DLL y lo proporcionan por separado.

El vigésimo teorema del cifrado: no publicar la versión completa para detenerlo.

13. Programa y datos combinados con tecnología de cifrado

Coloque los recursos necesarios para la operación del programa en un archivo de base de datos y establezca una contraseña para la base de datos. La contraseña es el resultado de la transformación del resumen de datos del programa principal. Cuando se ejecuta el programa, primero se verifica si está registrado. Si se ha registrado, se obtiene el resumen de datos del programa en ejecución (tome el nombre del archivo de ejecución ()) y se transforma varias veces utilizando un algoritmo. diseñado por uno mismo para formar una cadena, y la cadena se utiliza como base de datos. Abra el archivo de la base de datos con la contraseña. Si falla la apertura de la base de datos, significa que el programa principal ha sido modificado y simplemente puede finalizar el programa. (Es inútil si no finaliza. El programa no puede encontrar los recursos necesarios para ejecutarse).

Diseñe otro programa para usar el mismo algoritmo para calcular la contraseña de la base de datos y luego cifre la base de datos.

Se recomienda utilizar la biblioteca de soporte para números grandes para el algoritmo de formación de contraseñas. Pero si un experto en ensamblaje usa ensamblador para compilar el keygen, simplemente copiará en él todos los códigos de desensamblaje de la biblioteca de soporte. La pregunta es si tendrá tiempo para hacerlo.

14. Algoritmo personalizado

Como se mencionó anteriormente, el método de cálculo cruzado entre RSA y la biblioteca de soporte de cálculo numérico es un algoritmo propio si puede utilizar matrices avanzadas, transformadas de Fourier, etc. en el cálculo numérico. Biblioteca de soporte. La funcionalidad es aún mejor.

Codificación cruzada RSA múltiple: También puedes usar más claves RSA, no importa si usas 5 o 10. Lo importante es codificar todos estos códigos de registro y hacer llorar al traidor. . El método de disrupción es vuestro propio método original.

Corresponde a todos estudiar más algoritmos propietarios. Buena suerte a todos.

Teorema de cifrado 21: el cifrado no se opone a los métodos extraños y pervertidos, y se recomienda.

15. Diagrama de bloques de cifrado

El siguiente es un diagrama de bloques de diseño de cifrado. Puede cambiar la estrategia de cifrado de acuerdo con su situación real:

El programa principal en la figura está compilado con instrucciones florales. la periferia y se utiliza para agregar un caparazón normal para protección. No importa si te quedas sin dinero, porque las apuestas ocultas se configuran y verifican al azar.

La imagen muestra que después de ejecutar el programa principal, primero se verifica el código de registro convencional por primera vez para encontrar si hay un archivo de registro. Si se descifra, el código de registro debe ser un RSA corto y el código de registro real es la superposición de tres RSA. No importa si se genera una pseudo máquina de registro.

El programa principal utiliza códigos auxiliares ocultos para verificar el título de la ventana y la información de derechos de autor. Esto se debe a que si se verifican tan pronto como se inician, será fácil para un adúltero verlos y saltarlos. . Por lo tanto, se utilizan algunos métodos aleatorios, jerárquicos o condicionales para obtener una verificación no fija.

En el programa principal, utilice códigos auxiliares ocultos para verificar la integridad del programa principal después del empaquetado. Esto no debe incluirse en la verificación regular; de lo contrario, se omitirá fácilmente. Puede comprobar la longitud del archivo, ya sea MD5 o CRC32.

Se agrega un módulo anti-depuración al programa principal en forma de códigos auxiliares ocultos.

El programa principal está lleno de códigos de verificación de palabras filtrantes de GHOFFICE. Y el código fuente tiene notas, para que no haya ningún error.

El programa principal realiza aleatoriamente la verificación de segundo nivel bajo ciertas condiciones y obtiene el segundo dato del código de registro. Si el código de registro no es lo suficientemente largo y no se puede obtener el segundo dato. Significa que se ha utilizado. Cree una máquina de registro falsa, bloquee la base de datos del usuario y espere a que pague para registrarse.

El programa principal activa la verificación bajo una condición y toma el tercer dato del archivo del código de registro. Si el código de registro no es lo suficientemente largo y no se puede obtener el tercer dato, significa que. Se ha utilizado un pseudocódigo. La máquina de registro bloquea la base de datos del usuario y espera a que pague para registrarse.

Al programar, también debe prestar atención a confundir las cadenas cifradas y almacenarlas en diferentes lugares. Utilice el comando de cifrado de Wu para cifrar datos importantes. También puede agregar algoritmos de la biblioteca de soporte de cálculo numérico. También puede agregar algunos métodos de castigo. Puede agregar algunos de sus propios algoritmos.

El siguiente es un extracto de la experiencia de programación de algunas personas. El contenido básicamente no se ha modificado. Me gustaría expresar mi gratitud.

Apéndice 1 El cifrado ha formado criptografía

Citando al autor de "Criptografía Aplicada":

Hay dos tipos de contraseñas en el mundo: una es para evitar que tu hermana pequeña lea tus archivos; la otra es para evitar que tu hermana pequeña lea tus archivos; adúltero lea sus archivos.

¿Qué pasaría si una carta estuviera encerrada en una caja fuerte y la caja fuerte estuviera escondida en algún lugar de Nueva York... y te dijeran que leyeras la carta? No se trata de seguridad, se trata de esconderse. En cambio, si una carta está encerrada en una caja fuerte, se le entregan la caja fuerte y sus especificaciones de diseño junto con muchas cajas fuertes idénticas para que usted y los mejores ladrones de cajas fuertes del mundo puedan estudiar el mecanismo de la cerradura. Y todavía no puedes abrir la caja fuerte para leer la carta, que es segura.

Esto significa que la seguridad de un sistema criptográfico sólo reside en la confidencialidad de la clave, no en la confidencialidad del algoritmo.

Este es, de hecho, el caso del cifrado de datos puros. Para las personas que no desean ver los datos (el texto sin formato de los datos), utilice un algoritmo de cifrado confiable. Mientras el cracker no conozca la contraseña de los datos cifrados, no podrá descifrarlos.

Sin embargo, el cifrado de software es diferente del cifrado de datos: sólo se puede "ocultar". Independientemente de si está dispuesto a permitirle (usuario legítimo o Cracker) ver los datos (texto sin cifrar del software), el software eventualmente se ejecutará en la máquina y, para la máquina, debe ser texto sin cifrar. Dado que la máquina puede "ver" estos textos sin formato, Cracker, a través de algunas técnicas, también puede verlos.

Entonces, en teoría, cualquier tecnología de cifrado de software se puede descifrar. Es solo que la dificultad de descifrar es diferente. Algunos ocuparán las mejores galletas durante meses, mientras que otros pueden descifrarse sin ningún esfuerzo.

Entonces, la tarea de la lucha contra la piratería (antipiratería técnica, no antipiratería administrativa) es aumentar la dificultad de descifrar Cracker. El costo para ellos de descifrar el software es mayor que el beneficio que él obtiene al descifrarlo. De esta manera, el craqueo de Cracker deja de tener sentido: ¿quién gastará más dinero en comprar software pirateado que en software genuino?

Sin embargo, ¿qué tan fácil es ser "difícil de descifrar"? Sony afirmó una vez que el súper antipiratería (antipiratería de CD de música Key 2 Audio) utilizaba tecnología de vanguardia, pero recientemente fue descifrado por un marcador y se convirtió en la broma de la gente después de la cena.

Por lo tanto, muchas tecnologías que parecen buenas pueden en realidad ser vulnerables a Cracker. Al igual que la Línea Maginot, Cracker no comienza en tu línea defensiva, sino que la "rodea". De esta manera, su tecnología antipiratería será descifrada en lugares que nunca soñó.

¿A qué se debe esto? El análisis final se debe a que el software se ejecuta en la máquina y el software y la máquina están separados; esta es la clave. Si el software y el hardware están completamente unidos y no se pueden separar, es posible lograr un sistema casi irrompible como IDEA. . Esto se explicará en detalle más adelante, cuando hablemos de las tecnologías tradicionales de protección de software.

Para mi solución, no puedo garantizar que Crack Masters no pueda descifrarla dentro de unos días. Solo puedo decir: "En este software, intento bloquear los crackers de uso común. Métodos y posibles lagunas en "Quiero conseguirlo". Pero creo que el software antipiratería en el que me he esforzado durante tres meses no es de ninguna manera un software antipiratería "estilo juguete".

Apéndice 2 "Cómo prevenir el cracking con métodos simples"

Arctic Alien

En el manual de depuración, puede ver las limitaciones de la herramienta de depuración: La primera limitación solo puede establecer puntos de interrupción en 4 áreas de memoria. Cada punto de interrupción no puede controlar más de dos bytes. De esta manera, los puntos de interrupción de la memoria no pueden controlar un área de más de 16 bytes. La segunda limitación es que solo puede rastrear varios subprocesos. al mismo tiempo.

Supongamos que su parte de registro tiene 300 líneas, puede dividirla en 30 llamadas a subrutinas o funciones repetidas func1(), func2()... func30(). Colóquelos al azar en varias partes del programa y no deben colocarse juntos (siempre que pueda encontrarlos usted mismo). No utilice llamadas comunes al sistema como Memcpy para copiar el código de registro. Intente escribirlo usted mismo tanto como sea posible. Memcpy es fácil de escribir y no importa si el rendimiento es deficiente. Después de la compilación, la función en línea se expande y la parte de registro se mezcla con otros códigos. Escribir una máquina de registro es como buscar una aguja en un pajar para encontrar la parte de registro útil entre cientos de miles o incluso millones de códigos ensambladores.

La primera limitación del uso de Debug es que lo más importante es: no junte los códigos de registro. Si su código de registro tiene 12 dígitos, no use una matriz de 12 dígitos para almacenar el código de registro. Puedes definir 12 variables de caracteres globales en diferentes ubicaciones del programa, colocando un bit en cada una, para que el código de registro no sea continuo en la memoria. Es mejor cifrarlo nuevamente (un simple carácter XOR será suficiente) y luego descifrarlo durante la verificación. No utilice la memoria continua para guardar las variables utilizadas para la verificación. Intente definir las variables temporales utilizadas para la verificación en diferentes lugares del programa. Luego, durante la verificación, transfiera continuamente algunos valores a otras variables, lo que será más efectivo en el procesamiento. con fuerza bruta y Loader.

No es necesario utilizar complejos algoritmos de cifrado y es más fácil convertirse en objetivo de seguimiento. Siempre que oculte la parte de registro lo suficientemente bien y no haya lagunas, el algoritmo de cifrado que dedica un día a escribir puede tardar entre 100 y 1000 veces más en descifrarse. La mayoría de la gente se rendiría.

Se arma el registro, tal como se guarda el tesoro en una caja fuerte moderna, que aunque es muy resistente y difícil de descifrar, un maestro cerrajero puede abrirla en dos minutos.

El método utilizado por los antiguos piratas era enterrar tesoros en la isla. De esta manera, no existe un mapa del tesoro y solo hay una forma para que todos los maestros e inferiores puedan excavar. con una palanca. Hay tantos códigos en el programa y el código descompilado puede superar el millón de líneas. Si oculta la parte de registro en él, ocultarlo bien es como enterrar un tesoro en una isla. Los llamados Crackme son simplemente cajas fuertes modernas con las que pueden jugar los expertos, y el mismo efecto se puede lograr con métodos primitivos.

上篇: ¿Un poema antiguo que describe el cabello largo y suelto? 下篇: Frases de redacción aburridasFrases de redacción aburridas (48 frases seleccionadas) 1. Intento no causar problemas a los demás y lo mejor es no molestarme. Esta frase no es indiferencia, sino madurez. Lo que te falta es dinero. No hables de agua, agua, tierra, tierra, fuego, fuego y cosas por el estilo. Os digo que mientras seáis pobres, cualquier cosa os matará. Sólo trabajando duro para ganar dinero podremos conquistar el cielo, conquistar la tierra y conquistar la vida. 3. El buen drama íntimo es Little Times, el mal drama es The Legend of Zhen Huan, el drama del buen amigo es Water Margin y el mal drama es Shanghai Beach. 4. Sé amable pero no demasiado, sé cruel pero no dejes lugar, no especules con la mayor malicia sobre los demás, pero nunca desates el amor sin principios. Cuando odias a las personas que te rodean, la mejor manera de expresar tu disgusto no es discutir con ellas, sino dejarlas diligentemente. De esa manera, desaparecerán de tu vida para siempre, como la muerte. 6. He visto claramente a muchas personas, pero no puedo exponerlas a voluntad; odio a muchas personas, pero no puedo volverme contra ellas fácilmente. A veces, la vida consiste en obligarte a obedecer y humillar. 7. Si estás gordo, come menos; si tienes sueño, acuéstate temprano; si eres pobre, gana más dinero, si no te gusta, aléjate; ponerle las cosas difíciles a Dios. 8. Espero que puedas conocer a alguien que esté interesado en ti, en lugar de alguien que piense que eres bueno después de sopesar los pros y los contras. 9. Hay un número limitado de lugares alrededor de una persona y hay un límite de lo que puedes dar. En este pequeño círculo, algunas personas tienen que salir si quieren entrar. 10. De hecho, no hay una verdadera despedida en la antigua carretera de Changting, ni tampoco se recomienda tomar una copa de vino. Ayer, como es habitual, algunas personas se quedaron esa misma mañana. 11. Cuanto más envejeces, más cauteloso te vuelves, más cauteloso te vuelves y más vulnerable te vuelves. El crecimiento quita no sólo tiempo, sino también el coraje de no tener miedo a perder. 12. La mejor manera de irse no es dar la vuelta paso a paso y mirar a su círculo de amigos todos los días, sino comprender finalmente que eres quien eres y que no hay necesidad de ninguna intersección entre el futuro y el pasado. . 13. La mayoría de los jóvenes de hoy tienen los cuerpos más baratos, la dignidad más preciosa, los votos más poco confiables, los amigos más hipócritas, los sueños más moralistas y la confianza en sí mismos más descarada. 14. El dinero no puede conectar con Dios, pero sí basta para conectar con las personas. 15. La mayor parte de nuestro amor se pierde en el tono cada vez más impaciente, colgar el teléfono cada vez más rápido y responder los mensajes cada vez más lento. 16. Empezar algo puede ser impulsivo. Definitivamente, apegarse a algo es una habilidad. 17. La vida suele ser así. Lo que pensabas que era esperanza en realidad te está hundiendo más profundamente en la desesperación y lo que pensabas que era una desesperación sin fin en realidad tenía esperanza en alguna parte; 18. Eres infeliz porque no puedes captarlo, olvidarlo o expresarlo. 19. Cuanto más trabajas, más progresas y más feliz eres. Cuanto más perezoso eres, más confundido y ansioso estás. 20. No esperes a personas a las que no deberías esperar y no te rompas el corazón. Realmente lleva mucho tiempo entender a quién y qué extraño realmente. 21. La gente siempre desperdicia las mejores cosas antes de empezar a sentirse como la primera vez. Espero que puedas entender: el agua fluye bajo el puente y nunca mira hacia atrás. 22. La vida mejorará cuando se empeore hasta cierto punto, porque no puede empeorar. Aprendí muchas cosas sólo después de trabajar duro. Insistí en acercarme. "Mi vecino Totoro" de Hayao Miyazaki cumple 23 años. Pensar demasiado sólo te destruirá. Te inquieta y empeora algo que no es malo. 24. Ahora creo en dejar que la naturaleza siga su curso. No digas que no me importa, ¿y si me importa? Simplemente miro todo de manera más amplia. 25. Por muy caliente que esté el agua, seguirá estando fría, por muy lleno que esté el entusiasmo, seguirá siendo débil y la persona que amas puede irse, así que tendrás que crecer y dejar de hablar. Habrá mucho tiempo, así que tendrás que acostumbrarte. 26. Exígete más a ti mismo y serás más independiente. Exige menos a los demás y te decepcionarás menos. Prefiero dedicar tiempo a cultivar mi yo imperfecto que perder el tiempo esperando que alguien más sea perfecto. 27. Todos están trabajando duro, no sólo tú que estás lleno de agravios. 28. Siempre hacemos la vista gorda ante nuestros familiares más cercanos, e incluso nos quejamos mucho, pero agradecemos un poco de amabilidad de los "forasteros". 29. Si eres indiferente a los demás, los demás serán indiferentes; si criticas a los demás, también serás criticado; si pones mala cara, los demás no te pondrán buena cara. Todo lo que das volverá a ti. 30. Este es mi temperamento. Mientras los demás me ignoren, ya no te molestaré descaradamente. Si me guardas silencio, tendré que serte indiferente. 31. Asóciate con gente inteligente, enamórate de gente confiable, ten una aventura con gente positiva y viaja con gente divertida. Si puedes hacer esto en la vida, será la mayor felicidad. 32. Quiero trabajar duro para el futuro y ganar mucho dinero en el futuro, no porque ame el dinero, sino porque no quiero estar con nadie por el dinero y no quiero dejar a nadie. por culpa del dinero.