Pregunta

Soy un programador.Tengo alrededor de 5 años de experiencia programando en diferentes tipos de lenguajes.Me preocupaba la velocidad de mi código, la optimización de la memoria que usa mi código, el buen estilo de codificación, etc.Pero nunca pensé en lo seguro que es mi código.Así que he desensamblado mi código para ver qué puede hacer un hacker.¿Sería fácil descifrar mi código?¡Y vi que lo es!Es muy fácil, porque estaba guardando

  1. número de serie como una cadena
  2. códigos de cifrado-descifrado también

Entonces, si alguien tiene un conocimiento mínimo de ensamblador, puede simplemente desensamblarlo y, después de 10 a 20 minutos de depuración, ¡mi código está descifrado!¡Incluso podría hacerse abriendo el exe con el bloc de notas, supongo!:-)

Entonces lo que estoy preguntando es lo siguiente:

  1. ¿Dónde debo almacenar ese tipo de información segura?
  2. ¿Cuáles son las estrategias comunes para entregar un código seguro?
¿Fue útil?

Solución

Lo primero que hay que darse cuenta es que nunca va a impedir que un determinado inversor de la aparición de grietas ningún esquemas de protección, porque cualquier cosa que el código puede hacer, el inversor finalmente encontrar la manera de replicarlo. La única manera que puede lograr cualquier tipo de protección fiable es tener el programa enviado sea nada más que un cliente mudo y tienen la peor parte del software en algún servidor del inversor no tiene acceso a.

Con eso fuera del camino, que sin duda puede hacer que sea más duro para un inversor habría que romper sus protecciones. ofuscación es la clase de primer paso para lograr esto. No tengo ninguna experiencia en el uso ofuscadores pero estoy seguro de que usted puede encontrar algunas sugerencias para algunos de SO. Además, si usted está usando un lenguaje de bajo nivel como C / C ++, simplemente compilar el código con la máxima optimización y pelar todos los símbolos de depuración se consigue una buena cantidad de ofuscación.

hace este artículo unos años, pero sigo pensando TI de técnicas sostiene hoy en día. Es uno de los desarrolladores de un juego de video llamado Spyro hablando del conjunto de técnicas que se utilizan para evitar la piratería. Afirman que no fue sino hasta 3 meses después de la liberación de que una versión agrietada llegó a estar disponible, que es bastante impresionante.

Otros consejos

Si usted está preocupado por la piratería, entonces hay muchos caminos que puede tomar. Haciendo que el código de seguridad más estrictas (ofuscación, códigos de licencia, la unión del software a un equipo en particular, la protección del hardware / dispositivo de protección, etc.) es uno, pero es importante tener en cuenta que todos pieza de software puede ser violada si alguien lo suficientemente talentoso puede ser molestado.

Otro enfoque es considerar el modelo de precios para su software. Si cobra $ 1000 por copia, entonces hay un gran incentivo para que alguien tenga un ir en descifrarlo. Si sólo cobra $ 5, entonces ¿por qué alguien se molestaría en descifrarlo?

Así que lo que se necesita es un equilibrio. Incluso la protección más básica se detendrá la gente común de realizar copias ocasionales. Más allá de eso, las técnicas simples (códigos de ofuscación y licencia) y una estrategia de precios sensata llevará a cabo mayoría de los posibles galletas en la bahía por lo que no vale la pena la molestia de agrietamiento. Después de eso, comienza a recibir en técnicas cada vez más sofisticadas (dongles / CD y necesitan estar presentes para ejecutar el software, sólo ser capaz de ejecutar el software después de iniciar la sesión en un sistema de concesión de licencias en línea) que se necesita mucho esfuerzo / costo para implementar y aumentar significativamente el riesgo de clientes genuinos molestos (recuerda cómo todo el mundo tiene molesto cuando compraron la mitad de la vida pero no sería dejarlos jugar el juego?) - a menos que tenga un producto de corriente populares (es decir, una gran fuente de ingresos para proteger), es probable que no tiene mucho sentido que va a mucho esfuerzo.

Que sea de aplicación web.

Es generalmente no será bien protegida a menos que haya de hacer la comprobación de que usted está en control de un servicio externo - y que el servicio aún puede ser suplantada por aquellos que realmente quiere "romper" la misma. En su lugar, confía en el cliente y proporcionar una protección mínima de derechos de autor. Estoy seguro de que era un artículo o un podcast sobre este por Joel Spolsky algún lugar ... aquí hay otra relacionado con SO cuestionar .

No tengo idea de si va a dejar de Windows proporciona (desde 2000) un mecanismo para recuperar y almacenar información cifrada y también se puede salar este almacenamiento en función de cada aplicación si es necesario: API de protección de datos ( DPAPI )

Esto es en una máquina o un nivel de usuario, pero el almacenamiento de los seriales y tal vez algunas teclas usando podría ser mejor que tenerlos escondidos en la aplicación?

¿Qué tipo de seguro está usted hablando? Asegure desde la perspectiva de que está guardando así los datos de los usuarios? Si es así, estudiar un poco la criptografía real y utilizar existentes bibliotecas para cifrar los datos. La API de Win32 es bastante bueno para esto.

Pero si estamos hablando acerca de detener una galleta de robar su aplicación? Hay muchos métodos, pero se dan por vencidos. Frenan galletas abajo, que no se lo impidan.

En primer lugar hay que definir lo que el código debe ser segura contra, siendo seguro, como tal, no tiene sentido.

Usted parece estar preocupado por la ingeniería inversa y los usuarios que generan códigos de licencia sin pagar, aunque no lo dice. Para hacer esto más difícil que puede ofuscar su código y la información clave de varias maneras. Hay zona también técnicas para hacer que el uso de depuradores más duro, para evitar que la ingeniería inversa de paso a paso por el código y ver la información en claro. Pero esto sólo hace que la ingeniería inversa algo más difícil, por no decir imposible

Otra amenaza para la seguridad común es la ejecución de código no deseado, por ejemplo a través de desbordamientos de búfer.

Una técnica simple para hacer esto es la función XOR sobre todo el código y xor volver cuando lo necesite ... pero esto necesita un conocimiento innato de reunión ... no estoy seguro, pero se puede intentar esto:

void (*encryptionFunctn)(void);
void hideEncryptnFunctn(void)
{
    volatile char * i;
    while(*i!=0xC0) // 0xC0 is the opcode for ret
    {
        *i++^=0x45; // or any other code
    }
}

Para prevenir contra los piratas informáticos de ver su código, se debe utilizar un ofuscador. Un ofuscador utilizará diversas técnicas que hacen que sea extremadamente difícil darle sentido al código ofuscado. Algunas de las técnicas utilizadas son el cifrado de cadena, símbolo de cambio de nombre, el control de flujo de ofuscación, etc. Salida Crypto Obfuscator que adicionalmente también tiene llamada de método escondite externo, anti-Reflector, anti-depuración, etc

El objetivo es construir el mayor número posible de obstáculos en el camino de un pirata informático.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top